# Common Lisp FullScreen Window Manager

Common Lisp FullScreen Window Manager (abrégé CLFSWM) est un gestionnaire de fenêtres pour X Window System écrit entièrement en Common Lisp qui a pour but de se faire oublier en présentant les fenêtres d'applications en plein écran sans décoration ni fioriture. Il est basé sur (en) tinywm et stumpwm.
C'est un logiciel libre distribué selon les termes de la licence publique générale GNU.
CLFSWM est extrêmement dynamique : par défaut il n'y a qu'un cadre. Les autres cadres sont ajoutés au fur et à mesure suivant les besoins. Un cadre peut contenir des fenêtres ou d'autres cadres. Une fenêtre peut être présente dans plusieurs cadres. Ce qui permet différentes vue des mêmes fenêtres.
CLFSWM n'est pas à proprement parler un gestionnaire de fenêtres par pavage puisque les fenêtres sont la plupart du temps maximisées mais la possibilité de les mettre en pavage (tiler) est présente. De plus, une fenêtre peut être flottante ou prise en charge par son cadre (maximisée, pavée...).

## Détails

CLFSWM n'est constitué que de cadres ou de fenêtres d'applications. L'écran est constitué d'un cadre principal et de ses enfants. Chaque cadre peut contenir des fenêtres ou d'autres cadres. Le cadre principal est maximisé à l'écran sans décoration.
Chaque cadre peut arranger ses enfants de manières différentes : les uns derrière les autres (à la Ion), en pavé, en colonnes avec une fenêtre principale (à la larswm).
Un agencement spécial pour le GIMP est aussi présent : les fenêtres en colonnes avec une fenêtre principale et un focus qui suit la souris.
Chaque cadre peut avoir une gestion du focus de la souris différent : clic pour avoir le focus, le focus suit la souris (sloppy focus), le focus suit la souris de manière stricte (seulement pour le cadre courant), la souris sélectionne le cadre en passant dessus.
De plus chaque cadre peut avoir (en) un hook associé à la création d'une fenêtre pour lui indiquer ce qu'il doit faire de la nouvelle fenêtre : l'absorber, l'ignorer ou la placer dans un autre cadre...
Utiliser CLFSWM est comme naviguer dans un arbre de cadres et de fenêtres. Il suffit d'entrer dans un enfant (cadre ou fenêtre) pour le maximiser.
Par exemple, les touches par défaut pour naviguer dans CLFSWM sont :
* Alt-Tab : circule à travers les enfants du cadre sélectionné ;
* Alt-Droite/Gauche : circule à travers les frères du cadre sélectionné. C'est comme circuler entre différents bureaux pour un gestionnaire de fenêtre plus conventionnel ;
* Alt-Haut : sélectionne le premier enfant du cadre courant ;
* Alt-Bas : sélectionne le parent de l'enfant courant ;
* Alt-Entrer : entre dans l'enfant courant et le maximise à l'écran;
* Alt+Shift-Entrer : sort de l'enfant courant et maximise son parent.
CLFSWM utilise deux modes. Le mode principal avec très peu de raccourcis pour éviter les collisions avec les autres programmes. Et un second mode avec (en) beaucoup plus de raccourcis qui permettent de gérer les cadres et les fenêtres, le tout se faisant uniquement au clavier ou à l'aide de la souris.
De plus, beaucoup de fonctions sont accessibles par un (en) système de menu qui évite de retenir trop de raccourcis clavier.
Les (en) coins de l'écran sont actifs dans CLFSWM. Ce qui permet d'avoir un Exposé comme dans Mac OS X en cliquant dans le coin en bas à droite ou un clavier virtuel en cliquant dans le coin en haut à droite ou un terminal à la Quake console en cliquant en haut à gauche, etc.
CLFSWM étant écrit en Common Lisp, le fichier de configuration est lui aussi en Common Lisp. En fait, on peut voir CLFSWM comme un gros fichier de configuration autour de quelques fonctions de la Xlib. Un système de hook est présent mais tout est modifiable via le fichier de configuration, il suffit de regarder le code source et de redéfinir la/les fonction(s) voulue(s).