Je vais mentionner ici la syntaxe de base ainsi que quelques fonctions de base. Si vous voulez découvrir comment utiliser des fonctions plus compliquées, je vous conseille d'aller jeter un oeil dans la section Configuration avancée.
Pour commencer, regardons comment est construite une fonction. Cette exemple est 'commenté', vous pouvez ainsi le copier dans votre fichier de configuration pour vous aider à vous rappelez quelle est la syntaxe d'une fonction.
##### # # DestroyFunc FuncName # AddToFunc FuncName # + I (Action to happen immediately) # + C (Action to happen on a mouse 'click) # + D (Action to happen on a mouse 'double click') # + H (Action to happen on a mouse 'hold') # + M (Action to happen on a mouse 'motion') # ###########
La première chose à faire est de détruire la fonction avec DestroyFunc, ceci permet de remettre à zéro la fonction, ceci permet d'éviter quelques soucis si la fonction existait déjà dans le fichier. Puis, la commande AddToFunc permet d'ajouter un liste d'action qui sera exécutée quand cette fonction sera appellée. Comme vous pouvez le voir ci-dessus, ces actions peuvent agir différemment avec les actions de la souris. Maintenant quand vous appellez une fonction dans FVWM, vous pouvez lui envoyer plusieurs paramètres. Par exemple, vous pouvez appeller la fonction par son nom suivi de variables : 'FuncName "$0" "$1" "$2" "$3" "$4"' où $0-$4 sont les options passées à la fonction. Maintenant, considérons cette liste de fonctions simples :
##### # Basic Functions ########### DestroyFunc FvwmDeleteOrDestroy AddToFunc FvwmDeleteOrDestroy + H Nop + M Nop + C Delete + D Destroy DestroyFunc FvwmIconifyOrShade AddToFunc FvwmIconifyOrShade + C Iconify + D WindowShade DestroyFunc FvwmMaximize AddToFunc FvwmMaximize + H Nop + M Nop + C Maximize $0 $1 DestroyFunc FvwmMoveOrIconify AddToFunc FvwmMoveOrIconify + M Move + D Iconify DestroyFunc FvwmWindowShade AddToFunc FvwmWindowShade + D WindowShade $0
La première fonction FvwmDeleteOrDestroy ne fait rien (NOP) si la souris est 'enfoncée' (H) ou "déplacée" (M). Avec un simple clic (C), la fenêtre sera supprimée et avec un double-clic (D) elle sera détruite. La seconde fonction, FvwmIconifyOrShade, iconifie la fenêtre lors d'un simple clic (C) et un double-clique (D) permet de l'ombrer. (seule la barre de titre de la fenêtre reste affichée) La fonction FvwmMaximized peut être appellée avec deux valeurs qui détermine comment sera maximisée cette fenêtre. Par exemple , si vous appellez cette fonction par 'FvwmMaximize 100 100' , ceci va maximiser la fenêtre sur tout votre écran (100%) horizontalement et verticalement. Tandis que 'FvwmMaximize 100 0' va seulement maximiser la fenêtre horizontalement, elle gardera sa taille verticale. La fonction FvwmMoveOrIconify va déplacer la fenêtre quand la souris se sera 'déplacée' (M) ou bien iconifiée quand vous double-cliquerez (D) La fonction FvwmWindowShade ombrera, 'FvwmWindowShade True', ou désombrera, 'FvwmWindowShade False', la fenêtre. Si aucune option n'est envoyée à la fonction FvwmWindowShade, ceci ombrera une fenêtre désombrée et désombrera une fenêtre ombrée.
Voici une liste de fonction qui permer de lancer mes applications en appellant une fonction, ces fonctions sont relativement simples :
##### # Program Launching Functions ########### DestroyFunc FvwmXTerm AddToFunc FvwmXTerm + I Exec exec xterm DestroyFunc FvwmATerm AddToFunc FvwmATerm + I Exec exec aterm DestroyFunc FvwmGVim AddToFunc FvwmGVim + I Exec exec gvim DestroyFunc FvwmGimp AddToFunc FvwmGimp + I Exec exec gimp-2.0 DestroyFunc FvwmFireFox AddToFunc FvwmFireFox + I Exec exec firefox DestroyFunc FvwmIrssi AddToFunc FvwmIrssi + I Exec exec aterm -e irssi DestroyFunc FvwmXmms AddToFunc FvwmXmms + I Exec exec xmms DestroyFunc FvwmViewManPage AddToFunc FvwmViewManPage + I Exec exec xterm -fg White -bg DarkBlue -g 80x40 -fn 7x14 -fb 7x14bold \ -n "Manual Page - $0" -T "Manual Page - $0" -e man "$0"
Les premières fonctions sont assez explicites. La dernière est un peu plus complexe, elle se sert du premier argument de la fonction et ainsi elle lance la page de man correspondante. Vous pouvez notez une synxtaxe assez particulière avec le caractère \ . Il permet à FVWM de traiter ces deux lignes comme s'il s'agissait seulement d'une seul ligne dans le fichier de configuration.
Regardons maintenant trois fonctions spéciales et importantes : 'StartFunction', 'InitFunction' and 'RestartFunction'. La fonction StartFunction est appellée à chaque démarrage ou redémarrage de FVWM, tandis que la fonction InitFunction est seulement lancée qu'au démarrage de FVWM mais pas au redémarrage. La fonction RestartFunction est appelée après la fonction StartFunction quand FVWM est redémarré. Voici un exemple de l'utilisation de ce type de fonctions :
##### # Startup Functions ########### DestroyFunc StartFunction AddToFunc StartFunction + I Module FvwmTaskBar + I Module FvwmPager 0 2 + I Module FvwmButtons MyButtons DestroyFunc InitFunction AddToFunc InitFunction + I Exec exec xscreensaver + I Exec exec fvwm-root -r $[fvwm_wallpapers]/background.png + I FvwmXmms + I FvwmATerm DestroyFunc RestartFunction AddToFunc RestartFunction + I Nop
Selon l'exemple ci-dessus, FVWM charge à chaque démarrage et redémarrage ces trois modules FvwmButtons, FvwmPager and FvwmTaskBar. Quand FVWM démarre pour la première fois (pas un redémarrage), il lance xscreensaver, place l'image de fond d'écran, lance Xmms et Aterm. Quand il redémarre, FVWM ne fait rien de plus (Nop), il relance juste la fonction StartFunction
Les fonctions peuvent ajouter de nombreuses fonctionnalités à votre bureau. Elles peuvent être appelées avec un nombre illimité de parmamètres ($0, $1, $2, $3, etc.) et peuvent être combinés avec des actions basées sur la souris. (clic, double-clic, déplacement etc.) En revanche, les fonctions ne peuvent pas porter certains noms réservés par FVWM comme Nop, Delete, Destroy, Restart, Exec, etc.
Voici quelques exemples de fonctions plus complexes :
##### # Screenshot Functions (uses ImageMagick) ########### DestroyFunc FvwmWindowScreenshot AddToFunc FvwmWindowScreenshot + I ThisWindow (!Shaded !Iconic Iconifiable) \ Exec import -window $[w.id] -quality 100 -silent \ "$[fvwm_home]/screenshot/screenshot-`date +%F[%R]`.$[w.id].jpg" DestroyFunc FvwmDesktopScreenshot AddToFunc FvwmDesktopScreenshot + I Exec sleep $0; import -window root -quality 100 -silent \ "$[fvwm_home]/screenshot/screenshot-`date +%F[%R]`.jpg" ##### # XRoach Invasion ########### DestroyFunc XRoachInvasion AddToFunc XRoachInvasion + I Exec exec xroach -roaches 5 -rc Cyan -speed 17 + I Exec exec xroach -roaches 3 -rc Red -speed 15 + I Exec exec xroach -roaches 7 -rc Green -speed 10 + I Exec exec xroach -roaches 3 -rc Blue -speed 20 + I Exec exec xroach -roaches 1 -rc Black -speed 30 + I Exec exec xroach -roaches 1 -rc White -speed 40 DestroyFunc XRoachExterminate AddToFunc XRoachExterminate + I Exec killall xroach
Le primier groupe de fonctions permet de prendre une capture d'une fenêtre ou de l'écran entier en utilisant l'outil import de ImageMagick. Pour prendre une capture d'une fenêtre, vous devez appeller la première fonction avec 'Pick (CirculateHit) FvwmWindowScreenshot'. La souris va se transformer en un curseur en forme de croix qui vous permer de choisir quelle fenêtre capturer. La deuxième fonction prend une capture de l'écran entier après un délai de '$0' secondes. Cet délai vous permet par exemple d'ouvrir un menu, déplacer une fenêtre etc. avant la prise de la capture. Par exemple 'FvwmDesktopScreenshot 5' attend 5 secondes avant de prendre la capture. Le second groupe de fonction est un juste un 'jouet' pour X, il lance une invasion de 'Roaches' de plusieurs couleurs' sur votre bureau. L'autre fonction permet de mettre fin à cette invasion. Vous avez besoin d'installer 'xroach' pour utiliser cette fonction.