[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 224.   Annotazioni sulla configurazione di Fvwm 2

Fvwm(1) è un gestore di finestre semplice, dal punto di vista operativo, che, a seconda di come viene configurato, può richiedere più o meno risorse dal sistema. Sapendo utilizzare bene le possibilità di configurazione di Fvwm, si può fare a meno di tanti altri strumenti che appesantiscono inutilmente la sessione grafica.

Purtroppo, la sintassi del file di configurazione, rispetto alle potenzialità, non è molto chiara; nello stesso modo, la documentazione diventa difficile da comprendere a fondo. In questo capitolo si annotano alcuni esempi di direttive usate nella configurazione con scopi particolari, senza entrare nella generalità della sintassi.

224.1   Ridefinizione di funzioni predefinite

Per varie circostanze è possibile creare o ridefinire delle funzioni, che vengono richiamate da altre direttive oppure sono utilizzate in modo predefinito. Per esempio vengono chiamate in modo predefinito le funzioni InitFunction, RestartFunction e ExitFunction, rispettivamente all'avvio, al riavvio e alla conclusione del funzionamento di Fvwm. Gli esempi seguenti riguardano la ridefinizione delle funzioni predefinite comuni:

DestroyFunc InitFunction
AddToFunc InitFunction      "I" Module FvwmTaskBar
AddToFunc InitFunction      "I" exec             scim -d
AddToFunc InitFunction      "I" exec             play /etc/sound/start.wav
#
DestroyFunc ExitFunction
AddToFunc ExitFunction      "I" Test (Quit)      exec play /etc/sound/quit.wav
AddToFunc ExitFunction      "I" Test (ToRestart) exec play /etc/sound/restart.wav
#
DestroyFunc RestartFunction
AddToFunc RestartFunction   "I" Module FvwmTaskBar

Si osservi che la stessa cosa avrebbe potuto essere scritta così:

DestroyFunc InitFunction
AddToFunc InitFunction
+ "I" Module FvwmTaskBar
+ "I" exec             scim -d
+ "I" exec             play /etc/sound/start.wav
#
DestroyFunc ExitFunction
AddToFunc ExitFunction
+ "I" Test (Quit)      exec play /etc/sound/quit.wav
+ "I" Test (ToRestart) exec play /etc/sound/restart.wav
#
DestroyFunc RestartFunction
AddToFunc RestartFunction
+ "I" Module FvwmTaskBar

Si osservi che se Fvwm viene avviato da un gestore di sessione, vengono usate, invece, le funzioni SessionInitFunction, SessionRestartFunction e SessionExitFunction.

224.2   Funzioni associate a eventi della tastiera e del mouse

Agli eventi del mouse e della tastiera è possibile associare delle funzioni, sia predefinite, sia inventate per l'occasione. Si osservi, comunque, che sarebbe meglio evitare di attribuire funzioni speciali ad alcuni tasti, in modo da poter utilizzare in modo uniforme tutti i programmi. Segue un esempio di tale configurazione, riferita solo a eventi del mouse.

Mouse 1 R A Nop
Mouse 2 R A Menu FastMenu
Mouse 3 R A Menu Start
Mouse 1 T A raise-focus-move
Mouse 2 T A move-only
Mouse 3 T A move-and-raise-or-raiselower
Mouse 0 W M -
Mouse 0 F A resize-or-raiselower
Mouse 1 S A move-and-raise
Mouse 2 S A move-and-raise
Mouse 3 S A move-and-raise-or-raiselower
Mouse 0 I A move-or-iconmenu-or-deiconify
Mouse 0 1 A Popup WindowMenu
Mouse 0 2 A Close
Mouse 1 4 A Maximize 100 99
Mouse 2 4 A Maximize 100 99
Mouse 3 4 A Maximize 100 99
Mouse 0 6 A Iconify
#
DestroyFunc move-or-iconmenu-or-deiconify
AddToFunc   move-or-iconmenu-or-deiconify
+ "M" Move
+ "C" Popup IconMenu
+ "D" Iconify
#
DestroyFunc focus-and-raise
AddToFunc   focus-and-raise
+ "I" Layer 0 ontop
+ "I" Raise
+ "I" Focus
#
DestroyFunc move-and-raise
AddToFunc   move-and-raise
#+ "I" Layer 0 ontop
+ "I" Raise
+ "I" Focus
+ "M" Move
#
DestroyFunc raise-focus-move
AddToFunc   raise-focus-move
+ "I" Layer 0 ontop
+ "I" Raise
+ "I" Focus
+ "M" Move
#
DestroyFunc move-only
AddToFunc   move-only
+ "M" Move
#
DestroyFunc move-and-raise-or-raiselower
AddToFunc   move-and-raise-or-raiselower
+ "I" Raise
+ "I" Focus
+ "M" Move
+ "C" RaiseLower
#
DestroyFunc resize-or-raiselower
AddToFunc   resize-or-raiselower
+ "M" Resize
+ "C" RaiseLower

224.3   Menù

L'apertura di un menù si ottiene attraverso l'uso delle funzioni Menu o Popup. In particolare, è già apparso un esempio in cui si controlla l'apertura di due menù (FastMenu e Start), a seconda della pressione di un tasto del mouse, quando il puntatore grafico si trova sulla superficie della finestra principale:

Mouse 2 R A Menu FastMenu
Mouse 3 R A Menu Start

La differenza tra le due funzioni, consiste nel fatto che il menù della funzione Popup rimane aperto solo fino a quando si mantiene premuto il tasto del mouse che ha generato l'evento corrispondente; al contrario, la funzione Menu apre e lascia aperto il menù che si ottiene, fino a quando non si verifica un evento nuovo.

Generalmente, la funzione Popup si usa per i sottomenù, ovvero quelli che dipendono da una voce di un altro menù.

224.4   Menù statici

I menù statici si realizzano in modo semplice, con direttive che contengono eventualmente una condizione per la quale visualizzare o meno la voce corrispondente. Le condizioni vengono valutate una volta sola, all'avvio o al riavvio. L'esempio successivo è molto semplice e mostra voci prive di condizioni:

DestroyMenu Xset
AddToMenu Xset
+ "q"            exec  xset q
+ ""             nop
+ "m"            exec  xset m
+ "m  3 2"       exec  xset m 3 2
+ "m  6 2"       exec  xset m 6 2
+ "m 10 3"       exec  xset m 10 3

Alle voci di un menù si associano delle funzioni, dove in particolare exec consente l'avvio di un comando. L'esempio seguente mostra l'uso di condizioni con le quali si verifica che i programmi indicati siano accessibili ed eseguibili; altrimenti le voci corrispondenti non vengono visualizzate:

DestroyMenu ScreenCapture
AddToMenu ScreenCapture
Test (x xwd x convert x kolourpaint) + "to picture editor"  exec \
  \ xwd -frame | convert - $HOME/.tmp_screen_capture.pnm && \
  \ kolourpaint $HOME/.tmp_screen_capture.pnm + "" nop Test (x xwd x convert) + "to default printer" exec \
  \ xwd -frame | convert - gif:- | lpr Test (x xwd x convert) + "to file" exec \
  \ for n in `seq -f %02g 99` ; do if [ ! -e screen.$n.jpg ] ; \
  \ then if xwd -frame | convert -quality 100% - jpg:screen.$n.jpg ; then \
  \ xmessage -timeout 15 "Picture saved to file screen.$n.jpg" ; fi ; \
  \ break ; fi ; done

224.5   Menù dinamici

I menù dinamici sono ricostruiti attraverso una funzione, ogni volta che vengono aperti. Nell'esempio seguente viene definito il menù Start, in due fasi, dove una voce del menù è condizionate dall'esistenza di un certo programma, che potrebbe apparire e scomparire durante il funzionamento:

DestroyMenu Start
AddToMenu Start DynamicPopupAction Function StartMenu
#
DestroyFunc StartMenu
AddToFunc StartMenu I DestroyMenu recreate Start
                  + I AddToMenu Start "$[LANG]"               Popup   LocaleSelection
                  + I AddToMenu Start ""                      nop
                  + I AddToMenu Start "network"               Popup   Sniffers
                  + I AddToMenu Start "system"                Popup   System
Test (x clamscan) + I AddToMenu Start "virus et al"           Popup   Virus
                  + I AddToMenu Start ""                      nop
                  + I AddToMenu Start "quit"                  Popup   Quit
                  + I AddToMenu Start "reload window manager" Restart

Un menù dinamico potrebbe essere ottenuto anche attraverso comandi che si traducono nelle componenti delle direttive, attraverso l'uso della funzione PipeRead:

DestroyMenu AsCD
AddToMenu AsCD DynamicPopupAction Function AsCDMenu
#
DestroyFunc AsCDMenu
AddToFunc AsCDMenu
+ I DestroyMenu recreate AsCD
+ I PipeRead 'for f in `ls /dev/hd[a-z] /dev/sr[0-9] 2> /dev/null` ; \
  \ do echo AddToMenu AsCD \\\"ascd -device $f\\\" exec ascd -device $f ; done'

In pratica, la funzione PipeRead trasforma il risultato di quanto generato dalla stringa successiva, in voci del menù. In questo caso, per poter interpretare ciò che accade, occorre ricostruire il comando:

for f in `ls /dev/hd[a-z] /dev/sr[0-9] 2> /dev/null`
do
    echo AddToMenu AsCD \"ascd -device $f\" exec ascd -device $f
done

Naturalmente, può essere più comodo realizzare degli script separati, così da non dover fare troppa attenzione al problema della protezione di certi simboli.

224.6   Riferimenti

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) Fvwm 2   software libero soggetto a diverse licenze a seconda della porzione di codice coinvolta


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome annotazioni_sulla_configurazione_di_fvwm_2.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!