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
automatické_rozmisťování_oken [2012/09/26 03:38]
94.23.1.28 IyzJAMUkEkHva
automatické_rozmisťování_oken [2012/09/26 09:31] (aktuální)
Vojtěch Trefný old revision restored
Řádek 1: Řádek 1:
-Whoa!You made certain fine pitnos thereUsed to looking about them and located ​number of persons will consent with the blogThis site is one of the best Ive witnessed in little whileYour post offers excellent materialWe'​ve ​previously been browsing in many different places for info for this sort of stuffI looked everywhereI looked in Bingand that missed your posting right until todayHonestlyyou truly present great articlesreally ​it is actually informativeWe're returning here in the forseeable futureYou'll want to maintain website updated, it's superbGo take look at my website and obtain ​Nook+====== 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) ​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 tento program jim pomůže udržet pořádek ve změti okenBohuž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ářiMají 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 oknykterá 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ářsložku ''​.devilspie''​ (pozorslož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 cenuprotož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 pixelechTyto hodnoty je však potřeba nejdříve zjistit. Použijte následující postup: 
 +  - Otevřete si příslušné okno nastavte si jeho velikost ​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}}
  • Poslední úprava: 2012/09/26 09:31
  • autor: Vojtěch Trefný