automatické_rozmisťování_oken

Automatické rozmisťování oken

Uživatelé kteří mají funkční Akcelerované prostředí, mohou velmi jednoduše nastavit rozmisťování oken pomocí správce jeho nastavení. V Ubuntu je to Manažer nastavení compizu.

Program Devil's pie slouží k automatickému rozmisťování oken (vzhledem k obrazovce i virtuálním plochám) a nastavení ostatních vlastností jako je průhlednost, dekorace… Tyto vlastnosti jsou užitečné především pro uživatele kteří nejsou zvyklí na používání virtuálních ploch a tento program jim pomůže udržet pořádek ve změti oken. Bohužel tento program není příliš vhodný pro začátečníky, kterým se tento návod pokusí instalaci a konfiguraci usnadnit.

Instalace

Program se nachází v repozitářích Ubuntu, stačí nainstalovat balík devilspie.

Po instalaci je vhodné nastavit Devil's pie na automatické spouštění po startu: Zvolte Systém → Volby → Sezení a tlačítkem Přidat otevřete dialog přidání programu po startu. Do kolonky Jméno: napište Devil's pie a do Příkaz: devilspie &

Konfigurace

Konfigurační soubory se ukládají do složky .devilspie ve vašem domovském adresáři. Mají koncovku *.ds a může jich tam být libovolné množství, program prochází vždy všechny. Do těchto souborů se ukládají pravidla pro manipulaci s okny, která se píší v jednoduchém skriptovacím jazyku (jde o speciální dialekt jazyku Lisp), který bude popsán níže.

Pro začátek si vytvořte ve svém domovském adresáři složku .devilspie (pozor, složky začínající na . jsou skryté, v Nautilu je zobrazíte pomocí Ctrl+H). V této složce vytvořte soubor settings.ds do kterého budete ukládat všechna svá pravidla pro manipulaci s okny.

Pravidla

Základní tvar pravidla podle kterého Devil's pie pracuje s okny je následující:

(if
  (//operátor// (//matcher//) "//řetězec//")
  (//akce//)
)

Případně:

(if
  (//operátor// (//matcher//) "//řetězec//")
  (begin
    //akce1//
    //akce2//
    ...
  )
)

Co to znamená?? Počáteční if jistě napoví, že se jedná o podmínku. akce, například přesunutí okna na jinou plochu bude provedena, v případě že bude splněna podmínka. Podmínka je splněna vždy, když nějaký textový řetězec získaný pomocí matcheru (matcherem může být například popisek okna, název aplikace…) odpovídá vámi zadanému řetězci. Jak moc mu musí odpovídat, určuje operátor. Více akcí, které se provedou postupně po sobě musíme definovat pomocí (begin a tento blok po poslední akci uzavřeme ).

Následující příklad to snad objasní lépe:

(if ;když
  (is (application_name) "firefox-bin") ;je jméno spustitelného souboru firefox-bin
  (set_workspace 2) ;přesuň jeho okna na plochu 2
)

Z následujícího pravidla je patrné, jak se píšou komentáře, stačí napsat středník a zbytek řádku je ignorován. Jinak tento příklad prostě přesune každé okno Firefoxu na plochu s číslem 2.

Pokud využívate služeb programu compiz (grafické efekty), tak namísto „„set_workspace““ musíte použít „„set_viewport““.

:!: Toto je jen základní tvar jednoduchého pravidla. Schéma tvoření složitějších pravidel najdete na specializované wiki.

Používá se pro porovnání řetězců, které musí být naprosto stejné. Například:

(if ;když
  (is (application_name) "synaptic") ;je jméno spustitelného souboru synaptic
  (set_workspace 3) ;přesuň jeho okna na plochu 3
)

Pro splnění podmínky stačí, matcher obsahoval řetězec v uvozovkách. Podmínka bude splněna i když bude hodnota například matcheru Náhled „Ubuntu Česko - Opera a řetězec se kterým je matcher porovnáván je jen Opera, bude podmínka splněna a dojde k provedení akce. Příklad:

(if ;když
  (contains (window_name) " - muCommander") ;obsahuje popisek okna řetězec " - muCommander"
  (begin
    (set_workspace 3) ;přesuň toto okno na plochu 3
    (maximize) ; a maximalizuj ho
  )
)

Tento operátor je velmi užitečný, protože spoustu aplikací se z nějakého důvodu nepodaří detekovat pomocí matcheru application-name a přesné porovnávání popisku by nemělo cenu, protože většina aplikací popisek svých oken mění (například podle zobrazovaného dokumentu), jen část ho stále zůstává stejná.

Jméno okna, zobrazuje se v horním pruhu u každého okna

Jméno souboru aplikace, která okno vytvořila. Detekce bohužel funguje, jak se jí chce, takže je lepší používat window_name nebo window_class

Vytvoří-li jedna aplikace více oken, můžeme vytvořit podmínku, na kterou všechna okna dané aplikace zareagují. Jakou má okno window_class zjistíme následovně:

  1. Otevřeme terminál
  2. Zadáme příkaz:
xprop |grep WM_CLASS

- Kurzorem klikneme na požadované okno. Výstup bude vypadat nějak takto:

WM_CLASS(STRING) = "gimp", "Gimp"

Příkaz nám vrátil dva alternativní názvy třídy okna, pomocí kterého se na okna stejné aplikace můžeme odkazovat.

Příklad:

(if ;když
  (is (window_class) "gimp") ;je okno členem třídy "gimp"
  (set_workspace 4) ;přesuň toto okno na plochu 4
)

Přesune všechna okna „Gimpu“ na stejnou plochu.

Přesune okno splňující podmínky na předem určenou plochu. Příklad:

(if ;když
  (is (window_class) "gimp") ;je okno členem třídy "gimp"
  (set_workspace 4) ;přesuň toto okno na plochu 4
)

Maximalizuje okno. Příklad:

(if ;když
  (begin
    (is (application_name) "firefox-bin") ;je jméno spustitelného souboru firefox-bin
    (set_workspace 2) ;přesuň jeho okna na plochu 2
    (maximize) ; a maximalizuj
  )
)

Funguje jako maximize, akorát okno minimalizuje

Umožňuje nastavit pozici a rozměry okna v pixelech. Tyto hodnoty je však potřeba nejdříve zjistit. Použijte následující postup:

  1. Otevřete si příslušné okno a nastavte si jeho velikost a pozici na obrazovce jak se vám hodí
  2. Zadejte v terminálu
xwininfo | grep geometry

a kurzorem klikněte na ono okno. Výstupem bude něco jako

-geometry 218x405-0+0

- Zadejte záskaná čísla jako parametr akce geometry. Příklad:

(if ;když
 (is (window_name) "Seznam kamarádů") ; je zobrazeno hlavní okno Pidginu
 (geometry  "218x405-0+0") ;nastav jej do pravého horního rohu a změň jeho rozměry
)

Nastaví okno jako aktivní.

Jednoduše okno splňující podmínky zase zavře. Praktická aplikace mě nějak nenapadá ;-)

Nastaví okno aby bylo viditelné na všech virtuálních plochách. Velmi praktická funkce, i když nyní již nahraditelná pomocí obdobné funkce poskytované managerem Metacity. Příklad:

(if ;když
 (is (window_class) "Pidgin") ;je třída okna "Pidgin"
 (pin) ;zobrazuj na všech plochách
)

Okno bude vždy navrchu, nikdy nebude překryto. Příklad:

(if ;když
  (is (window_class) "gimp") ;je okno členem třídy "gimp"
  (above) ;Zakáže překrývání oken Gimpu
)

Opak minulé akce, zařídí, že bude dané okno vždy v nejnižší vrstvě oken (nikdy žádné okno nepřekryje). Používá se zcela stejně.

Odstraní horní lištu („titulek“) okna.

Nastaví průhlednost příslušnému oknu. Bohužel, podle mých zkušeností nefunguje.

(if ;když
  (is (application_name) "xterm") ;je jméno spustitelného souboru xterm
  (opacity 50) ; nastav jeho průhlednost na 50%
)

Okno nevytvoří „tlačítko“ na liště jako obyčejně.

Spustí externí příkaz. Příklad:

(if ;když
  (is (application_name) "firefox-bin") ;je jméno spustitelného souboru firefox-bin
  (spawn_sync
    "iwconfig wlan0 essid /essid/ key /key/" ; připoj se k wifi
    "dhclient" ; získej IP
  )
)

Po otevření firefoxu se automaticky připojí k WiFi síťi ;-)

Testovací akce, nepřesouvá okna, jenom vytiskne na standardní výstup programu Devil's pie požadovaný text. Abyste jej viděli musíte spustit Devil's pie z příkazové řádky:

sudo killall devilspie #zabije případnou instanci spuštěnou po startu
devilspie #nastartuje devil's pie

Pokud nyní uložíte do konfiguračního souboru například

(if ;když
  (is (window_class) "gimp") ;je okno členem třídy "gimp"
  (println "Okno Gimpu detekováno")  ;vypiš text
)

vypíše při každém otevření okna s třídou gimp vámi zadaný text v uvozovkách. Tato akce samořejmě slouží jen jako nástroj pro testování, zda jsou pravidla definována správně.

Odkazy

Grafická úprava: Tento návod potřebuje důležité grafické a stylistické úpravy. Více...

Konvence: Tento návod nesplňuje některé z na Wiki zavedených konvencí. Více...

  • Poslední úprava: 2019/02/25 18:21
  • (upraveno mimo DokuWiki)