WMFS

De ArchwikiFR


WMFS (Window Manager From Scratch) est un gestionnaire de fenêtres tiling, léger et grandement configurable pour Xorg. On peut le configurer avec un fichier de configuration, il utilise les fontes Xft (Freetype) et se conforme aux "Extended Window Manager Hints" (EWMH).

WMFS est passé en V2, le pkgbuild est à jour mais la syntaxe ainsi que le fichier de configuration ont changé. si vous utilisez la dernière version de WMFS visitez le wiki officiel [1] (eng/fr)

la suite de ce wiki fonctionne pour WMFS1

Sommaire

Installation

wmfs est disponible sur AUR.

De par son rythme de développement élevé, il est recommandé d'utiliser la version git.

Vous pouvez l'installer avec un "AUR helper", ou le compiler vous même.

WMFS va chercher sa configuration dans $XDG_CONFIG_HOME/wmfs. Pour vous mitonner un WMFS à votre goût, vous allez devoir créer un fichier de configuration; pour la plupart d'entre vous ~/.config/wmfs/wmfsrc. Si ~/.config/wmfs n'existe pas, créez le:

mkdir -p ~/.config/wmfs

Le fichier de configuration par défaut, se trouvant dans le dossier XDG système, généralement /etc/xdg/wmfs, est nommé wmfsrc. Copiez le vers .config/wmfs et vous pouvez commencer à le modifier.

cp /etc/xdg/wmfs/wmfsrc ~/.config/wmfs

Pour utiliser WMFS comme gestionnaire de fenêtres, ajoutez le à votre ~/.xinitrc:

exec wmfs

Configuration

Le fichier de configuration est bien commenté. Faites des petits changements successifs, et rechargez WMFS (par défaut, Alt+Ctrl+r) pour les tester.

On peut faire des inclusions et découper le fichier de configuration avec:

@include "~/.config/wmfs/whatever"

Par défaut, deux touches modificatrices sont utilisées pour les raccourcis clavier (Ctrl et Alt), ce qui peut entrer en conflit avec votre configuration existante. Ceci peut être changé dans le wmfsrc. Pour utiliser Super au lieu de Alt, remplacez "Alt" par "Super" ou "Mod4" dans le fichier de configuration, par exemple:

[key] mod = { "Super" } key = "p" func = "launcher" cmd = "launcher_exec" [/key]

Ou tout en une commande:

sed --in-place=.bak 's/"Alt"/"Mod4"/' wmfsrc

Usage

Le raccourci Alt+p démarre un lanceur d'applications dans la barre de titre (comme dmenu), il supporte la complétion (Tab).

WMFS peut être contrôlé sur la ligne de commande par des commandes à la Vi:

wmfs -V :ln

sélectionnera le layout de l même façon que si vous appuyez sur Alt+Escape suivi par :ln. wmfs -V help pour voir la liste des commandes possibles.

Exemples

Tags et règles

Assigner un client à un tag, par exemple, avoir Uzbl qui s'ouvre sur le tag 2, est fait par la règle suivante (dans la section [rules]):

[rule] instance = "Uzbl" screen = 0  tag = "2"  max =  "false" [/rule]

Ce qui ouvrira Uzbl dans le tag 2. Pour définir un layout pour ce tag, allons dans [tags]:

[tag] name = "WWW"  screen = 0 layout = "tile_right" [/tag] 

Pour certaines règles, par exemple une application ouverte dans un terminal, vous aurez probablement à spécifier une class:

[rule] instance = "mutt" class = "mutt" screen = 0  tag = "3"  max = "true" [/rule]

Utilisez xprop pour trouver les valeurs pour vos règles.

Raccourcis clavier

La section [keys] du wmfsrc permet de définir les raccourcis clavier. Comme expliqué plus haut, on peut se contenter de changer Alt en Super.

Par défaut, WMFS fait un cycle entre les 9 layouts disponibles. Vous pourriez, par exemple, vouloir créer un raccourci pour utiliser directement un layout, disons tile_right. Vous pouvez définir Super+t ainsi:

[key] mod = {"Mod4"} key = "t" func = "set_layout" cmd = "tile_right" [/key]

Pareillement, vous pouvez modifier les raccourcis de toutes les autres fonctions. La liste complète ne se trouve (pour l'instant) que dans src/config.c.

Application avec un layout flottant

En combinant une règle et un raccourci, on peut créer un terminal qui s'ouvrira flottant dans n'importe quel tag, à un endroit précis:

[key] mod = {"Control", "Alt"} key = "p" func = "spawn" cmd = "urxvtc -name scratchpad -geometry +480+34" [/key]
[rule] instance = "scratchpad"  name  = "scratchpad"   free = "true"  [/rule]

Configuration de la barre de statut

Le texte affiché dans les barre de statut (status bars ou infobars) est défini dans une instance de WMFS lancée avec la commande "wmfs -s". On peut définir une barre différente pour chaque écran. Les barres peuvent être positionnées en haut ou en bas de chaque tag dans le fichier de configuration. Par exemple:

wmfs -s "Salut les gens, on me voit sur tout les écrans"
wmfs -s 3 "Salut les mecs, on me voit que sur l'écran 4" # les écrans commencent à 0

Les couleurs peuvent être ajoutées ainsi:

wmfs -s "This text is \#ff0000\red, \#00ff00\green and \#0000ff\blue"

Des rectangles peuvent être dessinés ainsi:

wmfs -s "<--look rectangles \b[700;9;14;5;#00ff00]\ \b[715;4;14;10;#00ff00]\ \b[730;3;14;11;#ff0000]\ "

Le format est \b[xx;yy;ww;hh;#cccccc]\ où xx et yy sont des positions x et y absolues (pas relatives), ww and hh la largeur et la hauteur, et cccccc une couleur. Cette fonctionnalité permet de faire des graphiques pour l'évolution de l'occupation CPU, le volume, etc… Notez que le positionnement absolu rend difficile l'alternance images ou rectangles avec du texte.

Pour avoir du texte dans la barre, le plus rapide reste un script bash avec ce que vous voulez, et de l'indiquer dans le wmfsrc. WMFS l'appellera :

status_path = ".config/wmfs/status.sh"
status_timing = 5

La sortie du status.sh est comme précédement:

wmfs -s "Quoi que tu veuille afficher"

Quelques exemples de scripts sont sur le site de WMFS.


Attention: Sur le git, la gestion de la barre de statut a été revue: [4e33b], dorénavant, il vous faudra le lancer manuellement et gérer la boucle; par exemple, pour afficher un message toute les 5s, vous pouvez avoir un status.sh contenant:
#!/bin/bash
while true; do 
  # bla bla
  msg="resultat de bla bla"
  wmfs -s "$msg"
  sleep 5
done
Vous pourrez rajouter status.sh à votre ~/.xinitrc.
Astuce: Vous pouvez configurer Conky avec:
out_to_console yes
et afficher le résultat dans la barre de statut avec la commande:
conky | while read -r; do wmfs -s -name "$REPLY"; done
Outils personnels
Autres langues