1 ############################################## 2 ############################################## 3 ### Fichier de configuration pour Fvwm 2.5.14 4 ### 5 ### Dernière modification le 10 novembre 2005. 6 ### Lucky <jeremy.lefloch@gmail.com> <bosozoku@jabber.org> 7 ### www.stationlinux.org 8 ### 9 ### Remerciements à Taviso (http://dev.gentoo.org/~taviso) car de nombreuses 10 ### fonctions dans cette configuration sont directement tirées de son ~/.fvwm2rc. 11 ################################################################################## 12 ################################################################################## 13 14 15 16 17 #### 18 # Variables d'environement 19 ########################## 20 # Les variables d'environnement sont très utiles car elles vous permettent 21 # d'y stoquer des valeurs et de les réutiliser tout au long de votre config. 22 # C'est exactement le même principe que dans la plupart des langages de 23 # programmation tels que le PHP, Bash etc. 24 # La syntaxe est très simple : SetEnv variable valeur 25 # Ceci nous donne la variable $[variable]. Pensez à utiliser la commande 26 # UnSetEnv, qui s'utilise de la même façon que la précedente, pour 27 # désactiver une variable dont vous n'avez plus besoin. 28 # 29 # Il existe une variable d'environnement spéciale : ImagePath. 30 # Son contenu indique à Fvwm ou il doit aller chercher les images dont il 31 # a besoin, pour votre menu par exemple. Voici la syntaxe : 32 # ImagePath $[img]:$[img_autres] 33 # Je range toutes mes icônes dans le répertoire $[img] mais aussi dans le 34 # répertoire [img_autres]. 35 # 36 # Pensez à remplacer certaines valeurs par les votres comme : 37 # SetEnv wallpapers_dir $[HOME]/Images/wallpapers 38 # Ceci est vrai sur mon ordinateur mais peut être pas chez vous. 39 ########################## 40 SetEnv img $[FVWM_USERDIR]/images 41 ImagePath $[img]:$[img]/deco:$[img]/menu:$[img]/panel 42 SetEnv scripts $[FVWM_USERDIR]/scripts 43 SetEnv temp $[FVWM_USERDIR]/temp 44 SetEnv BorderWidth 4 45 46 SetEnv wallpapers_dir $[HOME]/Images/wallpapers 47 SetEnv screenshots_dir $[HOME]/Images/screenshots/fvwm 48 PipeRead "export screenshots_dir=${HOME}/Images/screenshots/fvwm" 49 SetEnv video /mnt/Multimedia/Video 50 SetEnv video_exec xine 51 SetEnv video_exec_bis mplayer 52 SetEnv audio /mnt/Multimedia/Audio 53 SetEnv audio_exec xmms 54 SetEnv web_browser firefox 55 SetEnv browser rox 56 SetEnv TermName rxvt 57 SetEnv TermQuake "aterm -geometry 150x30+0+0 -name GameConsole" 58 59 60 #### 61 # La commande Read est comparable à la commande include en PHP. 62 # Cela permet de diviser votre fichier de configuration en plusieurs 63 # parties. J'ai choisi de mettre mes menus dans un fichier extérieur 64 # (~/.fvwm/menus) dans un soucis de propreté du fichier .fvwm2rc. 65 ########################## 66 Read menus 67 Read fvwmtabrc 68 69 70 #### 71 # Les Styles et Colorset 72 ########################## 73 # Les styles vous permettent de gérer l'apparence et le comportement 74 # de vos fenêtres ainsi que de vos menus. La syntaxe est simple : 75 # Style * vos_styles, un_autre 76 # 77 # Les colorsets sont comme le nom l'indique des ensemble de couleurs. 78 # Chaque colorset est identifié par un numéro. La syntaxe est simple : 79 # Colorset 0 fg couleur, bg couleur, sh couleur, hi couleur 80 # Je ne rentre pas dans les détails, sachez que vous pouvez donner un nom 81 # pour les couleurs (standard X11) ou bien une donnée héxadécimale. 82 # 83 # +-------+-----------------------------------------+ 84 # | State | Definition | 85 # +=======+=========================================+ 86 # | 1 | La barre de titre est présente | 87 # +-------+-----------------------------------------+ 88 # | 2 | La bordure est présente | 89 # +-------+-----------------------------------------+ 90 # | 3 | Barre de titre en haut | 91 # +-------+-----------------------------------------+ 92 # | 4 | Barre de titre à gauche | 93 # +-------+-----------------------------------------+ 94 # | 5 | Barre de titre en bas | 95 # +-------+-----------------------------------------+ 96 # | 6 | Barre de titre à droite | 97 # +-------+-----------------------------------------+ 98 # 99 # +----------+--------------------------------------+ 100 # | Colorset | Definition | 101 # +==========+======================================+ 102 # | 0 | Fenêtres non sélectionnées | 103 # +----------+--------------------------------------+ 104 # | 1 | FvwmProxy | 105 # +----------+--------------------------------------+ 106 # | 2 | Fenêtres actives | 107 # +-------+-----------------------------------------+ 108 # | 3 | Barre de titre en haut | 109 # +-------+-----------------------------------------+ 110 # | 4 | Barre de titre à gauche | 111 # +-------+-----------------------------------------+ 112 # | 5 | Barre de titre en bas | 113 # +-------+-----------------------------------------+ 114 # | 6 | Barre de titre à droite | 115 # +-------+-----------------------------------------+ 116 ########################## 117 118 119 # J'aime beaucoup le SloppyFocus : la fenêtre obtient le focus lorsque la souris 120 # entre dans la fenêtre et le garde tant que la souris ne survole pas une autre 121 # fenêtre. Pour faire passer la fenêtre au premier plan (Raise), il suffit alors 122 # de cliquer dessus. Je trouve que c'est le meilleur comportement ! 123 ########################## 124 Style * SloppyFocus, MouseFocusClickRaises, ResizeOpaque 125 Style * WindowShadeSteps 160, GrabFocus 126 Style * Colorset 0, HilightColorset 2 127 DefaultFont "Shadow=0 se:xft:Lucida Grande:size=7:bold" 128 Style * HandleWidth $[BorderWidth] 129 Style * State 1 130 Style * State 2 131 Style * State 3 132 Style * !State 4 133 Style * !State 5 134 Style * !State 6 135 136 # Proxy 137 Colorset 1 fg white, bg #444444 138 139 140 #### 141 # L'utilisation du joker * était interessante lorsque l'on voulait 142 # appliquer un style pour toutes les fenêtres mais j'applique ici des styles 143 # différents pour des fenêtres bien distinctes. Le nom de la fenêtre est 144 # obtenu grace au module FvwmIdent ; vous pouvez utiliser indifférement la 145 # classe ou la ressource de la fenêtre concernée. 146 # 147 # J'indique ici le nom de la mini icône de la fenêtre qui sera affichée 148 # dans la barre de titre par exemple. Je peux également dire à Fvwm de ne 149 # pas donner de barre de titre pour Xmms par exemple. 150 ########################## 151 Style xmms EWMHMiniIconOverride, MiniIcon xmms.png, NoTitle 152 Style XTerm EWMHMiniIconOverride, MiniIcon terminal.png 153 Style Gvim EWMHMiniIconOverride, MiniIcon editeurs.png 154 Style Firefox-bin EWMHMiniIconOverride, MiniIcon firefox.png 155 Style ROX-Filer EWMHMiniIconOverride, MiniIcon home.png 156 Style Gimp-2.2 EWMHMiniIconOverride, MiniIcon gimp.png 157 Style Thunderbird-bin EWMHMiniIconOverride, MiniIcon thunderbird.png 158 Style Gaim EWMHMiniIconOverride, MiniIcon gaim.png 159 Style gFTP EWMHMiniIconOverride, MiniIcon gftp.png 160 Style SWT EWMHMiniIconOverride, MiniIcon sancho.png 161 Style GQview EWMHMiniIconOverride, MiniIcon gqview.png 162 Style xine EWMHMiniIconOverride, MiniIcon xine.png 163 Style FvwmIdent TitleAtLeft, EWMHMiniIconOverride, MiniIcon identify.png 164 Style xpad NoTitle, !Borders, NoHandles, WindowListSkip 165 Style xchat-2 EWMHMiniIconOverride, MiniIcon xchat.png 166 Style GameConsole NoHandles, !Borders, NoTitle, \ 167 FixedPosition, WindowListSkip, Sticky, WindowShadeSteps 260 168 Style xmessage CenterPlacement, NoTitle 169 Style Gmrun CenterPlacement 170 Style XOsview WindowListSkip, CirculateSkip, NoTitle 171 Style irssi NoTitle, !Borders 172 #### 173 # La commande MenuStyle fonctionne exactement comme Style à une différence 174 # près : elle ne s'applique qu'aux menus. Le caractère * est un joker, le style 175 # sera effectif pour tous les menus. Référez vous à la page man pour connaître 176 # de manière précise la signification des styles ci-dessous. 177 ########################## 178 MenuStyle * MenuColorset 7 179 MenuStyle * BorderWidth 1 180 MenuStyle * HilightBack 181 MenuStyle * ActiveForeOff 182 MenuStyle * PopupOffset 0 100 183 MenuStyle * TitleUnderlines2 184 MenuStyle * SeparatorsLong 185 MenuStyle * ActiveColorset 8 186 MenuStyle * Animation 187 MenuStyle * TrianglesSolid 188 MenuStyle * PopupDelayed 189 MenuStyle * PopupDelay 100 190 MenuStyle * PopdownImmediately 191 MenuStyle * Hilight3DOff 192 193 194 #### 195 # Mise en place des différents curseurs de souris en fonction de 196 # différents contextes. 197 ########################## 198 CursorStyle root left_ptr 199 CursorStyle default left_ptr 200 CursorStyle position left_ptr 201 CursorStyle sys left_ptr 202 CursorStyle menu left_ptr 203 CursorStyle title left_ptr 204 CursorStyle resize fleur 205 CursorStyle stroke cross 206 CursorStyle select draped_box 207 208 209 #### 210 # Définition des différents décors. En général, un par thème. 211 # Référez vous à la page de manuel Fvwm pour comprendre l'ensemble 212 # des commandes ci-dessous. En bref : 213 # Je créer deux décors nommés Default et Green. Ces décors sont composés 214 # d'une barre de titre (TitleStyle) et de différents boutons (ButtonStyle). 215 # Notez que pour voir les boutons sur la barre de titre, il doivent forcément 216 # être associer à une action (voir les raccourcis clavier). 217 # Voici la disposition des boutons sur la barre de titre : 218 # +--------------------------------------------------------+ 219 # | . _ # X | 220 # +--------------------------------------------------------+ 221 # | 1 6 4 2 | 222 # | | 223 # 224 ########################## 225 DestroyDecor Default 226 AddToDecor Default 227 + TitleStyle Centered Height 19 228 + TitleStyle AllActive (TiledPixmap cinza/wtitle.png -- flat) \ 229 AllInactive (TiledPixmap cinza/wtitle.png -- flat) 230 + ButtonStyle 1 AllActive (MiniIcon) AllInactive (MiniIcon) 231 + ButtonStyle 2 ActiveUp (Pixmap cinza/close.xpm) \ 232 ActiveDown (Pixmap cinza/close.xpm) \ 233 Inactive (Pixmap cinza/closeu.xpm) 234 + ButtonStyle 4 ActiveUp (Pixmap cinza/max.xpm) \ 235 ActiveDown (Pixmap cinza/max.xpm) \ 236 Inactive (Pixmap cinza/maxu.xpm) 237 + ButtonStyle 6 ActiveUp (Pixmap cinza/icon.xpm) \ 238 ActiveDown (Pixmap cinza/icon.xpm) \ 239 Inactive (Pixmap cinza/iconu.xpm) 240 + ButtonStyle All -- UseTitleStyle 241 + ButtonStyle All -- flat 242 + BorderStyle -- HiddenHandles NoInset 243 244 DestroyDecor Green 245 AddToDecor Green 246 + TitleStyle Centered Height 17 247 + TitleStyle AllActive (Colorset 2 -- flat) AllInactive (Colorset 2 -- flat) 248 + ButtonStyle 1 AllActive (MiniIcon) AllInactive (MiniIcon) 249 + ButtonStyle 2 ActiveUp (Pixmap vert/close.xpm) \ 250 ActiveDown (Pixmap vert/close-pressed.xpm) \ 251 Inactive (Pixmap vert/close.xpm) 252 + ButtonStyle 4 ActiveUp (Pixmap vert/max.xpm) \ 253 ActiveDown (Pixmap vert/max-pressed.xpm) \ 254 Inactive (Pixmap vert/max.xpm) 255 + ButtonStyle 6 ActiveUp (Pixmap vert/icon.xpm) \ 256 ActiveDown (Pixmap vert/icon-pressed.xpm) \ 257 Inactive (Pixmap vert/icon.xpm) 258 + ButtonStyle All -- UseTitleStyle 259 + ButtonStyle All -- flat 260 + BorderStyle -- HiddenHandles NoInset 261 262 263 #### 264 # On émule le comportement MWM pour avoir la fenêtre de 265 # déplacement / redimenssionement au centre. Cela affecte également 266 # la placement des fenêtres. J'indique également que la fenêtre de 267 # déplacement / redimenssionement doit toujours apparaître si je déplace 268 # une fenêtre ou si je la redimenssionne. 269 ########################## 270 Emulate MWM 271 HideGeometryWindow Never 272 273 274 #### 275 # http://www.fvwm.org/documentation/faq/#5.5 276 ########################## 277 IgnoreModifiers L25 278 279 280 #### 281 # OpaqueMoveSize permet de déplacer les fenêtres en opaque. 282 # 283 # SnapAttraction est une option qui permet de coller deux ou plusieurs 284 # fenêtres entre elles. 6px me semble un bon compromis. 285 # 286 # ClickTime est le temps en millisecondes entre le moment ou vous appuyez 287 # sur le bouton de la souris et celui ou vous le relachez (un simple clic). 288 # La valeur par defaut est 150ms et c'est un peu trop court à mon gout. 289 ########################## 290 OpaqueMoveSize unlimited 291 SnapAttraction 6 All 292 ClickTime 300 293 294 295 #### 296 # J'utilise 4 bureaux (desks) mais une seule page par bureau, 297 # ce qui implique un DesktopSize 1x1 (une page x une page). 298 ########################## 299 DesktopSize 1x1 300 301 302 #### 303 # EdgeScroll indique en pourcentage (en horyzontal et vertical) la taille 304 # d'une page qui doit être affichée lorsque la souris touche le bord de l'écran. 305 # Exemple : EdgeScroll 100 100 vous fera passer sur la page voisine si vous touchez 306 # le bord de l'écran. 307 # 308 # EdgeResistance accepte deux paramètres : 309 # le premier règle en millisecondes le temps que la souris devra rester sur le 310 # bord de l'écran pour passer à la page voisine. Ceci n'est important que pour ceux 311 # qui utilisent EdgeScroll 100 100. 312 # Le second paramètre règle en pixels la distance que doit parcourir la souris pour 313 # qu'une fenêtre dépasse de l'écran. 314 # Dans notre cas, j'utilise la valeur maximale pour le premier paramètre (10000), 315 # ce qui implique qu'il est impossible de passer sur une page voisine avec la souris ; 316 # et je règle 50px pour le second paramètre. C'est à dire que lorsqu'une fenêtre sera 317 # collée au bord de l'écran, il faudra que je la déplace encore de 50px pour qu'elle 318 # sorte de l'écran. 319 # 320 # EdgeThickness n'accepte que trois paramètre : 0,1 ou 2. 321 # Ceci est la taille en pixel d'une fenêtre invisible que Fvwm créé sur les bords 322 # de l'écran qui sont utilisés pour les fonctionnalités de EdgeScroll. La valeur 323 # par defaut est 2. 324 ########################## 325 EdgeScroll 0 0 326 EdgeResistance 10000 50 327 EdgeThickness 0 328 329 330 #### 331 # Configuration des raccourcis clavier et des actions à effectuer lors de 332 # différents clics de la souris. 333 # 334 # La syntaxe est la même pour les deux commandes (Mouse pour la souris et Key 335 # pour le clavier) : 336 # Mouse num_bouton contexte clavier action 337 # Key num_touche contexte clavier action 338 # 339 # Le num_bouton ou num_touche est tout simplement le bouton de la souris ou la 340 # touche du clavier que vous souhaitez associer à une action. Pour une souris 341 # avec deux boutons et une molette cliquable (comme la mienne), on obtient 5 boutons : 342 # 1 = bouton gauche ; 2 = clic molette ; 3 = bouton droit ; 4 = molette avant ; 343 # 5 = molette arrière. 344 # 345 # Pour le contexte, je vous laisse observer cette image : 346 # http://www.zensites.net/fvwm/guide/window_layout.png 347 # En bref : R signifie la zone de l'écran libre, W pour la fenêtre, I pour une icône 348 # et A qui est un joker (n'importe ou sur l'écran). 349 # 350 # Ce que j'appelle clavier se nomme Modifier en Anglais. C'est une touche que 351 # vous appuierez en plus du bouton ou touche initiale. On peut penser par exemple à 352 # Alt+x pour lancer xmms, ce qui nous donnera : 353 # Key x A M Exec xmms 354 # Touche x, n'importe où sur l'écran et le Modifier Alt (M), et enfin l'action. 355 ########################## 356 Mouse 3 R A Menu Root 357 Key F1 A A Menu Root 358 Mouse 1 R A - 359 360 Mouse 1 2 A CloseFunc 361 Mouse 1 4 A MaximizeFunc 362 Mouse 3 4 A HoryMaximizeFunc 363 Mouse 1 T A MaximizeTitleBarFunc 364 Mouse 3 T A Menu WindowControls 365 Mouse 1 1 A Menu WindowControls 366 Mouse 4 T N WindowShade True 367 Mouse 5 T N WindowShade False 368 Mouse 1 W M MoveFunc 369 Mouse 3 W M ResizeFunc 370 Mouse 1 I A DeiconifyAndRearrange 371 Mouse 3 I A Menu WindowControls Icon 0 -100m 372 Key F4 A M Close 373 374 Mouse 2 R A WindowList NoCurrentDeskTitle 375 Key Tab A M WindowList Root c c NoDeskSort, NoCurrentDeskTitle, SelectOnRelease Meta_L 376 377 378 #### 379 # Voici mes raccourcis clavier que j'utilise pour lancer mes applications 380 # favorites. Remarquez l'intérêt des variables d'environnement. 381 ########################## 382 Key F2 A A Exec gmrun 383 Key F3 A A Module FvwmConsole -terminal $[TermName] 384 Key Escape A M SendToModule FvwmProxy ShowToggle 385 Key f A M Exec $[web_browser] 386 Key t A M Exec thunderbird 387 Key a A M Exec $[TermName] 388 Key i A M Exec $[TermName] -g 95x50 -name irssi -e irssi 389 Key c A M Exec gvim -geom 88x40 $[FVWM_USERDIR]/.fvwm2rc 390 Key g A M Exec gaim 391 Key r A M Exec $[browser] 392 Key x A M Exec xmms 393 Key n A M Exec xpad 394 395 Key twosuperior A C ToggleTerminal 396 Key c A CM CenterWindow 397 Key r A CM Restart 398 Key q A CM Quit 399 Key Return A M ToggleTitle 400 401 402 #### 403 # J'aime bien changer de bureau avec le clavier. Voici ma configuration : 404 # Ctrl + Alt + gauche ou droite, change de bureau vers la gauche ou la droite. 405 # Alt + 1, Alt + 2, Alt + 3 et Alt + 4 amènent respectivement directement au 406 # bureau 1, 2, 3 ou 4. Remarquez les deux derniers arguments "0 3" de la commande 407 # GoToDesk. J'utilise ceci pour dire à Fvwm de faire une boucle lorsque je change 408 # de bureau avec les flèches : arrivé au bureau 3 il retourne au bureau 0, il ne 409 # continue pas vers le numéro 4. Ça paraît évident mais ça ne l'est pas pour Fvwm. 410 ########################## 411 Key ampersand A M GoToDesk 0 0 412 Key eacute A M GoToDesk 0 1 413 Key quotedbl A M GoToDesk 0 2 414 Key apostrophe A M GoToDesk 0 3 415 Key Left A CM GoToDesk -1 0 3 416 Key Right A CM GoToDesk +1 0 3 417 418 419 #### 420 # Ceci est la configuration des modules Fvwm. Je ne rentre pas dans les détails : 421 # FvwmAnimate est le module qui s'occupe de la gestion de l'animation lorsque vous 422 # iconifiez une fenêtre, FvwmBanner se charge de montrer une belle image au 423 # démarrage du gestionnaire de fenêtres, FvwmEvent lance une fonction à partir de 424 # différents évenements, FvwmProxy est très utile : pressez donc alt + entrée 425 # lorsque votre bureau est envahi de fenêtres, et enfin FvwmIdent est le module 426 # qui vous donne plein d'informations sur une fenêtre (utile pour obtenir la classe, 427 # pour définir le style d'une fenêtre précise par exemple). 428 ########################## 429 DestroyModuleConfig FvwmAnimate: * 430 *FvwmAnimate: Color white 431 *FvwmAnimate: Delay 1 432 *FvwmAnimate: Iterations 100 433 *FvwmAnimate: Width 1 434 *FvwmAnimate: Effect Frame 435 436 DestroyModuleConfig FvwmBanner: * 437 *FvwmBanner: NoDecor 438 *FvwmBanner: Pixmap gentoo.png 439 *FvwmBanner: Timeout 3 440 441 DestroyModuleConfig FvwmEvent: * 442 *FvwmEvent: new_desk NewDeskFunc 443 *FvwmEvent: add_window AddWindowFunc 444 *FvwmEvent: destroy_window CloseWindowFunc 445 446 DestroyModuleConfig FvwmProxy: * 447 *FvwmProxy: ProxyMove false 448 *FvwmProxy: Colorset 1 449 *FvwmProxy: Font "Shadow=0 se:xft:Lucida Grande:size=7:bold" 450 451 DestroyModuleConfig FvwmIdent: * 452 *FvwmIdent: Font "Shadow=0 se:xft:Lucida Grande:size=8:bold" 453 *FvwmIdent: Colorset 1 454 455 #### 456 # Il existe 3 fonctions spéciales : StartFunction, InitFunction et RestartFunction. 457 # Vous verrez qu'une seule est utile grace à la commande conditionnelle Test. 458 # La commande StartFunction est appellée par Fvwm lorsqu'il démarre, lorsqu'il 459 # redémmarre mais aussi lorsqu'il ferme. Ce qui peut nous faire mettre de coter 460 # les deux autres fonctions. 461 # 462 # On utilise la StartFunction pour lancer les modules au démarrage et effectuer 463 # différentes fonctions dont on a besoin au démarrage, redémarrage ou fermeture 464 # de Fvwm. C'est ici par exemple que je met en place le fond d'écran initial. 465 ########################## 466 DestroyFunc StartFunction 467 AddToFunc StartFunction 468 + I Test (Init) Module FvwmBanner 469 + I Test (Init, x xscreensaver) Exec xscreensaver -nosplash 470 + I Test (Init) SendToModule Panel ChangeButton desk Title "unan" 471 + I Test (Init, x /usr/bin/numlockx) Exec /usr/bin/numlockx 472 + I Test (Init) Exec rm $[FVWM_USERDIR]/icon.tmp.* 473 + I Exec fbsetbg -l 474 + I Module FvwmAnimate 475 + I Module FvwmProxy 476 + I Module FvwmEvent 477 + I Module FvwmTabs 478 + I Test (f $[FVWM_USERDIR]/vert) ChangeThemeVert 479 + I Test (f $[FVWM_USERDIR]/defaut) ChangeThemeDefaut 480 + I Test (Restart) All (Iconic) Test (f $[FVWM_USERDIR]/icon.tmp.$[w.id].png) WindowStyle IconOverride, Icon $[FVWM_USERDIR]/icon.tmp.$[w.id].png 481 + I Test (Restart) All (GameConsole) Close 482 483 484 #### 485 # Configuration du module FvwmPager. J'utilise deux configuration différentes 486 # suivant le thème. Voila pourquoi vous verrez autant de FvwmPager que de thème. 487 ########################## 488 DestroyModuleConfig FvwmPager: * 489 *FvwmPager: Colorset * 3 490 *FvwmPager: HilightColorset * 5 491 *FvwmPager: WindowColorsets 12 13 492 *FvwmPager: BalloonColorset * 13 493 *FvwmPager: Font none 494 *FvwmPager: SmallFont none 495 *FvwmPager: Balloons All 496 *FvwmPager: BalloonFont "Shadow=0 se:xft:Lucida Grande:size=7:bold" 497 *FvwmPager: BalloonYOffset +2 498 *FvwmPager: BalloonBorderWidth 1 499 *FvwmPager: UseSkipList 500 *FvwmPager: MoveThreshold 0 501 *FvwmPager: SolidSeparators 502 *FvwmPager: WindowBorderWidth 1 503 504 DestroyModuleConfig FvwmPagerTest: * 505 *FvwmPagerTest: rows 2 506 *FvwmPagerTest: Columns 2 507 *FvwmPagerTest: Colorset * 22 508 *FvwmPagerTest: HilightColorset * 22 509 *FvwmPagerTest: WindowColorsets 21 21 510 *FvwmPagerTest: BalloonColorset * 21 511 *FvwmPagerTest: Font none 512 *FvwmPagerTest: SmallFont none 513 *FvwmPagerTest: Balloons All 514 *FvwmPagerTest: BalloonFont "Shadow=0 se:xft:Lucida Grande:size=7:bold" 515 *FvwmPagerTest: BalloonYOffset +2 516 *FvwmPagerTest: BalloonBorderWidth 1 517 *FvwmPagerTest: UseSkipList 518 *FvwmPagerTest: MoveThreshold 0 519 *FvwmPagerTest: SolidSeparators 520 *FvwmPagerTest: WindowBorderWidth 1 521 522 # Définition du style du pager. 523 Style FvwmPager Sticky, NoTitle, WindowListSkip, StaysOnBottom, \ 524 FixedSize, NeverFocus, !Handles, !Borders, FixedPosition 525 526 527 #### 528 # Configuration du tableau de bord. C'est largement copié sur Fluxbox mais je le 529 # trouve vraiment très simple et à la fois fonctionnel. 530 # 531 # Je commence par définir en pixels sa longueur, ce qui me permet par la suite 532 # avec un calcul simple en bash (la commande PipeRead permet de récupérer la sortie 533 # d'un script) d'obtenir en pixels un décalage par rapport au bord de l'écran. 534 # C'est une manière de centrer ce tableau de bord quelque soit la résolution 535 # d'écran (tant qu'elle ne passe pas en dessous de la longueur même du tableau 536 # de bord). 537 # 538 # La configuration est tout simplement celle de FvwmButtons : lisez la page man. 539 # Enfin, on définit le style de ce tableau de bord. 540 ########################## 541 SetEnv panel.width 800 542 PipeRead "echo SetEnv offset.panel $$(( ($[vp.width]-$[panel.width]) / 2))" 543 544 DestroyModuleConfig Panel:* 545 *Panel: Frame 0 546 *Panel: Padding 0 0 547 *Panel: Geometry $[panel.width]x23+$[offset.panel]-5 548 *Panel: Rows 23 549 *Panel: Columns 800 550 *Panel: Colorset 5 551 *panel: Font "Shadow=0 se:xft:Lucida Grande:size=7:bold" 552 *Panel: (1x23, Colorset 6) 553 *Panel: (35x23, id desk, Title "unan", Colorset 4, \ 554 Action(Mouse 5) 'GoToDesk -1 0 3', \ 555 Action(Mouse 4) 'GoToDesk +1 0 3') 556 *Panel: (16x23, Icon arrow-previous.xpm, Action(Mouse 1) 'GoToDesk -1 0 3', \ 557 Action(Mouse 5) 'GoToDesk -1 0 3', \ 558 Action(Mouse 4) 'GoToDesk +1 0 3') 559 *Panel: (16x23, Icon arrow-next.xpm, Action(Mouse 1) 'GoToDesk +1 0 3', \ 560 Action(Mouse 5) 'GoToDesk -1 0 3', \ 561 Action(Mouse 4) 'GoToDesk +1 0 3') 562 *Panel: (691x23, Swallow FvwmIconMan "Module FvwmIconMan") 563 *Panel: (40x23, Swallow "TimeScript" 'FvwmScript $[scripts]/TimeScript') 564 *Panel: (1x23, Colorset 6) 565 566 # Définition du style du tableau de bord. 567 Style Panel Sticky, NoTitle, WindowListSkip, StaysOnBottom, \ 568 FixedSize, NeverFocus, !Handles, !Borders 569 570 571 #### 572 # Configuration du panel pour le thème Vert. Celui-ci doit inclure 573 # le Pager ainsi que la date et l'heure. Le panel doit être rétractable, 574 # ceci est réalisé à l'aide de la fonction PanelVertHideFunc. 575 ########################## 576 SetEnv panelvert.width 562 577 SetEnv panelvert.height 67 578 PipeRead "echo SetEnv IconBoxVertWidth $$(($[vp.width]-$[panelvert.width]))" 579 580 DestroyModuleConfig PanelVert: * 581 *PanelVert: Frame 0 582 *PanelVert: Padding 0 0 583 *PanelVert: Geometry $[panelvert.width]x$[panelvert.height]-0-0 584 *PanelVert: Colorset 11 585 *PanelVert: Rows 67 586 *PanelVert: Columns 562 587 *PanelVert: (562x5, Colorset 2, Frame 1, Action(Mouse 1) `PanelVertHideFunc $height`) 588 *PanelVert: (160x62, Swallow FvwmScript "FvwmScript $[scripts]/TimeScriptVert") 589 *PanelVert: (402x62, Swallow FvwmPager "Module FvwmPager 0 3") 590 591 # Définition du style du panel vert. 592 Style PanelVert Sticky, NoTitle, WindowListSkip, StaysOnBottom, \ 593 FixedSize, !Handles, !Borders, NeverFocus 594 595 596 #### 597 # Exactement le même principe que pour le tableau de bord sauf que je n'utilise 598 # (plus) pas ce panneau latéral pour le moment. Il est prêt pour plus tard. 599 # Il sera censé regrouper le pager, quelques raccourcis de lancement rapide et des 600 # monitors de charge comme Xosview. 601 ########################## 602 SetEnv side.width 183 603 604 DestroyModuleConfig Side: * 605 *Side: Frame 0 606 *Side: Padding 0 0 607 *Side: Geometry $[side.width]x$[vp.height]-0+0 608 *Side: Colorset 20 609 *Side: Rows 1000 610 *Side: Columns 183 611 *Side: (3x1000, Frame 1, Action(Mouse 1) `SideHideFunc $width`) 612 *Side: (5x62) 613 *Side: (170x62, Swallow "TimeScriptSide" 'Module FvwmScript $[scripts]/TimeScriptSide') 614 *Side: (5x62) 615 *Side: (180x10) 616 *Side: (25x20, Icon side/cpu.png) 617 *Side: (150x20, Swallow(UseOld) "cpumon" `Exec exec xosview -title cpumon +cpu`) 618 *Side: (5x100) 619 *Side: (25x20, Icon side/reseau.png) 620 *Side: (150x20, Swallow(UseOld) "netmon" `Exec exec xosview -title netmon +net`) 621 *Side: (25x20, Icon side/disquedur.png) 622 *Side: (150x20, Swallow(UseOld) "diskmon" `Exec exec xosview -title diskmon +disk`) 623 *Side: (25x40, Icon side/memoire.png) 624 *Side: (150x40, Swallow(UseOld) "memmon" `Exec exec xosview -title memmon +swap +mem`) 625 *Side: (180x20) 626 *Side: (10x100) 627 *Side: (160x100, Swallow "FvwmPager" 'Module FvwmPager FvwmPagerTest 0 3') 628 *Side: (10x100) 629 *Side: (180x828) 630 *Side: BoxSize Fixed 631 *Side: Font "Shadow=0 se:xft:Lucida Grande:size=9:bold" 632 633 # Définition du style du panneau latéral. 634 Style Side Sticky, NoTitle, WindowListSkip, StaysOnBottom, \ 635 FixedSize, !Handles, !Borders 636 637 638 #### 639 # FvwmIconMan est le module qui gère la barre des tâches. Remarquez qu'il est 640 # inclue dans le tableau de bord grace à la commande Swallow. 641 # La configuration est relativement standard, c'est à peu près le comportement 642 # que l'on retrouve sur la plupart des gestionnaires de fenêtres et ça me 643 # convient très bien. N'oubliez pas de jeter un oeil sur la page man de ce module 644 # pour bien comprendre les différentes options que j'utilise. 645 ########################## 646 DestroyModuleConfig FvwmIconMan: * 647 *FvwmIconMan: ButtonGeometry 200x23 648 *FvwmIconMan: FollowFocus True 649 *FvwmIconMan: Colorset 10 650 *FvwmIconMan: PlainColorset 10 651 *FvwmIconMan: DrawIcons false 652 *FvwmIconMan: FocusAndSelectColorset 9 653 *FvwmIconMan: FocusColorset 9 654 *FvwmIconMan: Font "Shadow=0 se:xft:Lucida Grande:size=6:bold" 655 *FvwmIconMan: Format "%t" 656 *FvwmIconMan: ManagerGeometry 8x1 657 *FvwmIconMan: ReliefThickness 0 658 *FvwmIconMan: Resolution page 659 *FvwmIconMan: SelectColorset 10 660 *FvwmIconMan: Sort name 661 *FvwmIconMan: Title "" 662 *FvwmIconMan: UseWinList true 663 *FvwmIconMan: NoIconAction "SendToModule FvwmAnimate animate" 664 *FvwmIconMan: Action Mouse 1 N sendcommand FocusOrIconify 665 *FvwmIconMan: Action Mouse 3 N sendcommand `Menu WindowControls Rectangle +$left+$top 0 -100m` 666 667 # Définition du style de la barre des tâches. 668 Style FvwmIconMan Sticky, NoTitle, WindowListSkip, StaysOnBottom, \ 669 FixedSize, NeverFocus, !Handles, !Borders 670 671 672 #### 673 # La configuration de Fvwm est maintenant terminée. Il reste pourtant pas mal de 674 # choses en dessous : ce sont des fonctions. 675 # 676 # Regardons d'abord comment est constuite une fonction : 677 # 678 # DestroyFunc FuncName 679 # AddToFunc FuncName 680 # + I (Action immédiate) 681 # + C (Action sur un clic de la souris) 682 # + D (Action sur un double clic) 683 # + H (Action sur un to happen on a mouse 'hold') 684 # + M (Action to happen on a mouse 'motion') 685 # 686 # La première chose à faire est de détruire la fonction avec DestroyFunc, 687 # ceci permet de remettre à zéro afin d'éviter quelques soucis si la fonction 688 # existait déja avant dans le fichier. Puis, la commande AddToFunc permet 689 # d'ajouter une liste d'action qui sera exécutée quand cette fonction sera 690 # appellée. Comme vous pouvez le voir ci-dessus, ces actions peuvent agir 691 # différemment avec les actions de la souris. Toutefois, on utilise principalement 692 # le I. Maintenant quand vous appellez une fonction dans FVWM, vous pouvez 693 # lui envoyer plusieurs paramètres. Par exemple, vous pouvez appeller la 694 # fonction par son nom suivi de variables : 'FuncName "$0" "$1" "$2" "$3" 695 # "$4"' où $0-$4 sont les options passées à+ I Key d A CM Next (CirculateHit,Side) SideHideFunc 3 696 la fonction. 697 # 698 # J'essaie de donner un nom explicite pour chacune des fonctions et d'optimiser 699 # au maximum chaque fonction : ne pas créer deux fonctions qui pourraient 700 # n'en faire qu'une seule par exemple. 701 ########################## 702 703 704 #### 705 # Deux fonctions pour la barre des tâches. 706 # La première s'occupe de lancer la fonction FuncSelectWindow si la fenêtre 707 # concernée n'a pas le focus, elle l'iconifie si la fenêtre a le focus. 708 # La seconde fonction FuncSelectWindow donne le focus, fait passer au premier 709 # plan et restaure la fenêtre concernée si elle était iconifiée. 710 ########################## 711 DestroyFunc FocusOrIconify 712 AddToFunc FocusOrIconify 713 + I ThisWindow (!Focused) FuncSelectWindow 714 + I TestRc (NoMatch) Iconify 715 716 DestroyFunc FuncSelectWindow 717 AddToFunc FuncSelectWindow 718 + I Focus 719 + I Iconify false 720 + I Raise 721 722 723 #### 724 # Cette fonction est directement liée au panneau latéral. 725 # C'est elle qui permet de le montrer ou le cacher. 726 # 727 # On effectue dans un premier temps un test en bash avec la commande PipeRead 728 # qui compare la longueur du panneau additionnée à la longueur qu'il prend sur 729 # l'écran avec la longueur de l'écran. Si le résultat est plus petit que la longueur 730 # de l'écran, cela veut dire que le panneau est montré ; on donne alors un argument 731 # positif à la commande AnimatedMove (dont le fonctionnement est exactement le 732 # même que la commande Move) pour l'axe des abscisses. Si le résultat est plus grand 733 # que la longueur de l'écran, le panneau est donc caché et il faut le montrer ; on 734 # donne alors un argument négatif pour AnimatedMove. 735 # 736 # AnimatedMove accepte deux arguments : un horyzontal et un vertical. Les deux 737 # arguments horyzontaux sont choisis à l'aide de l'opérateur logique || (ou) et 738 # l'argument vertical est donné : keep (on garde la même valeur). 739 # 740 # C'est exactement le même principe pour la seconde action sauf que l'on modifie 741 # la variable $[strut.right] en fonction du résultat de la comparaison. 742 # Le contenu de la variable $[strut.right] est alors utilisée pour mettre à jour 743 # la commande EwmhBaseStruts. 744 # 745 # Enfin comme la zone de l'écran autorisé pour les fenêtres maximisées est bien 746 # définie en fonction de la position du panneau, on indique aux fenêtres maximisées 747 # de se remaximiser. 748 # 749 # 750 # La fontion PanelVertHideFunc a le même rôle sauf qu'elle ne s'applique que pour 751 # le panel du thème vert. 752 ########################## 753 754 DestroyFunc SideHideFunc 755 AddToFunc SideHideFunc 756 + I Next (CirculateHit,Side) PipeRead 'echo AnimatedMove $$(test $$(($[w.x]+$[w.width])) -le $[vp.width] \ 757 && echo w$$(($[w.width]-$0))p \ 758 || echo w-$$(($[w.width]-$0))p) keep' 759 + I Next (CirculateHit,Side) PipeRead 'test $$(($[w.x]+$[w.width])) -le $[vp.width] \ 760 && echo SetEnv strut.right $[side.width] \ 761 || echo SetEnv strut.right $0' 762 + I EwmhBaseStruts 0 $[strut.right] 0 33 763 + I All (Maximized, !Side, !Panel) Maximize True 764 + I PipeRead 'echo SetEnv screen.x $$(($[vp.width]-$[strut.right]+5))' 765 + I All (GameConsole, !Shaded) Resize $[screen.x]p keep 766 767 DestroyFunc PanelVertHideFunc 768 AddToFunc PanelVertHideFunc 769 + I Next (PanelVert) PipeRead 'echo AnimatedMove keep $$(test $$(($[w.y]+$[w.height])) -le $[vp.height] \ 770 && echo w$$(($[w.height]-$0))p \ 771 || echo w-$$(($[w.height]-$0))p)' 772 + I Next (PanelVert) PipeRead 'test $$(($[w.y]+$[w.height])) -le $[vp.height] \ 773 && echo SetEnv strut.bottom $[w.height] \ 774 || echo SetEnv strut.bottom $0' 775 + I EwmhBaseStruts 0 0 0 $[strut.bottom] 776 + I All (Maximized, !PanelVert) Maximize True 777 778 779 #### 780 # Vous pouvez explorer des répertoires et des fichiers grace au script 781 # fvwm-menu-directory inclut dans Fvwm. C'est très configurable et très 782 # fonctionnel. Ces 3 fonctions sont directements tirées du fichier de 783 # configuration de Taviso. 784 # 785 # Il faudra les utiliser dans des menus dynamiques. Elles permettent 786 # d'explorer vos répertoires de videos et de musiques et de changer de fond d'écran. 787 ########################## 788 DestroyFunc FuncFvwmMenuDirectory 789 AddToFunc FuncFvwmMenuDirectory 790 + I PipeRead 'case "$0" in \ 791 "$[video]"*) myexec="$[video_exec]" mypng=menu/video.png;; \ 792 "$[audio]"*) myexec="$[audio_exec]" mypng=menu/audio.png;; \ 793 esac; \ 794 fvwm-menu-directory --icon-title menu/dossier.png --icon-file ${mypng:-menu/dossier.png} \ 795 --icon-dir menu/dossier.png --dir "$0" --exec-t="^${myexec:-gvim} *" \ 796 --exec-file "^${myexec:-gvim}"' 797 798 DestroyFunc WallpaperBrowser 799 AddToFunc WallpaperBrowser 800 + I PipeRead 'test ! -d "$0/.thumbs" && mkdir "$0/.thumbs"; \ 801 for i in "$0/"*; do \ 802 test -f "$0/.thumbs/${i##*/}" \ 803 -a "${i}" -ot "$0/.thumbs/${i##*/}" || { \ 804 convert -quality 0 -scale 64 "${i}" "png:$0/.thumbs/${i##*/}" 2>/dev/null \ 805 || continue;}; \ 806 done; \ 807 fvwm-menu-directory --icon-title dossier.png --icon-file __PIXMAP__ \ 808 --icon-dir dossier.png --dir $0 --exec-file "^fbsetbg -f" \ 809 --exec-t="^eog *" | sed -e "s#FuncFvwmMenuDirectory#WallpaperBrowser#g" \ 810 -e "s#__PIXMAP__\\(.*\\)\\"\\(.*/\\)\\(.*\\)\\"#\\2.thumbs/\\3\\1\\2\\3#g"' 811 812 DestroyFunc ScreenshotsBrowser 813 AddToFunc ScreenshotsBrowser 814 + I PipeRead 'test ! -d "$0/.thumbs" && mkdir "$0/.thumbs"; \ 815 for i in "$0/"*; do \ 816 test -f "$0/.thumbs/${i##*/}" \ 817 -a "${i}" -ot "$0/.thumbs/${i##*/}" || { \ 818 convert -quality 0 -scale 64 "${i}" "png:$0/.thumbs/${i##*/}" 2>/dev/null \ 819 || continue;}; \ 820 done; \ 821 fvwm-menu-directory --icon-title dossier.png --icon-file __PIXMAP__ \ 822 --icon-dir dossier.png --dir $0 --exec-file "^eog" \ 823 --exec-t="^eog *" | sed -e "s#FuncFvwmMenuDirectory#ScreenshotsBrowser#g" \ 824 -e "s#__PIXMAP__\\(.*\\)\\"\\(.*/\\)\\(.*\\)\\"#\\2.thumbs/\\3\\1\\2\\3#g"' 825 826 827 #### 828 # Fvwm possède une fonction native nommée WindowListFunc. Je n'aimais pas trop 829 # le comportement par defaut de cette fonction, alors je l'ai détruite et recréé 830 # afin de positionner le curseur de la souris sur la fenêtre sélectionnée. 831 ########################## 832 DestroyFunc WindowListFunc 833 AddToFunc WindowListFunc 834 + I Iconify off 835 + I FlipFocus 836 + I Raise 837 + I WarpToWindow 50 50 838 839 840 #### 841 # Fonction très simple qui permet avec une simple opération mathématique de 842 # centrer une fenêtre. J'utilise la même méthode pour centrer le tableau de bord. 843 # Cette fonction est appellée avec la combinaison de touche Alt+c. 844 ########################## 845 DestroyFunc CenterWindow 846 AddToFunc CenterWindow 847 + I ThisWindow Piperead "echo AnimatedMove \ 848 $(( $[vp.width]/2-$[w.width]/2 ))p \ 849 $(( $[vp.height]/2-$[w.height]/2 ))p" 850 851 852 #### 853 # Différentes fonctions qui s'occupe des opérations sur les fenêtres : 854 # iconifier, maximiser, plein écran, enlever la décoration etc. 855 ########################## 856 DestroyFunc IconifyFunc 857 AddToFunc IconifyFunc 858 + M Nop 859 + C Iconify 860 861 DestroyFunc ThumbnailFunc 862 AddToFunc ThumbnailFunc 863 + M Nop 864 + C Thumbnail 865 866 867 DestroyFunc MaximizeFunc 868 AddToFunc MaximizeFunc 869 + C Maximize $0 870 + M Nop 871 872 DestroyFunc HoryMaximizeFunc 873 AddToFunc HoryMaximizeFunc 874 + C Maximize 100 0 875 + M Nop 876 877 DestroyFunc MaximizeTitleBarFunc 878 AddToFunc MaximizeTitleBarFunc 879 + I Raise 880 + D Maximize 881 + M Move 882 883 DestroyFunc CloseFunc 884 AddToFunc CloseFunc 885 + C Close 886 + M Nop 887 888 DestroyFunc MoveFunc 889 AddToFunc MoveFunc 890 + M Move 891 + C Nop 892 893 DestroyFunc ResizeFunc 894 AddToFunc ResizeFunc 895 + M Resize 896 + C Menu WindowControls 897 AddToFunc DeiconifyAndRearrange 898 + I DeThumbnail 899 + I All (CurrentPage, Iconic) PlaceAgain Icon 900 901 AddToFunc IconFunc 902 + C DeiconifyAndRearrange 903 + M Raise 904 + M Move 905 + D DeiconifyAndRearrange 906 907 DestroyFunc Thumbnail 908 AddToFunc Thumbnail 909 + I Raise 910 + I ThisWindow (!Iconic) SetEnv Icon-$[w.id] $[w.iconfile] 911 + I ThisWindow (!Shaded, Iconifiable, !Iconic) PipeRead \ 912 "xwd -silent -id $[w.id] | convert -scale 128 -frame 1x1 \ 913 -mattecolor black -quality 0 xwd:- png:$[FVWM_USERDIR]/icon.tmp.$[w.id].png \ 914 && echo WindowStyle IconOverride, Icon $[FVWM_USERDIR]/icon.tmp.$[w.id].png \ 915 || echo Nop" 916 + I TestRc (Match) Test (f $[w.miniiconfile], f $[FVWM_USERDIR]/icon.tmp.$[w.id].png) PipeRead \ 917 "composite -geometry +2+4 $[w.miniiconfile] $[FVWM_USERDIR]/icon.tmp.$[w.id].png \ 918 $[FVWM_USERDIR]/icon.tmp.$[w.id].png; echo Nop" 919 + I Iconify 920 921 DestroyFunc DeThumbnail 922 AddToFunc DeThumbnail 923 + I PipeRead "echo Test \\(i \\$\\[Icon-$[w.id]\\]\\) WindowStyle Icon \\$\\[Icon-$[w.id]\\]" 924 + I TestRc (NoMatch) WindowStyle NoIconOverride, Icon 925 + I Exec rm -f $[FVWM_USERDIR]/icon.tmp.$[w.id].png 926 + I UnsetEnv Icon-$[w.id] 927 + I Iconify off 928 929 #### 930 # J'utilise FvwmEvent pour détecter le lancement de nouvelles fenêtres. 931 # Différentes actions sont exécutées en fonction de la fenêtre. 932 # Je décide par exemple de placer Irssi à une certaine position dès qu'ils souvre. 933 # 934 # Merci à Thomas_Adam sur les forums Fvwm pour m'avoir aidé sur ce point : 935 # lorsque vous maximisez une fenêtre et que vous la fermez, elle ne sera pas maximisée 936 # la prochaine fois (seule la taille est conservée). Si je ferme Firefox alors qu'il était 937 # maximisé je veux qu'il soit maximisé la prochaine fois que je l'ouvre ; mais je veux aussi 938 # qu'il ne le soit pas s'il ne l'était pas quand je l'avais fermé. C'est le comportement du 939 # gestionnaire de fenêtres Metacity de GNOME. 940 # 941 # C'est ce que font ces deux fonctions. Lorsqu'une fenêtre est ouverte, on vérifie si le nom 942 # de sa classe apparait dans le fichier $[FVWM_USERDIR]/windowlist, si oui alors la fenêtre est 943 # maximisée. Si son nom de classe n'apparait pas, on ne fait rien bien sur. 944 # 945 # Par contre lorsque je ferme une fenêtre, il y'a deux possibilités : elle était maximisée ou non. 946 # Si elle était maximisée et qu'on ne trouve pas le nom de sa classe dans le fichier $[FVWM_USERDIR]/windowlist 947 # alors on écrit la classe dans ce fichier. Si la fenêtre n'était pas maximisée et qu'on trouve le nom de 948 # sa classe dans le fichier, alors il faut le supprimer sinon elle sera maximisée la prochaine fois. 949 ########################## 950 DestroyFunc AddWindowFunc 951 AddToFunc AddWindowFunc 952 + I ThisWindow (irssi) Move 30p 135p 953 + I ThisWindow PipeRead `\ 954 while read; do \ 955 [[ "$REPLY" == "$[w.resource]" ]] && \ 956 echo 'ThisWindow (!Maximized) Maximize' || \ 957 echo Nop; done < $[FVWM_USERDIR]/windowlist` 958 959 DestroyFunc CloseWindowFunc 960 AddToFunc CloseWindowFunc 961 + I ThisWindow (Maximized) Exec /bin/sh -c \ 962 'if ! grep -q $[w.resource] $[FVWM_USERDIR]/windowlist; then echo $[w.resource] >> $[FVWM_USERDIR]/windowlist; fi' 963 + I ThisWindow (!Maximized) Exec /bin/sh -c \ 964 'if grep -q $[w.resource] $[FVWM_USERDIR]/windowlist; then sed -ie "/$[w.resource]/d;" $[FVWM_USERDIR]/windowlist; fi' 965 966 967 #### 968 # Deux fonctions utilisées dans le menu des opérations sur les fenêtres. 969 # Elles permettent respectivement de faire passer une fenêtre en plein écran 970 # ou de la remettre dans son état initial. Ce que j'appelle plein écran, c'est 971 # une fenêtre sans bordures, sans décorations de fenêtres et maximisée au maximum. 972 # Voila ce que fait la fonction FullScreen et à l'inverse la fonction FullScreenOff. 973 ########################## 974 DestroyFunc FullScreen 975 AddToFunc FullScreen 976 + I ToggleTitle 977 + I ToggleBorder 978 + I UpdateStyles 979 + I Maximize ewmhiwa true 980 981 DestroyFunc FullScreenOff 982 AddToFunc FullScreenOff 983 + I ToggleTitle 984 + I ToggleBorder 985 + I UpdateStyles 986 + I Maximize ewmhiwa false 987 988 989 #### 990 # On a dit au début que toutes les fenêtres avait le State 1 (la barre de titre 991 # est bien la). La fonction ToggleTitle s'occupe d'appliquer le Style NoTitle 992 # à la fenêtre concernée si cette dernière avait bien le State 1. Dans le cas 993 # contraire (ce qui veut dire que la barre de titre n'est plus la), ToggleTitle 994 # applique le Style Title à la fenêtre. 995 # 996 # Exactement le même principe pour ToggleBorder sauf que l'on joue sur le Style 997 # Borders et !Borders ainsi que sur le State 2 (la bordure est bien la). 998 # 999 # Toujours le même principe pour TitleRotate. Cela paraît un peu plus compliqué 1000 # car c'est une boucle. Mais regardez bien : le State 3 définit que la barre de 1001 # titre est en haut. On indique donc à Fvwm de passer la barre de titre à gauche 1002 # si elle était en haut. Ensuite on dit que si la barre de titre est à gauche, cela 1003 # correspond au State 4. Si l'on rappelle cette fonction, on lui indique de faire 1004 # passer la barre de titre en bas si elle était à gauche ; ce qui fait passer la 1005 # fenêtre en State 5. Cela se répète jusqu'à revenir au State 3. 1006 # 1007 # Remarque : ces 3 fonctions sont très inspirées de fonctions écrites par Taviso. 1008 ########################## 1009 DestroyFunc ToggleTitle 1010 AddToFunc ToggleTitle 1011 + I ThisWindow (State 1) WindowStyle NoTitle 1012 + I TestRc (Match) State 1 False 1013 + I TestRc (NoMatch) WindowStyle Title 1014 + I TestRc (NoMatch) State 1 True 1015 1016 DestroyFunc ToggleBorder 1017 AddToFunc ToggleBorder 1018 + I ThisWindow (State 2) WindowStyle !Borders 1019 + I TestRc (Match) State 2 False 1020 + I TestRc (NoMatch) WindowStyle Borders 1021 + I TestRc (NoMatch) State 2 True 1022 1023 DestroyFunc TitleRotateLeft 1024 AddToFunc TitleRotateLeft 1025 + I ThisWindow (State 3) WindowStyle TitleAtLeft 1026 + I TestRc (Match) State 3 False 1027 + I TestRc (Match) State 4 True 1028 + I TestRc (Match) Break 1029 + I ThisWindow (State 4) WindowStyle TitleAtBottom 1030 + I TestRc (Match) State 4 False 1031 + I TestRc (Match) State 5 True 1032 + I TestRc (Match) Break 1033 + I ThisWindow (State 5) WindowStyle TitleAtRight 1034 + I TestRc (Match) State 5 False 1035 + I TestRc (Match) State 6 True 1036 + I TestRc (Match) Break 1037 + I ThisWindow (State 6) WindowStyle TitleAtTop 1038 + I TestRc (Match) State 6 False 1039 + I TestRc (Match) State 3 True 1040 + I TestRc (Match) Break 1041 1042 DestroyFunc TitleRotateRight 1043 AddToFunc TitleRotateRight 1044 + I ThisWindow (State 3) WindowStyle TitleAtRight 1045 + I TestRc (Match) State 3 False 1046 + I TestRc (Match) State 6 True 1047 + I TestRc (Match) Break 1048 + I ThisWindow (State 6) WindowStyle TitleAtBottom 1049 + I TestRc (Match) State 6 False 1050 + I TestRc (Match) State 5 True 1051 + I TestRc (Match) Break 1052 + I ThisWindow (State 5) WindowStyle TitleAtLeft 1053 + I TestRc (Match) State 5 False 1054 + I TestRc (Match) State 4 True 1055 + I TestRc (Match) Break 1056 + I ThisWindow (State 4) WindowStyle TitleAtTop 1057 + I TestRc (Match) State 4 False 1058 + I TestRc (Match) State 3 True 1059 + I TestRc (Match) Break 1060 1061 1062 1063 1064 1065 1066 #### 1067 # Celle ci s'occupe de remplacer le contenu de la variable $[desk.n] qui est 1068 # un chiffre représentatif du bureau courant (0, 1, 2 ou 3 dans notre cas) par 1069 # un mot, c'est du Breton mais libre à vous de mettre ce que vous voulez bien sur ! 1070 # Remarquez l'utilité de la commande PipeRead. 1071 ########################## 1072 DestroyFunc NewDeskFunc 1073 AddToFunc NewDeskFunc 1074 + I Piperead 'case $[desk.n] in \ 1075 "0" ) echo SetEnv title.desk unan;; \ 1076 "1" ) echo SetEnv title.desk daou;; \ 1077 "2" ) echo SetEnv title.desk tri;; \ 1078 "3" ) echo SetEnv title.desk pevar;; esac' 1079 + I SendToModule Panel ChangeButton desk Title $[title.desk] 1080 1081 1082 #### 1083 # http://www.stationlinux.org/fiche.140.html 1084 # C'est ce que j'appelle la console Quake 3. Je crois que c'est parce que c'est 1085 # dans ce jeu que j'ai vu pour la première fois une console de ce genre. 1086 # 1087 # La fonction ToggleTerminal exécute la fonction StartTerminal si il n'existe pas de 1088 # fenêtre nommée GameConsole. Si il existe déja une fenêtre GameConsole, la fonction 1089 # lui donne le focus, la fait passer en premier plan et la déroule si elle était 1090 # enroulée ; ou bien appelle la fonction SetWindowShadeTrue si la GameConsole 1091 # était déroulée. 1092 # 1093 # La fonction StartTerminal ne fait que démarrer un terminal nommé GameConsole, 1094 # le redimmenssione de telle manière qu'il prenne toute la place de l'écran et 1095 # change le contenu de $[OpenedTerm] à True. 1096 # 1097 # La fonction SetWindowShadeTrue est appellée si la GameConsole est déroulée. 1098 # On test si $[OpenedTerm] contient bien False, alors on enroule le terminal. 1099 # 1100 # Si le terminal est collé en haut de l'écran, on obtient le même comportement 1101 # que sous Quake 3. 1102 ########################## 1103 DestroyFunc ToggleTerminal 1104 AddToFunc ToggleTerminal 1105 + I SetEnv OpenedTerm "False" 1106 + I None (GameConsole) StartTerminal 1107 + I All (GameConsole) Focus 1108 + I All (GameConsole) Raise 1109 + I All (GameConsole, Shaded) SetWindowShadeFalse 1110 + I TestRc (NoMatch) SetWindowShadeTrue 1111 1112 DestroyFunc SetWindowShadeTrue 1113 AddToFunc SetWindowShadeTrue 1114 + I Test (EnvMatch OpenedTerm False) All (GameConsole) WindowShade True 1115 1116 DestroyFunc SetWindowShadeFalse 1117 AddToFunc SetWindowShadeFalse 1118 + I All (GameConsole) WindowShade False 1119 + I All (GameConsole) Resize $[screen.x]p keep 1120 1121 DestroyFunc StartTerminal 1122 AddToFunc StartTerminal 1123 + I Exec $[TermQuake] 1124 + I Wait GameConsole 1125 + I All (GameConsole) Resize $[screen.x]p keep 1126 + I SetEnv OpenedTerm "True" 1127 1128 1129 #### 1130 # ChangeThemeDefaut est lancée dans la StartFunction lors du démarrage de Fvwm (et 1131 # uniquement lors du démarrage grace au Test (Init)). Elle définie, tout comme 1132 # ChangeThemeVert, plusieurs Style, MenuStyle, Colorset et même des variables 1133 # d'environnement. ChangeThemeDefaut sélectionne le décor Default alors que 1134 # ChangeThemeVert sélectionne le décor Vert. 1135 # 1136 # ChangeThemeVert est lancée dans la StartFunction lors du redémarrage seulement 1137 # si elle à été lancée auparavant (grace à cette ligne : + I SetEnv theme vert). 1138 # En effet cela créé la variable $[theme] avec pour valeur "vert", et regardez 1139 # bien dans la StartFunction : 1140 # + I Test (Init) SetEnv theme defaut 1141 # + I ChangeTheme$[theme] 1142 # On lance ChangeThemeDefaut lors du premier démarrage de Fvwm et on lance soit 1143 # ChangeThemeVert ou ChangeThemeDefaut selon le thème utilisé. 1144 # C'est un moyen de se souvenir quel était le thème utilisé. Il faudrait écrire 1145 # dans un fichier extérieur la valeur de la variable pour que Fvwm puisse restaurer 1146 # le thème utilisé auparavant lors d'un premier démarrage (après un reboot 1147 # par exemple). 1148 # 1149 # Il faut créer autant de fonctions similaires qu'il existe de thèmes. 1150 # 1151 # http://www.stationlinux.org/fiche.138.html 1152 # Utilisez EwmhBaseStruts pour empêcher les fenêtres de recouvrir une 1153 # zone de l'écran lorsqu'elles sont maximisées. Les valeurs sont en pixels. 1154 # Notez que vous pouvez utiliser l'argument ewmhiwa pour la commande Maximize, 1155 # ce qui aura pour conséquence d'ignorer EwmhBaseStruts. 1156 # EwmhBaseStruts $[strut.left] $[strut.right] $[strut.top] $[strut.bottom] 1157 ########################## 1158 DestroyFunc ChangeThemeDefaut 1159 AddToFunc ChangeThemeDefaut 1160 + I DefaultColorset 9 1161 + I Style * UseDecor Default, NoIcon 1162 + I Colorset 0 fg #c0c0c0, bg #fdfdfd 1163 + I Colorset 2 fg #7b7b7b, bg #fdfdfd 1164 + I Colorset 3 fg white, RootTransparent, Tint #414b54 85 1165 + I Colorset 4 fg #393b3a, Pixmap cinza/iconman.png 1166 + I Colorset 5 fg #7b7b7b, Pixmap cinza/iconman.png 1167 + I Colorset 6 Pixmap cinza/panel-side.xpm 1168 + I Colorset 7 fg #2c2c2c, Translucent white 75, hi white, sh white 1169 + I Colorset 8 fg white, bg #414b54, hi white 1170 + I Colorset 9 fg white, Pixmap cinza/hilite.png 1171 + I Colorset 10 fg #393b3a, Pixmap cinza/iconman.png 1172 + I Colorset 20 fg white, Pixmap cinza/hilite-side.png 1173 + I Colorset 21 fg white, Pixmap pager/active.png 1174 + I Colorset 22 fg #393b3a, Pixmap pager/desk.png 1175 + I Mouse 1 6 A IconifyFunc 1176 + I MenuStyle * Font "Shadow=0 se:xft:snap" 1177 + I UpdateStyles 1178 + I Key d A CM Next (CirculateHit,Side) SideHideFunc 3 1179 + I PipeRead "if [ -f ${FVWM_USERDIR}/vert ]; then rm ${FVWM_USERDIR}/vert; fi" 1180 + I PipeRead "if [ -f ${FVWM_USERDIR}/defaut ]; then rm ${FVWM_USERDIR}/defaut; fi" 1181 + I All (PanelVert) Close 1182 + I All (Panel) Close 1183 + I All (Side) Close 1184 + I EwmhBaseStruts 0 $[strut.right] 0 33 1185 + I All (Maximized, !Panel) Maximize True 1186 + I Module FvwmButtons Panel 1187 + I SendToModule Panel ChangeButton desk Title $[title.desk] 1188 + I Module FvwmButtons Side 1189 + I Wait Side 1190 + I All (Side) SideHideFunc 3 1191 + I Exec touch $[FVWM_USERDIR]/defaut 1192 + I All (GameConsole) Close 1193 1194 DestroyFunc ChangeThemeVert 1195 AddToFunc ChangeThemeVert 1196 + I EwmhBaseStruts 0 0 0 67 1197 + I Colorset 0 fg #393b3a, bg #b4d387, IconAlpha 65 1198 + I Colorset 2 fg black, bg #b4d387, IconAlpha 100 1199 + I Colorset 3 fg white, Tint white 70, RootTransparent buffer 1200 + I Colorset 11 fg black, Tint white 70, RootTransparent buffer 1201 + I Colorset 5 fg black, Tint white 80, RootTransparent buffer 1202 + I Mouse 1 6 A ThumbnailFunc 1203 + I Mouse 1 I A IconFunc 1204 + I Style * UseDecor Green, Icon, NoIconTitle 1205 + I Style * IconBox $[IconBoxVertWidth]x$[panelvert.height]+0-0 1206 + I Style * IconGrid 3 3, IconFill bottom left 1207 + I DefaultColorset 0 1208 + I Colorset 7 fg #393b3a, Translucent white 75, white, sh white 1209 + I Colorset 8 fg #393b3a, bg #b4d387, hi white 1210 + I Colorset 12 fg #393b3a, bg #bbd09d 1211 + I Colorset 13 fg #393b3a, bg #b4d387, sh #393b3a, hi #393b3a 1212 + I MenuStyle * Font "Shadow=0 se:xft:Lucida Grande:size=8" 1213 + I UpdateStyles 1214 + I All (Iconic) Test (f $[FVWM_USERDIR]/icon.tmp.$[w.id].png) WindowStyle IconOverride, Icon $[FVWM_USERDIR]/icon.tmp.$[w.id].png 1215 + I Key d A CM Next (CirculateHit,PanelVert) PanelVertHideFunc 5 1216 + I PipeRead "if [ -f ${FVWM_USERDIR}/vert ]; then rm ${FVWM_USERDIR}/vert; fi" 1217 + I PipeRead "if [ -f ${FVWM_USERDIR}/defaut ]; then rm ${FVWM_USERDIR}/defaut; fi" 1218 + I PipeRead 'echo SetEnv screen.x $$(($[vp.width]+5))' 1219 + I All (Panel) Close 1220 + I All (Side) Close 1221 + I All (PanelVert) Close 1222 + I All (Maximized, !PanelVert) Maximize True 1223 + I Module FvwmButtons PanelVert 1224 + I Exec touch $[FVWM_USERDIR]/vert 1225 + I All (GameConsole) Close