Outils d'utilisateurs

Outils du Site


notions_avancees_fonctions

Ces pages sont une traduction libre du très bon "FVWM Beginners Guide". Ces pages on été traduite il y a longtemps sur le site “stationlinux” mais le projet semble s'être arrêté. Vous pouvez aussi modifier ces pages si elles vous semblent mal traduites…

Cette page n'est pas disponibles dans les archives de “stationlinux”, donc il est possible qu'il manque de cohérence avec le reste. J'enlèverais ce cadre lorsque j'aurai vérifié qu'il n'y a pas de lien manquants.

Fonctions avancées

Les fontions sont une des choses que je préfère utiliser (comme vous avez pu le voir car j'écris souvent une fonction pour des simples tâches). Ceci est vrai avec la plupart des choses que vous programmez, être capable de créer de bonnes fonctions est la clé. La section “notions avancées” ne va pratiquement utiliser que des fonctions, cette partie traîte de fonctions variées.

Ces deux premières fonctions sont tirées du fichier fvwm2rc de Taviso. Elles utilisent les outils d'ImageMagick pour prendre des captures d'écran d'une fenêtre ouverte et ensuite les utilise pour une icône. La première fonction Thumbnail va prendre la capture d'écran de la fenêtre courante et utiliser cette capture pour l'icône lorsque la fenêtre aura le status “d'iconifiée”.

DestroyFunc Thumbnail
AddToFunc Thumbnail
+ I Raise
+ I SetEnv Icon-$[w.id] $[w.iconfile]
+ I ThisWindow (!Shaded #Style_Iconifiable">Iconifiable !Iconic) PipeRead \
                "xwd -silent -id $[w.id] | convert -scale $$ -frame 1x1 \
                 -mattecolor black -quality 0 xwd:- png:$[fvwm_tmp]/icon.tmp.$[w.id].png \
                 && echo Nop"
 
+ I TestRc (Match) Test (f $[fvwm_icon]/$[w.iconfile], f $[fvwm_tmp]/#Style_Icon">icon.tmp.$[w.id].png) \
           PipeRead "composite -geometry +2+4 \
           $[fvwm_icon]/$[w.iconfile] $[fvwm_tmp]/icon.tmp.$[w.id].png \
           $[fvwm_tmp]/icon.tmp.$[w.id].png && \
           echo WindowStyle IconOverride, Icon $[fvwm_tmp]/icon.tmp.$[w.id].png || echo Nop"
 
+ I TestRc (NoMatch) WindowStyle #Style_IconOverride">IconOverride, Icon $[fvwm_tmp]/icon.tmp.$[w.id].png
+ I Iconify
 
DestroyFunc DeThumbnail
AddToFunc DeThumbnail
+ I PipeRead "echo WindowStyle Icon \\$\\[Icon-$[w.id]\\]"
+ I UnsetEnv Icon-$[w.id]
+ I Exec rm -f $[fvwm_tmp]/#Style_Icon">icon.tmp.$[w.id].png

Ces fontions peuvent être utilisées à la place de “Iconify”. La fonction Thumbnail va premièrement prendre un screenshot de la fenêtre active et ensuite l'enregistrer dans un fichier temporaire. Le fichier temporaire est stoqué dans le répertoire $[fvwm_tmp], vous devez donc créer cette variable d'environnement dans votre fichier de config. Ensuite la fonction regarde si vous avez une icône (Iconfile) réglée pour la fenêtre, Test (f $[fvwm_home]/icons/$[w.iconfile]). Ceci n'existera seulement si vous avez utilisé une commande Style, par exemple : Style “Firefox-bin” Icon 48×48/firefox.png va mettre $[w.iconfile] à 48×48/firefox.png (notez que j'ai mis toutes mes icônes dans mon répertoire $[fvwm_icon]). Si ce fichier existe, alors la fonction va 'composer' ces deux pixmaps en une seule icône. Dans le cas contraire, il va mettre le screenshot de la fenêtre en icône et iconifier la fenêtre. La fonction DeThumbnail nettoie tout ça, elle remet l'icône dans son état d'origine et ensuite supprime les icônes temporaires ; ce qui fait que la prochaine fois que la fenêtre est “thumbnailé”, cela va se comporter de la même façon que la première fois (l'icône utilisée sera le screenshot de la fenêtre courante). Il y'a deux façons d'être sur que cette fonction sera appellée lorsque la fenêtre est déiconifiée. La première est d'ajouter un '+ I Iconify' à cette fonction et en créer un raccourci, ça sera donc utilisé lorsque vous allez déiconifier une fenêtre. La seconde solution que je préfère d'ailleurs est de régler le module FvwmEvent pour qu'il exécute ceci lorsque la fenêtre est déiconifiée. C'est plus joli, ça ne posera plus de problème de savoir comment la fenêtre est déiconfiée car cette fonction sera toujours active. Pour faire ceci, réglez le module FvwmEvent comme ci dessous et ensuite chargez le module au démarrage de fvwm dans votre StartFunction.

#####
 
# FvwmEvent
 
###########
 
DestroyModuleConfig FvwmEvent: *
 
*FvwmEvent: deiconify DeThumbnail

Une dernière note à propos de ces fonctions est que lorsque vous redémarrez FVWM, toutes les icônes sont reconverties dans leur état d'origine et vous devez donc déiconifier puis iconifier les fenêtres pour retrouver les choses en ordre. Une solution à ce problème serai d'ajouter '+ I All (Iconic) ReThumbnail' à votre RestartFunction, ou ReThumbnail serait la fonction ci dessous :

DestroyFunc ReThumbnail
 
AddToFunc ReThumbnail
 
+ I Iconify
 
+ I Thumbnail

Si tout est bien configuré alors vos icônes pour vos fenêtres iconifiées devraient ressembler aux images ci dessous :

firefox gvim

Une autre fonction que Taviso à écrit est FvwmExpose. Cette fonction ressemble à la fonction WindowList. Elle utilise ImageMagick pour prendre un screenshot de toutes les fenêtres ouvertes et ensuite elle met ces images dans un menu qui utilise ces screenshots comme des icônes. Voici une copie de cette fonction :

#####
# FvwmExpose
###########
 
DestroyFunc FvwmExpose
 
AddToFunc FvwmExpose
 
+ I AddToMenu FvwmExposeMenu "e x p o s e" Title
 
+ I + DynamicPopDownAction DestroyMenu FvwmExposeMenu
 
+ I All (!Iconic !Shaded AcceptsFocus)\
 
PipeRead "echo Raise; \
          xwd -silent -id $[w.id] | convert -scale $$ -quality 0 xwd:- \
          png:$[fvwm_home]/tmp/icon.exp.$[w.id].png \
          && echo AddToMenu FvwmExposeMenu \
          %$[fvwm_home]/tmp/icon.exp.$[w.id].png%\\\'\"$[w.name]\"\\\' WindowID $[w.id]
 
WarpToWindow 50 50 \
             && echo AddToMenu FvwmExposeMenu \\\"\\\" Nop \
 
+ I Popup FvwmExposeMenu
 
+ I Exec exec rm -f $[fvwm_home]/tmp/icon.exp.*

Appelez cette fonction à partir d'un raccourci, par exemple chez moi j'utilise meta+clic milieu de la souris, et ceci va ouvrir le FvwmExposeMenu.

fvwm expose


Sommaire :

notions_avancees_fonctions.txt · Dernière modification: 2008/05/24 20:51 par philux