la session wmfs
WMFS² est un gestionnaire de fenêtres en tiling (comme dwm ou awesome) écrit en C, léger et hautement configurable. c'est un logiciel libre distribué selon les termes de la licence BSD. il se pilote depuis un fichier de configuration en mode texte facilement compréhensible.
wmfs est français et est developpé par Martin Duquesnoy aka xorg62. wmfs est encore en plein développement, mais est particulièrement stable et plein de promesses avec une communauté très actives et des devs motivés.
wmfs c'est aussi:
- lanceur console intégré (prompt) avec autocompletion
- zone de notification native
- support Xinerama pour le multi-écran
- respect des normes EWMH
- possibilités d'éditer des règles pour les tags/clients
- support complet de la souris
- rechargement à la volée du wm après modification de la configuration (on-the-fly reloading)
- ajout dynamique de tags
- barre de status avec support des couleurs, des images (grâce à imlib2), et des scripts dynamiques
- layout manuel: wmfs n'a pas de layout (entendez 'disposition') precis, l'agencement des clients se fait manuellement selon vos besoins et vos envies, grâce au clavier ou la souris. wmfs n'a pas de zone “master” ou “tile” contrairement à dwm ou awesome
- support pour les onglets (tabbing), déplacement et redimensionnement directionnels des clients
- support des thèmes pour les barres de statut et les clients
- support des ”@include” dans le fichier de configuration
screenshot
lancement
wmfs est lancé par le script ~/bin/start/wmfs_start.sh.
pour changer vos applications lancées au démarrage, éditer ce fichier: vim bin/start/wmfs_start.sh ou depuis le menu wmfs:section config:wmfs:éditer le script de lancement
composants
wmfs se suffit à lui-même mais j'ai tout de même ajouté un menu géré par fbpanel pour plus de facilité d'utilisation. le menu wmfs est disponible depuis le coin supérieur gauche de votre écran.
wmfs dispose d'une barre de status incluant (en option) la liste des tags, le statustext, un prompt et le systray.
notez que wmfs peut parfaitement foncionner sans aucune barre de status.
configuration générale
pour fbpanel, il faut éditer son fichier de configuration vim .config/fbpanel/defaultou depuis le menu-lui-même section config:fbpanel:éditer le menu.
si vous désirez ajouter des plugins, visitez la page dédiée.
WMFS se configure depuis son fichier principal en mode texte: ~/.config/wmfs/wmfsrc. pour modifier votre configuration, il suffit d’éditer ce fichier vim .config/wmfs/wmfsrc ou depuis le menu wmfs:section config:wmfs:edit wmfsrc , puis de relancer wmfs avec Ctrl+Alt+r.
note: le bouton 'config' de la barre inférieure: clic-gauche pour éditer la configuration de wmfs, clic-droit pour éditer la configuration des barres wmfs.
soyez vigilant dans la modification des fichiers de configuration: wmfs est encore au stade de développement, et même plutôt stable, une erreur dans la config causera un crash de wmfs.
wmfs_rules: les propriétés de vos applications
la section [rules] de wmfsrc: permet de déterminer des comportements particuliers selon l'application, sa classe, son role (déterminés par la commande 'xprop'). vous pouvez déterminer le thème utilisé par l'application, son tag/écran d'ouverture, sa gestion (libre/tiled/visible partout) et son implantation (en onglet).
pour configurer les 'rules', editer le fichier vim .config/wmfs/wmfsrc ou depuis le menu wmfs:section config:wmfs:wmfsrc
#rules for wmfs²
[rules]
[rule]
class = "MPlayer" # seconde partie de WM_CLASS
#instance = "xv" # première partie de WM_CLASS
#role = "" # WM_WINDOW_ROLE
#name = "" # NET_WM_NAME
theme = "titleless" # thème utilisé pour l'application
#tag = 1 # tag d'ouverture, ici 2° tag
screen = 0 # écran d'ouverture
free = true # ouverture libre true/false
tab = false # ouverture en onglet true/false
ignore_tag = false # visible sur tous les tags true/false
[/rule]
(...)
[/rules]
wmfs_themes: le look de votre wmfs
la section [themes] de wmfsrc: permet de déterminer l'apparence de vos clients. sur wmfs, chaque élément (clients, barre) peuvent avoir un thème différent (à renseigner dans wmfsrc)
liste complète des options de la section [themes] (note: la syntaxe des séquences est expliquée dans la section statusbar de cette aide):
- name nom du thème: sera utiliser dans les sections suivantes
- font police du theme, au format XLFD (X Logical Font Description). ex "-*-terminus-medium-*-*-*-12-*-*-*-*-*-*-*"
- bars:
- bars_width: hauteur de la barre d’info en pixels
- bars_fg: couleur du texte de la barre d’info
- bars_bg: couleur du fond de la barre d’info
- tags:
- tags_normal_fg: couleur du texte des tags par defaut
- tags_normal_bg: couleur du fond des tags par defaut
- tags_normal_statusline: sequence du tag par defaut
- tags_sel_fg: couleur du texte du tag sélectionné
- tags_sel_bg: couleur du fond du tag sélectionné
- tags_sel_statusline: sequence du tag sélectionné
- tags_occupied_fg: couleur du texte des tags occupés
- tags_occupied_bg: couleur du fond des tags occupés
- tags_occupied_statusline: sequence des tags occupés
- tags_urgent_fg: couleur du texte des tags "urgents"
- tags_urgent_bg: couleur du fond des tags "urgents"
- tags_urgent_statusline: sequence des tags "urgents"
- tags_border_color: couleur de la bordure des tags
- tags_border_width: epaisseur de la bordure des tags en pixels
- clients:
- client_normal_fg: couleur du texte de la barre de titre des clients
- client_normal_bg: couleur du fond de la barre de titre des clients
- client_normal_statusline: sequence de la barre de titre des clients
- client_sel_fg: couleur du texte de la barre de titre du client sélectionné
- client_sel_bg: couleur du fond de la barre de titre du client sélectionné
- client_sel_statusline: sequence de la barre de titre du client sélectionné
- client_free_statusline: sequence de la barre de titre du client libre
- frame_bg: couleur de la bordure des clients
- client_titlebar_width: hauteur de la barre de titre en pixels
- client_border_width: épaisseur des bordures des clients
configuration de wmfsrc
wmfsrc rassemble les sections qui configurent wmfs. voici les options détaillées pour chaque section:
- [bars]: wmfs² permet de créer plusieurs barre d’infos contenant chacune des informations spécifiques et ayant leur propre thème.
- positon: placement de la barre sur l’écran. 0:haut, 1:bas, 2:masqué
- screen: écran où s’affiche la barre(commence à 0), metrre -1 pour afficher sur tous les écrans
- elements: ordre d’affichage des composants de la barre. t:tags, s:statustext, y:systray(ne faire apparaitre qu’une fois), l:launcher
- theme thème utilisé pour la barre. doit correspondre à un thème existant
- [tags]: configuration des tags: nombre, nom, écran d’affichage, actions de la souris sur les boutons des tags.
- circular: (dés)active la navigation circulaire entre les tags
- screen: écran d’affichage des tags: commenter ou mettre -1 pour afficher les tags sur tous les écrans
- name: nom affiché du tag
- statusline: affiche une statusline spécifique par tag (peut afficher toutes les séquences)
- mousebinds: actions de la souris sur les boutons des tags
- [client]: configuration de l’apparence des clients et de leur comportement.
- padding: distance en pixels entre les clients
- autofocus: donne le focus au nouveau client (par défaut: false)
- theme: thème appliqué aux clients par défaut
- key_modifier: touche de modification utilisée pour agir sur les clients. (Alt, Super, Control, Shift…)
- focus: détermine le comportement de la souris: enter, le focus suit la souris – click, clic pour donner le focus – everything-else, désactive la souris pour le focus(le focus se donne grâce aux raccoucis clavier)
- mousebinds: actions de la souris sur les clients. voir la liste des fonctions en bas de page
- [launchers]: wmfs² dispose d’un prompt qui supporte l’autocompletion
- name: nom du lanceur. sera utilisé dans la section [keys]
- prompt: texte affiché au début du lanceur
- command: type de commande utilisé par le lanceur. cette commande peut-être de type uicb (spawn) ou uicb + extension afin de créer des lanceurs personnalisés
- [keys]: les racourcis clavier sont définis dans cette section.
- mod: touche(s) de modification. ex:{"Control", "Alt"}
- key: touche du clavier à presser
- func: fonction uicb à lancer (liste des fonctions en bas de page)
- cmd: si func = spawn, détermine la commande externe à lancer. ex:func = "spawn" cmd = "cream-browser"
configuration de la statusbar
la barre d’info de wmfs affiche les tags et la zone de notification (systray), mais elle peut aussi afficher bien d’autres choses grâce à la commande wmfs -c status.
c’est ainsi que l’on peut afficher le résultat d’un script bash, d’un conky ou une simple commande. de plus, la barre de statut supporte les barres de progression, de position, les graphiques, les couleurs, les rectangles, les images et les thèmes. et tout ceci par écran et par barre.
livarp utilise conky pour envoyer des informations dans les barre de status wmfs. les conkys sont située dans votre dossier ~/.conky. la barre supérieure est réservée aux tags et aux informations, tandis que la barre inférieure sert de dock et systray.
possibilités de wmfs -c status
- utilisation simple:
wmfs -c status "'barname' TEXTE visible dans la barre 'barname'"
- pour les couleurs, wmfs supporte le rgb:
wmfs -c status "'barname' ^s[position;couleur;texte]"
- voici la syntaxe pour dessiner des rectangles:
wmfs -c status "'barname' ^R[position;dimensions;couleur]"
- comment afficher des images (supporté par imlib2):
wmfs -c status "'barname' ^i[position;dimensions;imagepath]"
- comment afficher une barre de progression:
wmfs -c status "'barname' ^p[position;dimensions;border;value;valuemax;bgcolor;fgcolor]"
- comment afficher une barre de position:
wmfs -c status "'barname' ^P[position;dimensions;curser;value;valuemax;bgcolor;fgcolor]"
- afficher un graph:
wmfs -c status "'barname' ^g[position;dimensions;value;valuemax;bgcolor;fgcolor;name]"
mousebinds:
les séquences sont des zones cliquables grâce au code (key;uicb-function) ou (key;spawn;command)
exemple:wmfs -c status "barname ^R[position;dimensions;color](1;spawn;urxvt -e ranger)" affichera un rectangle qui lancera ranger dans urxvtc lors d’un clic gauche (bouton1).
popup status:
vous pouvez afficher des fenêtres surgissantes depuis la statusbar lors d’un clic avec le code (key;status_surface;position,dimension,color datas)
note: l’utilisation de l’argument “position” est optionnel. si il n’est pas renseigné, le popup se place sous le pointeur.
syntaxe acceptée:
- position: "left/right" (position relative) ou "x;y" (position absolue)
- dimension: "ww;hh" pour largeur;hauteur du rectangle ou de l’image, pour afficher l’image à son format d’origine, mettre "0;0".
- couleur: "#rrggbb"
- imagepath: chemin de l’image à afficher
- border: épaisseur de la bordure de la barre de progression
- curser: taille du curseur de position dans les barres de position
- value: variable assignée à la barre de progression
- valuemax: valeur maximale de la variable assignée à la barre de progression
note: “^” peut être remplacé par “\” dans les séquences.
pour afficher un ”]”, vous devrez placer un “\” devant.
si vous utilisez la sequence ^p[...], et si w supérieur à h , la barre de progression sera verticale.
intégration dans le wmfsrc
le format classique wmfs -c status "barname datas" implique que la barre d’affichage soit spécifiée dans votre wmfsrc dans la section [bars] sous la forme:
[bar]
name = "barname"
position = 0
screen = 0
elements = "tlsy" # element order in bar
theme = "default"
[/bar]
raccourcis clavier/souris
wmfs est entièrement pilotable depuis le clavier: control, lanceurs, navigation, manipulation des tags et clients...
les raccourcis clavier/souris sont définis dans le fichier wmfsrc section [keys] et sont disponibles depuis le menu wmfs:section config:wmfs: raccourcis/lanceurs wmfs.
menus:
- menu wmfs: coin supérieur gauche de l'écran
- dmenu: Alt+d
- dmenu-home: Ctrl+Alt+h
control:
- relancer wmfs: Ctrl+Alt+r
- quitter wmfs: Ctrl+Alt+q ou depuis le menu wmfs:exit
- quitter livarp: Ctrl+Shift+Alt+q ou depuis le menu wmfs:exit
fenêtres:
- fermer le client: Super+q
- libère/tile le client: Super+f
- client précédent: Alt+Shift+Tab
- client suivant: Alt+Tab
- client en tab précédent: Super+Shift+Tab
- client en tab suivant: Super+Tab
- client de gauche/droite/haut/bas: Alt+h/l/k/j
- inverser le client de gauche/droite/haut/bas: Ctrl+Shift+h/l/k/j
- grouper le client de gauche/droite/haut/bas: Alt+Shift+h/l/k/j
- dégrouper le client: Alt+Shit+u
- déplacer le client: Alt+clic-gauche
- redimensionner le client: Alt+clic-droit
- agrandir le client vers la gauche: Super+h
- reduire le client depuis la gauche: Super+l
- agrandir le client vers le haut: Super+k
- reduire le client depuis le haut: Super+j
- reduire le client depuis la droite: Super+Ctrl+h
- agrandir le client vers la droite: Super+Ctrl+l
- reduire le client depuis le bas: Super+Ctrl+k
- agrandir le client vers le bas: Super+Ctrl+j
- intégrer le client de gauche: Super+Ctrl+Alt+h
- intégrer le client de droite: Super+Ctrl+Alt+l
- intégrer le client du haut: Super+Ctrl+Alt+k
- intégrer le client du bas: Super+Ctrl+Alt+j
navigation:
- tag précédent/suivant: Ctrl+Gauche/Droite
- aller à l'écran précédent/suivant: Alt+Bas/Haut
- afficher le tag 'n': Super+F'n' ou clic-gauche sur le tag dans la statusbar
- envoyer sur le tag 'n': Super+Shift+F'n'
- ajouter un tag: Super+Shift+-
- enlever un tag: Super+-
disposition (layout)
- agencement horizontal: Super+Shift+m
- agencement vertical: Super+m
- change l'agencement vers la droite: Super+r
- change l'agencement vers la gauche: Super+Shift+r
- libère/tile le client: Super+f
lanceurs:
- lanceur de terminal par défaut: Super+Enter
- ouvrir le prompt: Alt+p
- lancer ranger: Alt+r
- lancer rox-filer: Alt+Shift+r
- lancer firefox: Alt+w
- lancer vim: Alt+e
- lancer geany: Alt+Shift+e
- lancer weechat: Alt+x
- lecteur de musique: Alt+z
- control du volume: Alt+v
liste des fonctions UICB
UICB pour User Interface Call Backs aka appels d’interface utilisateur.
exemples d’utilisation:
- dans votre wmfsrc: func = "tag_next" ou func = "spawn" cmd = "urxvt -e vim"
- dans votre status.sh: wmfs -c status "barname ^s[position;color;next](1;tag_next)"
- dans votre terminal: wmfs -c tag_next
voici la liste des fonctions acceptées par wmfs:
- système:
- spawn: lance une commande. ex: func = "spawn" cmd = "urxvtc -e screen irssi".
- quit: quitte wmfs.
- reload: recharge la configuration de wmfs.
- infobar:
- infobar_toggle_hide: affiche/masque une barre d’info. ex: func = "infobar_toggle_hide" cmd = "default" masque/affiche la barre “default”.
- tags:
- tag_set: affiche le tag par n°. ex: func = "tag_set" cmd = "0" affiche le tag n°0.
- tag: affiche le tag par nom. ex: func = "tag" cmd = "web" affiche le tag nommé ‘web’.
- tag_next: affiche le tag suivant.
- tag_prev: affiche le tag précédent.
- tag_client: tag le client. ex func = "tag_client" cmd = "2" tag le client avec le n°2.
- tag_client_and_set: tag le client et affiche le tag.
- tag_move_client_next: tag le client avec le tag suivant.
- tag_move_client_prev: tag le client avec le tag précédent.
- tag_click: affiche le tag lors d’un clic-gauche de souris.
- tag_new: ajoute un tag.
- tag_del: enlève un tag.
- layouts:
- layout_vmirror: organise le pavage en miroir vertical.
- layout_hmirror: organise le pavage en miroir horizontal.
- layout_rotate_left: rotation du pavage dans le sens anti-horaire.
- layout_rotate_right: rotation du pavage dans le sens horaire.
- layout_prev_set: revenir au précédent layout.
- layout_next_set: aller au prochain layout.
- layout_integrate_left: intègre la client dans la zone de celui de gauche.
- layout_integrate_right: intègre la client dans la zone de celui de droite.
- layout_integrate_top: intègre la client dans la zone de celui du haut.
- layout_integrate_bottom: intègre la client dans la zone de celui du bas.
- clients:
- client_close: ferme le client.
- client_resize_right: redimensionne le client en partant du coté droit. ex: "client_resize_right" cmd = "-20" réduit le client de 20 pixels depuis le bord droit.
- client_resize_left: redimensionne le client en partant du coté gauche. ex "client_resize_left" cmd = "20" agrandit le client de 20 pixels depuis le bord gauche.
- client_resize_top: redimensionne le client en partant du haut.
- client_resize_bottom: redimensionne le client en partant du bas.
- client_focus_right: donne le focus au client de droite.
- client_focus_left: donne le focus au client de gauche.
- client_focus_top: donne le focus au client du haut.
- client_focus_bottom: donne le focus au client du bas.
- client_tab_right: déplace le client dans un onglet du client de droite.
- client_tab_left: déplace le client dans un onglet du client de gauche.
- client_tab_top: déplace le client dans un onglet du client du haut.
- client_tab_bottom: déplace le client dans un onglet du client du bas.
- client_swap_right: échange le client avec le client de droite.
- client_swap_left: échange le client avec le client de gauche.
- client_swap_top: échange le client avec le client du haut.
- client_swap_bottom: échange le client avec le client du bas.
- client_focus_next: donne le focus au client suivant.
- client_focus_prev: donne le focus au client précédent.
- client_swap_next: échange le client avec le client suivant.
- client_swap_prev: échange le client avec le client précédent.
- client_untab: libère le client de l’onglet.
- client_focus_next_tab: donne le focus à l’onglet suivant.
- client_focus_prev_tab: donne le focus à l’onglet précédent.
- client_focus_click: donne le focus au client lors d’un clic.
- client_toggle_free: libère/attache un client.
- client_toggle_ignore_tag: active/désactive client visible sur tous les tags.
- client_tab_next_opened: ouvre le client dans un onglet.
- status:
- status: affiche le texte passé en argument dans la statusbar.
- status_surface: affiche une surface pouvant contenir des séquences.
- mouse:
- mouse_resize: redimensionne le client avec la souris.
- mouse_move: déplace le client avec la souris.
- mouse_swap: échange les clients avec la souris.
- mouse_tab: inclut le client dans un onglet avec la souris.
- screen:
- screen_next: aller à l’écran suivant.
- screen_prev: aller à l’écran précédent.
- screen_move_client_next: deplace le client vers l’écran suivant.
- screen_move_client_prev: deplace le client vers l’écran précédent.
- launcher:
- launcher: lanceur intégré aka prompt. ex: func = "launcher" cmd = "exec" affiche le lanceur “exec”.