Outils d'utilisateurs

Outils du Site


notions_avancees_fvwmbuttons

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…

Notions avancées : FvwmButtons

1. Introduction

FvwmButtons est probablement l'un des modules les plus souples d'emploi fournits par FVWM. Vous pouvez créer n'importe quel type de 'Dock' ou encore de 'tableau de bord' ; de plus ils peuvent utiliser les Colorsets tranparents. Taviso (un developpeur Gentoo) a écrit une introduction à FvwmButtons. Ce qui va suivre est une collection de quelques configurations simples pour vous montrer ce qu'il est possible de faire avec un peu de travail.

2. Premier exemple

Pour le premier exemple, j'ai créé un 'Dock' qui, a des coins arrondis, est transparent et contient un 'FvwmScript' pour créer une simple horloge.

#####
# DockButtons
###########
Style "DockButtons" !Title, !#Style_Handles">Handles, Sticky, WindowListSkip, \
#Style_CirculateSkip">CirculateSkip, BorderWidth 0, HandleWidth 0
Colorset 15 RootTransparent, fg rgb:00/00/00, bg average, \
Tint white 40, bgTint white 40, RootTransparent, \
Shape dock-mask.xpm
Colorset 16 RootTransparent, fg rgb:00/00/00, bg average, \
Tint white 40, bgTint white 40, RootTransparent
 
DestroyModuleConfig DockButtons: *
*DockButtons: Geometry 600x80
*DockButtons: Colorset 15
*DockButtons: Rows 2
*DockButtons: Columns 30
*DockButtons: (1x2, Frame 0)
*DockButtons: (4x2, Frame 0, #Style_Icon">Icon 64x64/terminal.png, \
Action(Mouse 1) "FvwmATerm", Action(Mouse 3) "FvwmXTerm")
*DockButtons: (4x2, Frame 0, #Style_Icon">Icon 64x64/firefox.png, \
Action(Mouse 1) "FvwmFireFox")
*DockButtons: (4x2, Frame 0, #Style_Icon">Icon 64x64/xmms.png, \
Action(Mouse 1) "FvwmXmms")
*DockButtons: (4x2, Frame 0, #Style_Icon">Icon 64x64/gimp.png, \
Action(Mouse 1) "FvwmGimp")
*DockButtons: (4x2, Frame 0, #Style_Icon">Icon 64x64/editor.png, \
Action(Mouse 1) "FvwmGVim")
*DockButtons: (8x1, Frame 0, \
Swallow FvwmApplet-DigitalClock `FvwmScript $[fvwm_scrpt]/DigitalClock 16`)
*DockButtons: (2x1, Frame 0, #Style_Icon">Icon 32x32/cpumon.png)
*DockButtons: (2x1, Frame 0, #Style_Icon">Icon 32x32/memmon.png)
*DockButtons: (2x1, Frame 0, #Style_Icon">Icon 32x32/diskmon.png)
*DockButtons: (2x1, Frame 0, #Style_Icon">Icon 32x32/netmon.png)
*DockButtons: (1x2, Frame 0)

Pour commencer j'ai défini les styles par defaut pour mon DockButtons et ensuite créé deux colorsets qu'il va utiliser. La seule partie qui est différente de tous les colorsets que j'ai utilisés est l'option 'Shape'. Cette option permet au FvwmButton de prendre la forme d'une image .xpm. La forme de la fenêtre (FvwmButton) est définie par une image transparente .xpm que vous pouvez voir ci dessous. Pour en apprendre d'avantage à ce sujet, allez jeter un coup d'oeil sur les pages man de FvwmThemes et cherchez 'Shape', 'TitleShape' et 'AspectShape'.

dock_mask Le fichier dock-mask.xpm ouvert dans Gimp.

dock DockButtons avec ses coins arrondis.

La chose que vous devriez noter dans la config du DockButons est l'applet DigitalClock. Il utilise le module 'FvwmScript' qui peut être utilisé pour construire des interfaces graphiques. Tout ce que fait ce simple script DigitalClock est qu'il prend la sortie de 'date ”+%b %e, %R' et la met dans une fenêtre. Ce script peut prendre un argument qui définit alors quel colorset utiliser. J'ai ensuite 'Swallow' (comprendre fondre en quelque sorte) la fenêtre dans mon DockButtons. C'est vraiment une caractéristique très intéressante car vous pouvez avoir un FvwmButtons qui 'swallow' plusieurs applications, même des applications qui ne sont pas 'dockables' à l'origine. Dans ce cas je 'swallow' la sortie du script DigitalClock, qui est la date et l'heure utilisant le colorset envoyé au script.

3. Second exemple

L'exemple suivant est le FvwmButtons que j'utilise sur mon bureau. J'y ai inclut l'heure, quelques boutons de lancement rapide pour mes applications favorites et ensuite 'swallowé' le FvwmPager, les moniteurs système xosview et un FvwmScript qui prend la sortie de lm-sensors.

Style "UkkostaButtons" !Title, !#Style_Handles">Handles, Sticky, WindowListSkip, \
#Style_CirculateSkip">CirculateSkip, BorderWidth 0, HandleWidth 0
Colorset 15 fg rgb:00/00/00, bg #e6e7d7, Shape ukkostabuttons-mask.xpm
Colorset 16 fg rgb:00/00/00, bg #e6e7d7
 
DestroyModuleConfig UkkostaButtons: *
*UkkostaButtons: Geometry 110x580-20+20@1
*UkkostaButtons: Colorset 15
*UkkostaButtons: Pixmap $[fvwm_img]/buttons-bg.png
*UkkostaButtons: Rows 40
*UkkostaButtons: Columns 4
*UkkostaButtons: Frame 0
*UkkostaButtons: #Style_Font">Font "Shadow=2:xft:Winks:Medium:pixelsize=24:minspace=False:antialias=True"
*UkkostaButtons: (4x2, Frame 0, \
Action(Mouse 1) 'All (Sticky Iconifiable) Iconify', \
Title(Center) "ukkosta")
*UkkostaButtons: (4x1, Frame 0, \
Swallow FvwmApplet-DigitalClock `FvwmScript $[fvwm_scrpt]/DigitalClock 16`)
*UkkostaButtons: (2x4, Frame 0, \
#Style_Icon">Icon 48x48/firefox.png, \
Action(Mouse 1) "FvwmFireFox")
*UkkostaButtons: (2x4, Frame 0, \
#Style_Icon">Icon 48x48/terminal.png, \
Action(Mouse 1) "FvwmXTerm", \
Action(Mouse 2) "Exec exec pterm", \
Action(Mouse 3) "FvwmATerm")
*UkkostaButtons: (2x4, Frame 0, \
#Style_Icon">Icon 48x48/editor.png, \
Action(Mouse 1) "FvwmGVim", \
Action(Mouse 3) "FvwmXEmacs")
*UkkostaButtons: (2x4, Frame 0, \
#Style_Icon">Icon 48x48/chat.png, \
Action(Mouse 1) "FvwmTalkbox", \
Action(Mouse 2) "FvwmIrssi", \
Action(Mouse 3) "FvwmGaim")
*UkkostaButtons: (2x4, Frame 0, \
#Style_Icon">Icon 48x48/xmms.png, \
Action(Mouse 1) "FvwmXmms", \
Action(Mouse 2) "FvwmMixer")
*UkkostaButtons: (2x4, Frame 0, \
#Style_Icon">Icon 48x48/tux.png, \
Action(Mouse 1) "FvwmRox")
*UkkostaButtons: (2x4, Frame 0, \
#Style_Icon">Icon 48x48/gimp.png, \
Action(Mouse 1) "FvwmGimp", \
Action(Mouse 2) "FvwmXpaint", \
Action(Mouse 3) "FvwmXfig")
*UkkostaButtons: (2x4, Frame 0, \
#Style_Icon">Icon 48x48/x.png, \
Action(Mouse 1) "FvwmXlock", \
Action(Mouse 2) "Restart", \
Action(Mouse 3) "Quit")
*UkkostaButtons: (4x8, Frame 0, \
Swallow FvwmPager 'Module FvwmPager')
*UkkostaButtons: (1x2, Frame 0, \
#Style_Icon">Icon menu/cpumon.png, \
Action(Mouse 1) 'FvwmTop')
*UkkostaButtons: (3x2, Frame 0, \
Swallow(UseOld) "cpumon" `Exec exec xosview -title cpumon +cpu`)
*UkkostaButtons: (1x2, Frame 0, \
#Style_Icon">Icon menu/memmon.png)
*UkkostaButtons: (3x2, Frame 0, \
Swallow(UseOld) "memmon" `Exec exec xosview -title memmon +mem`)
*UkkostaButtons: (1x2, Frame 0, \
#Style_Icon">Icon menu/diskmon.png)
*UkkostaButtons: (3x2, Frame 0, \
Swallow(UseOld) "diskmon" `Exec exec xosview -title diskmon +disk`)
*UkkostaButtons: (1x2, Frame 0, \
#Style_Icon">Icon menu/netmon.png, \
Action(Mouse 1) "Exec exec xterm -title iptraf -e 'sudo /usr/sbin/iptraf -i all'")
*UkkostaButtons: (3x2, Frame 0, \
Swallow(UseOld) "netmon" `Exec exec xosview -title netmon +net`)
*UkkostaButtons: (4x4, Frame 0, \
Swallow FvwmApplet-Sensors `FvwmScript $[fvwm_scrpt]/Sensors 11`)
*UkkostaButtons: (4x1, Frame 0)

Ces boutons ont à peu près tout ce que je veux voir sur mon bureau. En haut, j'ai le nom de mon ordinateur et l'heure, suivi par une collecton de boutons de lancement rapide. Puis j'ai le FvwmPager 'swallowé', je peux donc voir ce qui est ouvert sur mon bureau. Après le pager, il y'a une collection de moniteurs utilisant xosview. Xosview est une collection de moniteurs système qui peut afficher une barre graphique pour montrer le status courant. Pour faire ceci, j'ai déja annulé tous les moniteurs par defaut dans mon fichier .Xdefaults. Ensuite j'ai 'swallow' chaque moniteur que je voulais afficher. Par exemple mon 'cpumon' est activé par la ligne “Swallow(UseOld) “cpumon” `Exec exec xosview -title cpumon +cpu`”. Elle dit à FvwmButtons de 'swallow' une application avec le nom cpumon. Avec tout ceci, j'obtiens quatre moniteurs, cpu, mémoire, disque et reseau. A la fin de mes boutons je 'swallow' un autre FvwmScript sensors qui prend la sortie de la commande sensors (lm-sensors) et l'écrit dans le UkkostaButtons. Voici une image qui montre à quoi ressemble ce FvwmButtons :

Ukkostabuttons

4. Dernier exemple

Pour le dernier exemple, je vais partager avec vous une collection de fonctions qui a été postée sur la mailing list Fvwm par Liusd que j'ai modifiée. Ces fonctions créent un bouton qui va recouvrir l'icône sous le dock lorsque la souris passe par dessus cette icône. Ces fonctions fonctionnent assez bien avec les versions 2.5.10. Petite note en passant : un nouveau patch dans l'arbre CVS de FVWM inclut les supports 'HoverIcon' et 'PressIcon' pour la configuration de FvwmButtons. Regardons maintenant la collection de ces fonctions.

#####
# FvwmDock Styles
###########
Style FvwmDock* #Style_Sticky">Sticky, NoTitle, NoHandles, BorderWidth 0, WindowListSkip, \
#Style_CirculateSkip">CirculateSkip
Style FvwmDock-* #Style_StaysOnBottom">StaysOnBottom, FixedPosition, FixedSize
Style FvwmDockA* #Style_StaysOnTop">StaysOnTop, FixedSize
 
################
#
# ButtonDock Functions. These collection of functions create
# single icon buttons that cause the button to hover above
# everything when the mouse is moved atop of it. To get these
# to work it should only take copying all the five functions
# CreateDock, EnterHandler, LeaveHandler, RestoreButton
# and CreateActiveButton. Then call the function 'CreateDock'
# for each button on the dock bar. The function works as follows:
#
# CreateDock '$0' '$1' '$2' '$3' '$4' '$5' '$6' '$7' '$8' '$9'
# $0 -> ButtonId
# $1 -> Geometry
# $2 -> Icon
# $3 -> LargeIcon
# $4 -> X offset (from upper left hand corner)
# $5 -> Y offset (from upper left hand corner)
# $6 -> action for Mouse 1
# $7 -> action for Mouse 2
# $8 -> action for Mouse 3
# $9 -> Size of LargeIcon
#
###################################
DestroyFunc CreateDock
AddToFunc CreateDock
+ I DestroyModuleConfig FvwmDock-$0: *
+ I *FvwmDock-$0: Geometry $1
+ I *FvwmDock-$0: #Style_Font">Font none
+ I *FvwmDock-$0: Colorset 9
+ I *FvwmDock-$0: Frame 0
+ I *FvwmDock-$0: Padding 0 0
+ I *FvwmDock-$0: (Id D$0, #Style_Icon">Icon $2)
+ I Module #Style_FvwmButtons">FvwmButtons FvwmDock-$0
+ I AddToFunc StartFunction I Module FvwmAuto 100 -menter 'EnterHandler $0 "$2" $3 $4 $5 $6 $7 $8
$9' 'LeaveHandler $0 $2'
 
DestroyFunc EnterHandler
AddToFunc EnterHandler
+ I ThisWindow (FvwmDock-$0) ThisWindow (!FvwmDock-*) Deschedule 35
+ I ThisWindow (FvwmDock-$0) WindowId $[last_winid] (FvwmDockA$0) Deschedule 35
+ I ThisWindow (FvwmDockA$0) Deschedule 45
+ I ThisWindow (FvwmDock-$0) SendToModule FvwmDock-$0 ChangeButton D$0 #Style_Icon">Icon "shadow.png"
+ I ThisWindow (FvwmDock-$0) CreateActiveButton $0 '$1' $2 $3 $4 $5 $6 $7 $8
 
# Delay ms should be longer than delay in FvwmAuto
DestroyFunc LeaveHandler
AddToFunc LeaveHandler
+ I ThisWindow SetEnv last_winid $[w.id]
+ I ThisWindow (FvwmDockA$0) Schedule 110 35 RestoreButton $0 $1
+ I ThisWindow (FvwmDock-$0) Schedule 110 45 RestoreButton $0 $1
 
DestroyFunc RestoreButton
AddToFunc RestoreButton
+ I SendToModule FvwmDock-$0 ChangeButton D$0 #Style_Icon">Icon $1
+ I KillModule #Style_FvwmButtons">FvwmButtons FvwmDockA$0
 
DestroyFunc CreateActiveButton
AddToFunc CreateActiveButton
+ I DestroyModuleConfig FvwmDockA$0: *
+ I *FvwmDockA$0: Pixmap none
+ I *FvwmDockA$0: BoxSize fixed
+ I *FvwmDockA$0: Frame 0
+ I *FvwmDockA$0: #Style_Font">Font none
+ I *FvwmDockA$0: Padding 0 0
+ I *FvwmDockA$0: Rows 1
+ I *FvwmDockA$0: Columns 1
+ I ThisWindow PipeRead `echo *FvwmDockA$0: Geometry $8+$(($[w.x]$3))+$(($[w.y]$4))`
+ I *FvwmDockA$0: (#Style_Icon">Icon $2, Action(Mouse 1) '$5', Action(Mouse 2) '$6', Action(Mouse 3) '$7')
+ I Module #Style_FvwmButtons">FvwmButtons FvwmDockA$0

Comment ces fonctions fonctionnent : tout ce que vous avez à faire est d'appeller la fonction CreateDock dans votre StartFunction (ou votre fichier fvwm2rc) pour chaque icône que vous voulez voir dans votre dock. Comme vous avez pu le voir, la fonction CreateDock prend 10 arguments, qui lui indique la taille, les icônes et les actions que vous voulez associer aux boutons. Prenons pour exemple que vous souhaitez créer un dock de deux icônes avec l'une en dessous de l'autre, et ensuite utiliser l'option geometry pour empiler les deux icônes l'une à coté de l'autre. J'ai ajouté ces deux lignes dans ma StartFunction :

+ I CreateDock '10' '56x56-74+62@1' '48x48/firefox.png' '64x64/firefox.png' '-20' '-30'
'FvwmFireFox' 'Nop' 'Nop' '64x64'
+ I CreateDock '11' '56x56-74+116@1' '48x48/xmms.png' '64x64/xmms.png' '+20' '-30' 'FvwmXmms' 'Nop'
'FvwmMixer' '64x64'

Ceci va créer deux docks, numérotés 10 et 11. Ensuite lorsque je vais bouger ma souris au dessus du dock, il va remplacer l'icône courante par shadow.png puis créer un Dock temporaire qui a la largeur de l'icône. Les trois images suivantes devraient vous montrer comment ces effets marchent. Cela dépend de votre cpu, c'est possible que ça rame un petit peu, enfin dans l'ensemble cela devrait avoir un joli effet.

acb


Sommaire :

notions_avancees_fvwmbuttons.txt · Dernière modification: 2010/08/18 23:27 par 93.3.49.203