Jak už jsem uvedl v předcházejícím díle seriálu, je systémová konfigurace uložená v souboru /etc/X11/fvmw/system.fvwmrc. Tento konfigurační soubor je platný pro celý systém, pokud ovšem nemá uživatel vytvořenou vlastní konfiguraci v souboru .fvwm2rc ve svém domácím adresáři.
Aby se vám lépe experimentovalo, stáhněte si ukázkový konfigurační soubor vytvořený speciálně pro tento článek a uložte jej ve svém domácím adresáři (doufám, že jsem v něm nenasekal příliš mnoho chyb).
Správce oken fvwm je velmi dobře dokumentován ve své manuálové stránce:
man fvwm2
Vlastní manuálovou stránku má i každý modul fvwm.
Konfigurační soubor nemá žádnou pevně danou strukturu, nelze jej v žádném případě přirovnat například k xml souborům nebo ke konfiguračnímu souboru samby. Fvwm používá pro svou konfiguraci spíš jednoduchý programovací jazyk. Přesto lze vysledovat v konfiguraci několik logických částí.
Většina menu se vytváří příkazem AddToMenu
. Vyjímku
mohou tvořit dynamická menu, ale ta jsou námětem na jeden dlouhý
celovečerní díl tohoto krátkého seriálu. Prvním povinným parametrem
příkazu je název příslušného menu. Potom následuje textový nápis a
nakonec požadovaná akce. Pokračovat v příkazu lze na dalším řádku, ten
musí začínat znakem +
.
AddToMenu HlavniMenu + "**** Hlavní menu ****" Title + "" Nop + " X terminál" Xterm + " Mozilla" Exec /usr/bin/mozilla + " Programy" Popup Programy + " Okolní počítače" Popup Pocitace + " Konec práce" Popup Quit-Verify
Ve výše uvedeném příkladu je pro tvorbu menu vystřílený praktický celý využitelný arsenál možných akčních příkazů. Title a Nop pravděpodobně nepotřebují bližší vysvětlení. Exec je využitý pro přímé spuštění programu a Popup pro vyvolání dalšího podmenu. Trochu nejasná může být akce Xterm - jde o volání funkce. Narozdíl od Mozilly Xterm spouštím velmi často a navíc různými způsoby podle okamžité nálady a počtu volných rukou. Pro jeho vyvolání mám proto v konfiguračním souboru definované i další zkratky - doubleclick (MS patented) na volné ploše nebo stištění klávesy "rozevláté wokno". Abych nemusel v konfiguračním souboru vypisovat pokaždé startování xtermu se všemi jeho početnými parametry, mám volání xtermu definované ve funkci na jediném místě.
Funkce se vytvářejí příkazem AddToFunc
. Syntaxe při
tvorbě funkcí je podobná jako při tvorbě menu. Prvním parametrem je
jméno funkce a dále následují jednotlivé akce, tak jak je má hezky za
sebou funkce provádět. U každé akce se navíc dá stanovit, za jakých
podmínek se akce provádí.
AddToFunc Xterm I Exec xterm +xb -ls -bg "#c0c0a0" \ -fn '-misc-fixed-medium-r-normal--14-*-*-*-*-*-iso8859-2' \ -T db1 -e ssh db1 AddToFunc Xterm-or-Root-menu + D Xterm + C Menu HlavniMenu Nop
V příkladu jsou definované dvě funkce. Vysvětlení si zaslouží trochu záhadné písmenko, které se vyskytuje před samotnou definicí požadované akce. Jde o jednoduchý podmíněný příkaz, který říká, za jakých podmínek se má akce spustit. Písmenem I (Immediate) jsou označené akce, které se mají provést okamžitě. Písmenem C (Click) nebo D (Doubleclick) se označují akce, které se provádějí při kliknutí myší a nakonec písmenem H (Hold) se označují akce, které se mají provádět, drží-li uživatel tlačítko myši stištěné.
Některé funkce mají speciální význam. Jsou to hlavně funkce StartFunction, InitFunction a RestartFunction. Ty se provádějí okamžitě po nastartování nebo restartování okenního manažeru.
Provádění změn v myších zkratkách musím často konzultovat s manuálovou stránkou, a to i přesto, že jsem si přímo do konfiguračního souboru popsal jednotlivé parametry. Pro definování myších zkratek slouží příkaz Mouse:
# Myš na ploše Mouse 1 R N Xterm-or-root-menu Mouse 2 R N Xterm-or-Window-Ops Mouse 3 R N Xterm-or-Windows-List Mouse 1 R C Xscreensaver
V příkladu je definováno chování myši při poklikání na volnou plochu obrazovky. V dřívější ukázce jsme si definovali funkci Xterm-or-root-menu. V této funkci se volá buď hlavní menu nebo xterm podle toho, jestli bylo myší kliknuto na plochu jednou nebo dvakrát. Ostatní funkce mají podobný význam.
Příkaz Mouse má čtyři parametry. Prvním je číslo tlačítka myši. Tlačítko levé má obvykle číslo 1, tlačítko prostřední má číslo 2 a tlačítko pravé má číslo 3. Pokud na tlačítku nezáleží a akce se má vyvolat při použití libovolného tlačítka, použije se v konfiguračním souboru číslo 0.
Dalším parametrem je kontext, ve kterém bylo tlačítko stištěno. V příkladu je kontext R - root window - pracovní plocha. Dalšími možnostmi jsou T - titulek okna, I - ikona, W - aplikační okno, S - rámeček okna, F - rohy rámečku okna. Číslice 0 až 9 označují jednotlivá tlačítka umístěná v horní liště okna (počet a vzhled tlačítek lze nastavit). Písmena lze sdružovat dohromady, následující příklad umožňuje měnit velikost oken jak pomocí rožků tak i rámečku okna:
Mouse 1 FS A Resize-or-Raise
Dalším parametrem je modifikátor (Ctrl, Alt, Shift a podobně). N - žádný (no) modifikátor, C - control, M - meta (na klávesnici PS se ukrývá pod klávesou Alt), L - caps lock a nakonec A - jakýkoliv modifikátor. X11 znají další modifikátory mod1 až mod5. Ty zná fvwm jako modifikátory 1 až 5. Modifikátory se mohou sdružovat dohromady a tak lze přiřadit akci například kombinaci Ctrl-Alt-Click pro uzamčení obrazovky (v přiloženém konfiguračním souboru je použita jednodušší kombinace bez Alt):
Mouse 1 R CM Xscreensaver
V přiloženém ukázkovém konfiguračním souboru je na různé kombinace kláves CTRL a doubleclicků pověšeno volání různých xtermů s přístupy na různé počítače. Abych měl při práci ihned jasno, jsou xtermy na různých počítačích odlišené svou barvou.
Klávesové zkratky jsou tvořené prakticky úplně stejně jako zkratky myší. V prostředí X11 je u klávesových zkratek někdy trochu složitější najít jméno pro příšlušnou klávesu. Nepojmenovaná bývá třeba klávesa "rozevláté wokno". Pojmenovat neznámé klávesy je možné pomocí příkazu xmodmap a xev. Ty ovšem nejsou součástí fvwm. Příkazem xev zjistíme scan kód příslušné klávesy a pomocí příkazu xmodmap pak přiřadíme klávese jméno. Jak na to si můžete přečíst v krásném článku Multimediální a jinak vylepšené klávesnice, případně v článku Upravte si klávesnici na Rootu.
Další možnosti, jak upravit chování a vzhled různých oken, nabízejí styly. Jejich pomocí se dá nastavit třeba vzhled horní lišty, počet knoflíků na liště, použité písmo, ikony, barvy a podobně. Každou aplikaci je možné nastavit zvlášť.
Příkaz Style
má celkem jednoduchou syntax. Za příkazem
je jméno (nadpis) okna, kterého se vlastnosti týkají, následované
seznamem vlastností, které se mají pro okno nastavit. Seznam je
oddělený čárkami. Ve jméně okna se dá použít hvězdičková konvence,
pokud je v názvu okna mezera, je nutné uzavřít jméno do uvozovky.
MenuStyle * fvwm, Font -adobe-helvetica-medium-r-*-*-16-*-*-*-*-*-iso8859-2 Style * Font -adobe-helvetica-bold-r-*-*-12-*-*-*-*-*-iso8859-2 Style * IconFont fixed Style * IconBox 640x480+1034+10 Style * BorderWidth 7, HandleWidth 7 Style * ClickToFocus # Styly pro xv: Style "*unregiste*" NoTitle, NoHandles, BorderWidth 0 Style "*unregiste*" Iconbox -40 10 -0 500 Style "*schnauzer*" Iconbox -40 10 -0 500 Style "*schnauzer*" ClickToFocus, ClickToFocusRaisesOff
I když jsem se snažil vybrat jen některé věci, je ukázka stylů poměrně veliká. Hned na prvních třech řádcích se definují fonty - ty lze nastavit pro každou část zvlášt (titulek, ikona, menu...). Na dalších řádcích se říká, kde se mají na obrazovce skladovat ikony, jak mají být široké okraje a jak se mají okna chovat při kliknutí na plochu okna.
Chování se dá pro některé aplikace dále upravit. Obrázky si
prohlížím archaickým programem xv. Kolem obrázku žádné okraje nechci,
nastavuji tedy NoTittle, NoHandles, BorderWidth 0
. Chci,
aby se ikonky programu xv skladovaly na jiném místě obrazovky - pro xv
vytvářím vlastní IconBox.
Při prohlížení obrázků mám samotný obrázek (bez okrajů a titulků)
na popředí. Okno se seznamem obrázků (visual schnauzer) mám utopené
pod obrázkem a chci, aby utopené zůstalo, i když na ně kliknu. Volby
ClickToFocus, ClickToFocusRaisesOff
umožňují, aby jedno
konkrétní okno zůstalo stále vespod, i když je aktivní (celé chování
je ve skutečnosti trochu složitější - okno lze vytáhnout do popředí
kliknutím na rámeček nebo titulek). Zbývající okna tímto nastavením
nejsou ovlivněná a chovají se normálně - při kliknutí se dostanou
nahoru nad ostatní okna.
Sem jsem zahrnul vše ostatní, co v rozmezí tohoto článku nezapadlo jinam. Fvwm má bezpočet různých konfiguračních příkazů, ze kterých uvedu alespoň tři:
ClickTime 200 DoubleClickTime 150 OpaqueMoveSize unlimited
Příkaz ClickTime říká fvwm, jak dlouhé stištění tlačíka myši (v milisekundách) má ještě považovat za kliknutí a co už považovat za držení stištěného tlačítka. Stejně tak příkaz DoubleClickTime dává fvwm vědět, co má být považováno za doubleclick a co za dva nezávislé kliky po sobě. Konečně příkaz OpaqueMoveSize unlimited říká, že po obrazovce se mají vždy přesouvat okna i s celým svým obsahem. V dnešní době superrychlých akcelerovaných videokaret nemá smysl nastavovat něco jiného. V době, kdy jsem ještě honil okýnka na tři osm šestce s videokartou Cirrus Logic 5434 (tehdy úžasné dělo), mělo význam nastavit hodnotu například na 25 - u všech oken, větších než 25 % obrazovky se přesouval pouze rámeček okna, obsah následoval jako poslední až po uvolnění tlačítka myši.
Pro snazší ladění je vhodné někam do menu vložit volání funkce Restart. Ta má jeden parametr - jméno okenního manažeru, který se má místo fvwm nastartovat. Tak můžeme místo fvwm nastartovat úplně jiné prostředí, aniž by bylo třeba se odhlásit. Nejčastěji ovšem startuju opět fvwm2 - při změně konfiguračních souborů tak dojde k implementaci všech provedných změn v konfiguraci, aniž by se ukončily běžící aplikace.
O konfiguraci fvwm jsem nenapsal ani zdaleka vše. V krátkém článku nelze zacházet do přílišných detailů. Vůbec jsem nezmínil například efektnější nastavení stylů (obrázky, barevné přechody), virtuální obrazovky, moduly a určitě mnoho dalšího. O tom napíšu snad zase někdy příště.