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í syntaxe
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.
operátory
is
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 )
contains
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á.
matchery
window_name
Jméno okna, zobrazuje se v horním pruhu u každého okna
application_name
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
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ě:
- Otevřeme terminál
- 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.
akce
set_workspace
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 )
maximize
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 ) )
minimize
Funguje jako maximize
, akorát okno minimalizuje
geometry
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:
- Otevřete si příslušné okno a nastavte si jeho velikost a pozici na obrazovce jak se vám hodí
- 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 )
focus
Nastaví okno jako aktivní.
close
Jednoduše okno splňující podmínky zase zavře. Praktická aplikace mě nějak nenapadá
pin
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 )
above
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 )
below
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ě.
undecorate
Odstraní horní lištu („titulek“) okna.
opacity
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% )
skip_tasklist
Okno nevytvoří „tlačítko“ na liště jako obyčejně.
spawn_sync
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
println
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...