fvwm2.gif Tippek, Trükkök


Egyik kedvenc időtrabló és haszontalan foglalatosságom az fvwm-konfigurálás. Sokan nem is tudják, hogy mennyire rugalmas, hatékony, ugyanakkor gyors és kis memóriaigényű ez a window-manager és emiatt mindenféle gyanús külsejű WM-eket használnak! ;-) Ezen oldalal az a célom, hogy megkedveltessem és népszerűsítsem ezt a sokszor méltatlanul mellőzött programot.

Először egy kis szómagyarázat, mit jelent az, hogy FVWM. Nos, ez egy rövidítés, a teljes nevén F(?) Virtual Window Manager. Bővebb magyarázatot az első két tag érdemel. A szerző, Robert Nation, állítása szerint már elfelejtette, mit is jelent az F. :) Néhány lehetséges magyarázat a FAQ-ból:

Famous (híres), Fantastic (fantasztikus :), Flexible (hajlékony), Fast (gyors), FVWM (GNU-féle rekurzív definíció), Fu!&*$ing (kib%$#ott). Ez utóbbi elnevezés a legkevésbé találó! :)))

A második tag a virtuális jellegre utal. Virtuális itt azt jelenti, hogy a teljes munkaterületünk több látszólagos képernyőből épül fel, ezek között többféle módszerrel tudunk navigálni.


Főbb működési módok

Fontok

A "Font" utasítással lehet a legördülő menükhöz tartozó fontokat beállítani. A "WindowFont" az ablakok, az "IconFont" az ikonok címeinek kinézetét szabja meg.

Font			-adobe-helvetica-medium-o-*-*-16-*-*-*-*-*-*-*
WindowFont              -adobe-helvetica-bold-o-*-*-15-*-*-*-*-*-*-*
IconFont		fixed

Fókuszálás

Itt nagyon eltérnek egymástól az egyéni ízlesek. Én nagyon szeretem használni az "AutoRaise" funkciót, másokat viszont ez az őrületbe tud kergetni. Arról van itt szó, hogy amelyik ablak felett az egérkurzor van, az ugrik legfelülre. Az utasítás utáni számmal lehet beállítani, hogy ez hány miliszekundum idő elteltével következzék be. Például:

AutoRaise 750

Ha ez nem szimpatikus, még mindíg van lehetőség van arra, hogy az az ablak legyen aktív, amelyik felett az egérkurzor van. (Ez az alapbeállítás az SGI-féle 4Dwm-ben.) Végül, lehetséges az is, hogy az aktív ablakot (mint a Motif window managerben) klikkeléssel válasszuk ki: ClickToFocus

Ikonok

Az "IconBox"-ok kijelölésével szabhatjuk meg, hogy desktop-unk mely területére (netán területeire) kerüljenek az ikonok. Ha negatív számokat adunk meg, akkor azok a jobb, illetőleg az alsó oldaltól számítanak.

IconBox -110 40 -5 -140
IconBox 5 -140 -140 -5 

A "SuppressIcons" parancs megadásával eltüntethetjük ikonjainkat a képernyőről, ez a funkció elsősorban alacsony felbontás esetén lehet hasznos. Ilyenkor érdemes ügyelni arra, hogy valamelyik egérgombra vagy billentyűkombinációra műkösésbe lépjen a "WindowList" (ez általában a jobb gombhoz szokott hozzárendelve lenni), mellyel ráugorhatunk futó taszkjaink közül arra, amelyikre akarunk. Ha a "StubbornIcons" opciót beállítjuk, akkor nem arra a desktopra ugrik alkalmazásunk, ahol éppen vagyunk, hanem az eredeti helyére.

"StickyIcons" Jópofa funkció. Ha virtuális desktop-ot váltunk, az ikonok jönnek velünk.

MWM (Motif Window Manager) emuláció

Az "MWMFunctionHints", "MWMDecorHints" és "MWMHintOverride" opciókat érdemes beállítani, elsősorban a Motifos applikációk igényelhetik ezeket.

MWMMenus : Ha egy olyan menüre visszük rá a kurzort, amely alatt még almenü is rejlik, akkor azonnal előugrik, mint ahogy az a Motif alkalmazásoknál szokásos.

MWMBorders : A kereteknek élesebb az árnyékolása; 1 pixel széles a normál 2 pixel helyett. Ha ezt megadjuk, akkor az ablakjaink kb. így fognak kinézni:

shotfvwm2.jpg

Ellenkező esetben meg így:

shotfvwm1.jpg


Egyéb apróságok

A "ClickTime" funkcióval beálítható, hogy több egérklikk esetében mennyi ideig számítson az dupla-, ill. triplaklikknek. (Azt ugye, mindenki tudja, hogy a triplaklikkel egy egész sort lehet kijelölni! ;-) Az alapérték:

 ClickTime 150 

Az "OpaqueMove" opcióhoz tartozó szám (N) arra vonatkozik, hogy ha egy ablak többet foglal el a képernyő területéből, mint N%, akkor mozgatás közben csak a keret változtatja a helyét, az ablak csak letételkor kerül az új pozicióba. Nagy értéket (50-100) csak gyors videokártyához ajánlott használni! Egy célszerűen megválasztott érték:

 OpaqueMove 20 

Az "EdgeScroll" és az "EdgeResistance" a virtuális desktopok közti gyors váltást hivatott elősegíteni. Azaz, ha a képernyő széléhez húzzuk az egeret, átugorhatunk a következőre, vagy odébbugorhatunk. Példák:

EdgeScroll 100 100 (teljesen átvált a következő desktopra)

EdgeScroll 50 50 (Fél képernyőt arrébbugrik)

Az "EdgeResistance" első paramétere az időt jelenti miliszekundumban, amennyi elteltével megtörténik a képernyőváltás. A második egy távolságot jelent pixelben, aminél ha közelebbről mozgatjuk az ablakot a képernyő széléhez, akkor a WM meggátolja annak átcsúszását a túloldalra, egészen addig, amíg a kurzor is át nem kerül. (Itt be kell valljam, hogy ettől az egész "EdgeScroll" funkciótól néha szálanként tudnám kitépni a hajam, így aztán ezt nem is használom.)

Viszonylag elfogadható értékek szerintem:

EdgeScroll 50 50
EdgeResistance 500 200 
Az a gond, hogy ha az első értéket alacsonyra állítjuk, akkor rengetegszer fogunk véletlenül ugrálni a desktopok között, itt jön az a bizonyos hajtépős effektus. :) Ha meg túl magasra, akkor felesleges az egész, jobban járunk, ha CTRL+kurzornyíllal, vagy egérrel váltunk desktopot. Így az általam használt érték (egyébkent a Slackware 3.0-ban ez az alapérték):

 EdgeResistance 10000 0 

Ablakok elhelyezése

Ha nyitunk egy új ablakot, annak elhelyezése többféle módon lehetséges. Alapesetben a kinyíló ablakokat mi magunknak kell letenni egy klikkentéssel, ha nem akarunk klikkentgetni, akkor a RandomPlacement opció használata ajánlott. Ha a SmartPlacement funkció be van kapcsolva, akkor az fvwm megpróbálja fedetlen helyekre tenni az új ablakokat. Ha ez nem sikerül neki, akkor attól függően, hogy használunk-e RandomPlacement-et leteszi magától valahová, vagy ránk bízza a döntést.

Ha még a StubbornPlacement-t is használunk SmartPlacement mellett, akkor az fvwm az előpenderülő ablakokkal igyekszik nem letakarni az ikonokat.


Dekorációk

DecorateTransients Ilyenkor az átmeneti jellegű ablakok (pl. dialógusdobozok) is kapnak dekorációt, például ilyet:

dialog.gif

Virtuális desktop beállítása

Szöveg helyett ismét egy példa. 3x3 egységnyi desktopot állítunk be, a területe a root ablak 28-ad részét foglalja el, és a (6,5)-ös koordinátán van a bal felső sarka.

DeskTopSize 3x3
DeskTopScale 28
Pager 6 5
Az ablak fejlécében lévő nyomógomb kinézetét is természetesen szabadon variálhatjuk. Egyelőre most csak a saját gombjaim kódját mutatom be:

Cursor 3 60
ButtonStyle : 1 5 20x40@1 80x40@1 80x60@0 20x60@0 20x40@1
ButtonStyle : 2 5 20x20@1 20x80@1 80x80@0 80x20@0 20x20@1
ButtonStyle : 4 5 40x40@1 60x40@1 60x60@0 40x60@0 40x40@1
ButtonStyle : 6 13 26x29@1 34x21@1 50x35@1 70x21@1 79x29@1 63x48@0 79x65@1 70x75@0 50x61@0 34x75@0 26x65@0 44x48@1 26x29@0
Az első sorban a kurzor típusát állítjuk be, hogy milyen legyen, ha épp gombjaink felett tanyázik. A 3-as szám a fejlécben lévő gombokra vonatkozik (van még ezen kívül 15 másik lehetőség, azt most egyelőre hagyjuk), a második az /usr/include/X11/cursorfont.h állományban definiált (nálam 78 féle) kurzor közül a 60-ast (kéz) rendeli hozzá a gombokhoz. A ButtonStyle kulcsszót követően a gomb száma áll (baloldalt a páratlan, jobboldalt a páros számozásúak vannak kívülrpl befelé haladva), mögötte a mérete, majd a "vonalas rajz" következik.

Stílusok

A "Style" kulcsszóval az egyes alkalmazásokhoz rendelt erőforrásokat állíthatjuk be. Ha az alkalmazásnak "*"-ot adunk meg, akkor az általános érvénnyel fog bírni.

BorderWidth: Az átmeneti jellegű ablakok keretének vastagságát állítja be.

HandleWidth: Ugyanez, az általános jellegű ablakokra. Szöveg helyett inkább következzenek példák!

HandleWidth 0 5 7 10
147 kb152 kb150 kb155 kb

NoTitle: Az ablakra nem tesz fejlécet.

NoHandles: Az ablakot nem keretezi be.

Sticky: Odaragasztja az ablakot a képernyőhöz; ha virtuális desktoptot váltunk, az ablak velünk jön.

WindowListSkip: A megadott nevű ablakot kihagyja a felsorolásból, ha "WindowList"-et kérünk.

StartsOnDesk szám: A szám-mal jelzett képernyőre jön fel az ablak.

Color szín1/szín2: Az ablak kerete szín2, rajta a felirat szín1 színnel fog virítani.

Icon: Az alkalmazáshoz a megadott ikont rendeli hozzá. Az ikonnak szerepelnie kell az "IconPath" vagy "PixmapPath" könyvtárak egyikében. Pl:

Style "xterm" Icon xterm.next.xpm


Függvények

Function függvénynév: Összetettebb függvény definiálását teszi lehetővé az fvwm beépített parancsai segítségével, melyeket aztán hozzárendelhetünk egérklikkentésekhez, vagy billentyűzetkombinációkhoz. A függvények a kiváltó események hatására hajtódnak végre, ezek a következők lehetnek: Immediate (azonnal végrehajtja a parancsot), Motion (ha a ClickTime opcióval megadott időn belül nem engedjük fel a lenyomott egérgombot, netán még mozgatjuk is), Click (kattintás) és DoubleClick (kettős kattintás). Itt aztán szabadjára engedhetjük fantáziánakat, a lehetőségek szinte korlátlanok!

A következő példában létrehozunk két függvényt, melyek az ablakok kinagyítását vezérlik.

Function "maximize_func"
	Maximize	"Motion" 0 100
	Maximize	"Click" 0 75
	Maximize	"DoubleClick" 92 75
EndFunction
Function "maximize_horiz"
	Maximize        "Click" 75 0
	Maximize	"DoubleClick" 96 0
EndFunction
Rendeljük hozzá ezeket a bal, illetve a középső egérgombokhoz:
Mouse 1         2       N       Function "maximize_func"
Mouse 2         2       N       Function "maximize_horiz" 
A következő fog történni: ha a maximalizáló gombra kattintunk a bal gombbal, az ablak függőlegesen megnő a képernyő magasságának 75%-ra. Ha egy kicsit lenyomva tartjuk a gombot klikkentéskor, az ablak a képernyő teljes magasságára kinyújtja magát. Kettős kattintásra vízszintesen is megnő az ablak, majdnem a teljes képernyőt elfoglalja. (Hagy helyet a GoodStuff-nak és az ikonoknak.) A középső gombbal vízszintesen tudjuk kinyújtani az ablakot háromnegyedrészt (szimpla klikkel), vagy majdnem teljesen (duplaklikkel).

Némi magyarázattal tartozom az egérgombok hozzárendelését illetően. A Mouse kulcsszót követően az első paraméter a gomb sorszámát jelzi. 1, 2, 3, jelentik a bal, középső, jobb gombokat, 0 esetében minden gomb ugyanazt a hatást váltja ki.

A második paraméter 0-9 számok esetében arra vonatkozik, hogy a fejlécen melyik gombot nyomtuk le. A gombok számozása megegyezik a "ButtonStyle" részben leírtakkal. Egyéb esetek:

R Root ablak
T Az ablak fejléce
W Az alkalmazás ablaka
S Az ablak szélei
F Az ablak sarkai
I Ikonizált ablak

Ezen környezeteket kombinálni is lehet, pl. az FST vonatkozik a teljes keretre fejlécestöl, kivéve a fejlécen lévő gombokat.

A harmadik paraméter a valamilyen módosítógombbal (gombokkal) együtt történő kattintásra vonatkozik. A módosítók lehetnek: N (semmilyen), C (Ctrl), S (Shift), M (Meta), A (ezek közül bármelyik).


Menük felépítése

Popup menünév: Definiál egy menüpontot, amit hozzárendelhetünk egy egérgombhoz, vagy egy billentyűzetkombinációhoz. A következő egyszerű példában definiálunk egy "Programok", majd egy "Ablakműveletek" menüt, majd ezeket hozzárendeljük a bal, ill. a középső egérgombhoz.
Popup "Ablakműveletek"
	Title		"Ablakműveletek"
	Function	"Mozgat" 		Move-or-Raise
	Function 	"Átméretez" 		Resize-or-Raise
	Iconify 	"Ikonizál" 
	Stick		"Képernyőhöz ragaszt"
	Function 	"Maximalizál"		maximize_func
	Nop     	""
	Destroy 	"Agyoncsap"
	Delete  	"Bezár"
	Nop		""
	Refresh		"Képfrissítés"
EndPopup
#(Itt az "Iconify", a "Stick" és a "maximize_func" parancsok ismételt végrehajtásával
#az eredetivel ellentétes hatást érhetjük el.)
Popup "Alkalmazások"
        Title   "Alkalmazások"
        Exec    "Ghostview"     exec ghostview &
        Exec    "XV"            exec xv &
        Exec    "Xman"          exec xman &
	Exec    "Xfm"           exec xfm &
	Nop	""
        Exec	"Netscape"	exec /usr/local/netscape/netscape &
	Exec	"Lyx"		exec /usr/local/bin/lyx -bw -2 &
#Az utóbbi két esetben természetesen a valódi elérési utat kell beírni. 
EndPopup
Popup "Játékok"
        Title   "Játékok"
	Exec    "Workman"       exec workman &
        Exec    "Xhextris"      exec xhextris &
        Exec    "Xtetris"       exec xtetris &
        Exec    "Xbill"       exec xbill &
EndPopup
Popup "Kilépek"
	Title	"Tényleg ki akarsz lépni?"
	Nop	""
	Quit	"Bizony!"
	Nop	""
	Nop	""
	Restart "Inkább legyen az olvwm!" 	/usr/openwin/bin/olvwm
	Nop     ""
        Restart "Indítsd újra az Fvwm-et!"  fvwm
	Nop	""
	Nop	"Meggondoltam magam!"
EndPopup
Popup "Programok"
	Title	"Programok"
	Exec    "Számológép"    exec xcalc &
        Exec    "Xterm"     	exec xterm -sb -sl 500 -j -ls -fn 7x14 -bg seashell2 &
	Exec	"Óra"		exec oclock -minute red -hour blue -bg black &
	Exec	"Képernyővédő"  exec xlock -nolock -nice 0 -install -mode random &
	Nop	""
	Popup   "Alkalmazások" 	Alkalmazások
	Nop	""
	Popup 	"Játékok"		Játékok
	Nop	""
	Popup 	"Kilépek"		Kilépek
	Nop	""
	Refresh "Képernyőfrissítés"
EndPopup
Most jön a hozzárendelés. A jobb egérgombhoz a "WindowList" funkciót rendeljük hozzá.
Mouse 1		R   	A       PopUp "Programok"
Mouse 2		R    	A      	PopUp "Ablakműveletek"
Mouse 3         R       A       WindowList

Bízom benne, hogy ennyi infó birtokában már mindenki nagyon pofás munkakörnyezetet tud teremteni magának! A későbbiekre nézve tervezem még ezen oldal kibővítését további példákkal, illetőleg sort kerítek majd a 2.0-ás fvwm ismertetésére, amely szerintem látványban és funkcionalitásban egyaránt a legjobb valamennyi window manager közül.


Fontosabb linkek:
http://www.ssc.com/~roland/fvwm/fvwm.html
http://www.cs.hmc.edu/~tkelly/docs/proj/fvwm.html
http://namu19.gwdg.de/fvwm/fvwm.html


Hamarosan folytatom!

Az esetleges hozzászólásokat, korrekciókat, kiegészítéseket, letolásokat, levélbombákat ide kérem! :))


last modification: Thursday, 31-Oct-96 09:14:04 MET