automatické_rozmisťování_oken

Rozdíly

Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.

Odkaz na výstup diff

Obě strany předchozí revize Předchozí verze
Následující verze
Předchozí verze
automatické_rozmisťování_oken [2012/09/26 03:38] – IyzJAMUkEkHva 94.23.1.28automatické_rozmisťování_oken [2019/02/25 18:21] (aktuální) – upraveno mimo DokuWiki 127.0.0.1
Řádek 1: Řádek 1:
 +====== Automatické rozmisťování oken ======
  
 +{{.:tip.png}} 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 [[Compiz Fusion#Mana.2BAX4-er_nastaven.2BAO0_Compizu|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čí [[Instalace programů|nainstalovat]] balík [[apt://devilspie|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í:
 +<code>
 +(if
 +  (//operátor// (//matcher//) "//řetězec//")
 +  (//akce//)
 +)
 +</code>
 +Případně:
 +<code>
 +(if
 +  (//operátor// (//matcher//) "//řetězec//")
 +  (begin
 +    //akce1//
 +    //akce2//
 +    ...
 +  )
 +)
 +</code>
 +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:
 +
 +<code>
 +(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
 +)
 +</code>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 [[http://foosel.org/linux/devilspie|specializované wiki]].
 +
 +===== operátory =====
 +==== is ====
 +Používá se pro porovnání řetězců, které musí být naprosto stejné. Například:
 +<code>
 +(if ;když
 +  (is (application_name) "synaptic") ;je jméno spustitelného souboru synaptic
 +  (set_workspace 3) ;přesuň jeho okna na plochu 3
 +)
 +</code>
 +==== 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:
 +<code>
 +(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
 +  )
 +)
 +</code>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:
 +<code>
 +xprop |grep WM_CLASS
 +</code>  - Kurzorem klikneme na požadované okno. Výstup bude vypadat nějak takto:
 +<code>
 +WM_CLASS(STRING) = "gimp", "Gimp"
 +</code>
 +
 +
 +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:
 +<code>
 +(if ;když
 +  (is (window_class) "gimp") ;je okno členem třídy "gimp"
 +  (set_workspace 4) ;přesuň toto okno na plochu 4
 +)
 +</code>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:
 +<code>
 +(if ;když
 +  (is (window_class) "gimp") ;je okno členem třídy "gimp"
 +  (set_workspace 4) ;přesuň toto okno na plochu 4
 +)
 +</code>
 +==== maximize ====
 +Maximalizuje okno. Příklad:
 +<code>
 +(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
 +  )
 +)
 +</code>
 +==== 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
 +<code>
 +xwininfo | grep geometry
 +</code>
 +a kurzorem klikněte na ono okno. Výstupem bude něco jako
 +<code>
 +-geometry 218x405-0+0
 +</code>  - Zadejte záskaná čísla jako parametr akce ''geometry''. Příklad:
 +<code>
 +(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
 +)
 +</code>
 +
 +
 +==== 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:
 +<code>
 +(if ;když
 + (is (window_class) "Pidgin") ;je třída okna "Pidgin"
 + (pin) ;zobrazuj na všech plochách
 +)
 +</code>
 +==== above ====
 +Okno bude vždy navrchu, nikdy nebude překryto. Příklad:
 +<code>
 +(if ;když
 +  (is (window_class) "gimp") ;je okno členem třídy "gimp"
 +  (above) ;Zakáže překrývání oken Gimpu
 +)
 +</code>
 +==== 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.
 +<code>
 +(if ;když
 +  (is (application_name) "xterm") ;je jméno spustitelného souboru xterm
 +  (opacity 50) ; nastav jeho průhlednost na 50%
 +)
 +</code>
 +==== skip_tasklist ====
 +Okno nevytvoří "tlačítko" na liště jako obyčejně.
 +
 +==== spawn_sync ====
 +Spustí externí příkaz. Příklad:
 +<code>
 +(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
 +  )
 +)
 +</code>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:
 +<code>
 +sudo killall devilspie #zabije případnou instanci spuštěnou po startu
 +devilspie #nastartuje devil's pie
 +</code>Pokud nyní uložíte do konfiguračního souboru například
 +<code>
 +(if ;když
 +  (is (window_class) "gimp") ;je okno členem třídy "gimp"
 +  (println "Okno Gimpu detekováno" ;vypiš text
 +)
 +</code>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 ======
 +  * [[http://foosel.org/linux/devilspie|Podrobná příručka k Devil's pie]]
 +  * [[http://burtonini.com/blog/computers/devilspie|Domovská stránka programu]]
 +
 +{{page>Úpravy/Grafika}}
 +
 +{{page>Úpravy/Konvence}}