Rozdíly
Zde můžete vidět rozdíly mezi vybranou verzí a aktuální verzí dané stránky.
| Obě strany předchozí revize Předchozí verze | |||
| automatické_rozmisťování_oken [2012/09/26 07:31] – old revision restored vojtechtrefny | automatické_rozmisťování_oken [2019/02/25 17:21] (aktuální) – upraveno mimo DokuWiki 127.0.0.1 | ||
|---|---|---|---|
| Řádek 1: | Řádek 1: | ||
| + | ====== Automatické rozmisťování oken ====== | ||
| + | {{.: | ||
| + | |||
| + | Program // | ||
| + | |||
| + | ====== Instalace ====== | ||
| + | Program se nachází v repozitářích Ubuntu, stačí [[Instalace programů|nainstalovat]] balík [[apt:// | ||
| + | |||
| + | Po instalaci je vhodné nastavit // | ||
| + | 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 '' | ||
| + | |||
| + | ====== Konfigurace ====== | ||
| + | Konfigurační soubory se ukládají do složky '' | ||
| + | |||
| + | Pro začátek si vytvořte ve svém domovském adresáři složku '' | ||
| + | |||
| + | ====== Pravidla ====== | ||
| + | ===== Základní syntaxe ===== | ||
| + | Základní tvar pravidla podle kterého // | ||
| + | < | ||
| + | (if | ||
| + | (// | ||
| + | (//akce//) | ||
| + | ) | ||
| + | </ | ||
| + | Případně: | ||
| + | < | ||
| + | (if | ||
| + | (// | ||
| + | (begin | ||
| + | //akce1// | ||
| + | //akce2// | ||
| + | ... | ||
| + | ) | ||
| + | ) | ||
| + | </ | ||
| + | Co to znamená?? Počáteční **if** jistě napoví, že se jedná o **podmínku**. **// | ||
| + | |||
| + | Následující příklad to snad objasní lépe: | ||
| + | |||
| + | < | ||
| + | (if ;když | ||
| + | (is (application_name) " | ||
| + | (set_workspace 2) ;přesuň jeho okna na plochu 2 | ||
| + | ) | ||
| + | </ | ||
| + | |||
| + | Pokud využívate služeb programu compiz (grafické efekty), tak namísto "" | ||
| + | |||
| + | :!: Toto je jen základní tvar jednoduchého pravidla. Schéma tvoření složitějších pravidel najdete na [[http:// | ||
| + | |||
| + | ===== operátory ===== | ||
| + | ==== is ==== | ||
| + | Používá se pro porovnání řetězců, které musí být naprosto stejné. Například: | ||
| + | < | ||
| + | (if ;když | ||
| + | (is (application_name) " | ||
| + | (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 '' | ||
| + | Příklad: | ||
| + | < | ||
| + | (if ;když | ||
| + | (contains (window_name) " - muCommander" | ||
| + | (begin | ||
| + | (set_workspace 3) ;přesuň toto okno na plochu 3 | ||
| + | (maximize) ; a maximalizuj ho | ||
| + | ) | ||
| + | ) | ||
| + | </ | ||
| + | |||
| + | ===== 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_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 | ||
| + | </ | ||
| + | < | ||
| + | WM_CLASS(STRING) = " | ||
| + | </ | ||
| + | |||
| + | |||
| + | 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) " | ||
| + | (set_workspace 4) ;přesuň toto okno na plochu 4 | ||
| + | ) | ||
| + | </ | ||
| + | |||
| + | ===== akce ===== | ||
| + | ==== set_workspace ==== | ||
| + | Přesune okno splňující podmínky na předem určenou plochu. Příklad: | ||
| + | < | ||
| + | (if ;když | ||
| + | (is (window_class) " | ||
| + | (set_workspace 4) ;přesuň toto okno na plochu 4 | ||
| + | ) | ||
| + | </ | ||
| + | ==== maximize ==== | ||
| + | Maximalizuje okno. Příklad: | ||
| + | < | ||
| + | (if ;když | ||
| + | (begin | ||
| + | (is (application_name) " | ||
| + | (set_workspace 2) ;přesuň jeho okna na plochu 2 | ||
| + | (maximize) ; a maximalizuj | ||
| + | ) | ||
| + | ) | ||
| + | </ | ||
| + | ==== minimize ==== | ||
| + | Funguje jako '' | ||
| + | |||
| + | ==== 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 | ||
| + | </ | ||
| + | < | ||
| + | (if ;když | ||
| + | (is (window_name) " | ||
| + | | ||
| + | ) | ||
| + | </ | ||
| + | |||
| + | |||
| + | ==== 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 // | ||
| + | < | ||
| + | (if ;když | ||
| + | (is (window_class) " | ||
| + | (pin) ;zobrazuj na všech plochách | ||
| + | ) | ||
| + | </ | ||
| + | ==== above ==== | ||
| + | Okno bude vždy navrchu, nikdy nebude překryto. Příklad: | ||
| + | < | ||
| + | (if ;když | ||
| + | (is (window_class) " | ||
| + | (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 (" | ||
| + | |||
| + | ==== opacity ==== | ||
| + | Nastaví průhlednost příslušnému oknu. Bohužel, podle mých zkušeností nefunguje. | ||
| + | < | ||
| + | (if ;když | ||
| + | (is (application_name) " | ||
| + | (opacity 50) ; nastav jeho průhlednost na 50% | ||
| + | ) | ||
| + | </ | ||
| + | ==== skip_tasklist ==== | ||
| + | Okno nevytvoří " | ||
| + | |||
| + | ==== spawn_sync ==== | ||
| + | Spustí externí příkaz. Příklad: | ||
| + | < | ||
| + | (if ;když | ||
| + | (is (application_name) " | ||
| + | (spawn_sync | ||
| + | " | ||
| + | " | ||
| + | ) | ||
| + | ) | ||
| + | </ | ||
| + | |||
| + | ==== println ==== | ||
| + | Testovací akce, nepřesouvá okna, jenom vytiskne na standardní výstup programu // | ||
| + | < | ||
| + | sudo killall devilspie #zabije případnou instanci spuštěnou po startu | ||
| + | devilspie #nastartuje devil' | ||
| + | </ | ||
| + | < | ||
| + | (if ;když | ||
| + | (is (window_class) " | ||
| + | (println "Okno Gimpu detekováno" | ||
| + | ) | ||
| + | </ | ||
| + | ====== Odkazy ====== | ||
| + | * [[http:// | ||
| + | * [[http:// | ||
| + | |||
| + | {{page> | ||
| + | |||
| + | {{page> | ||