Journal WMFS, Window Manager From Scratch

16
11
avr.
2011

WMFS, Window Manager From Scratch

WMFS est un gestionnaire de fenêtre dit tiling. Développé par xorg62 (et quelques utilisateurs du logiciel) en C à l'aide de la XLib, WMFS se distingue des autres tiling window manager sur de nombreux points.

I. Les layouts

La est le point fort de tout tiling WM, les layouts sont les différents modes d'organisations des fenêtres sur votre environnement de travail. En plus des classiques free, max et tile (right, left, bottom, top), on peut utiliser les layouts suivant :

  • Grid : Un simple tableau de NxN fenêtres.
  • Mirror Vertical : Layout développé pour une utilisation plus aisée de gimp, la fenêtre principale est au centre de l'écran et les fenêtres secondaires sont placées à gauche et à droite.
  • Mirror Horizontal : De même que le layout Mirror Vertical sauf que les fenêtres secondaires sont placées au dessus et en dessous de la fenêtre principale.

Remarque: Un nouveau layout est en cours de développement et sera inspiré du traditionnel {v}split de Vim.

Vous connaissez sans doute le layout magnifier dans awesome, qui permet de placer une fenêtre spécifique au dessus des autres qui sont organisées en tile. WMFS s'inspire de se layout en implémentant le above_fc, une option qui permet de placer le client au dessus des autres et cela dans tout layouts.

II. Les tags

Comme beaucoup de WM, WMFS gère les tags (bureaux virtuels), ainsi que le dynamic tagging (ajout/suppression de tags à la volée). Il vous est possible de fusionner plusieurs tags, de définir un layout spécifique aux nouveaux tags, d'échanger deux tags, etc...

III. Selbar / Statusbar / Launcher & Systray

Dans un WM classique (non tiling) il est utile d'avoir une barre de tâches pour avoir une liste des applications ouvertes. Sous WMFS, on pense que le tiling nous permet d'outre-passer ce besoin (on voit tout ce qui est à l'écran, donc pas besoin). Il a cependant été développé une optiojn bien pratique : la selbar * Elle permet d'afficher dans l'infobar de WMFS le titre de la fenêtre ayant le focus. * On définit dans la configuration les événements souris suivants : * L'affichage d'un menu contextuel contenant la liste des clients ouverts (un clic sur l'un d'eux permet de lui donner le focus) * De donner le focus au client suivant (dans la liste des clients) ou précédent.

Vous connaissez peut-être awesome et son immense souplesse vis-à-vis des informations affichées dans les infobars. WMFS implémente à peu près la même chose :

$ wmfs -s [screen number] <message to print in the statusbar>
Example :
$ wmfs -s "hello world"
$ wmfs -s 0 "hello" ; wmfs -s 1 "world"

Créez votre programme/script afin d'afficher le résultat des commandes voulues (trafic réseau, usage disque, lecture mpd, etc...) dans l'infobar. Bien sur, cela n'est pas limité à du texte tel quel. A l'aide de différent format on peut intégrer des images, des couleurs, des progressbar, des graphs, etc...

Remarque: Je développe actuellement une bibliothèque C qui permet d'envoyer le nouveau status à WMFS sans passer par wmfs -s.

En dernier point, WMFS possède également (comme la plupart des autres WM) un launcher (prompt dans l'infobar permettant d’exécuter diverses commandes) et un systray.

IV. Une configuration aisée

La configuration se fait via le ficher ~/.config/wmfs/wmfsrc mais peut-être découpé en de nombreux fichiers (un par section par exemple) grâce à la fonction @include "/path/to/file/to/include".

La syntaxe est extrêmement simple, le parseur a été développé par ksh basé sur la syntaxe de libconfuse mais simplifié :

# Comments start with a '#'

@include "other_file.rc"

[section]
    option  = "valeur"
    option2 = 18.2

    [sous_section] option = true option2 = false [/sous_section]
[/section]

Les espaces ne sont pas important comme vous pouvez le constater. Un fichier de configuration par défaut est fourni dans le dépôt git (ou installé par votre gestionnaire de paquet, ou via make install, dans /etc/xdg/wmfs/wmfsrc).

La configuration permet de configurer les layouts voulus, le nombre de tags voulus et leurs propriétés, les raccourcis clavier et tout ce qui est couleurs, etc...

Si le fichier ~/.config/wmfs/status.sh est présent ET exécutable, alors il sera exécuté par WMFS pour remplir la statusbar.

V. Conclusion

WMFS c'est en premier lieu très léger :

  • 7886 SLOC
  • Un exécutable de 203K

Et en second lieu simple à installer :

$ git clone git://github.com/xorg62/wmfs.git
$ cd wmfs
$ ./configure
$ make
# make install

Je vous invite à regarder ./configure --help pour plus d'infos :)

WMFS c'est convivial, vous pouvez venir sur le salon IRC (#wmfs @ irc.freenode.net) là ou de nombreux utilisateurs vous aiderons à commencer avec WMFS ! C'est un projet actif en continuel développement , selon moi l'essayer c'est l'adopter :)

Voici quelques liens :

  • # une depeche

    Posté par . Évalué à 7.

    mince, ca aurait pu faire une depeche, il n'est pas trop tard ;)

  • # XLib, barre des tâches

    Posté par (page perso) . Évalué à 4.

    Développé par xorg62 (et quelques utilisateurs du logiciel) en C à l'aide de la XLib

    Dommage.

    Dans un WM classique (non tiling) il est utile d'avoir une barre de tâches pour avoir une liste des applications ouvertes. Sous WMFS, on pense que le tiling nous permet d'outre-passer ce besoin (on voit tout ce qui est à l'écran, donc pas besoin).

    Il est pourtant bien pratique de pouvoir réduire des fenêtres.

    • [^] # Re: XLib, barre des tâches

      Posté par . Évalué à 5.

      Malgré ton pertinentage, je prends le risque de te signaler que ton commentaire est complètement à côté de la plaque… comment te dire… c’est comme si tu demandais pourquoi une flûte n’a pas de cordes, ou un clou pas de pas de vis.

      Dans un twm, c’est juste inutile. Étant donné qu’aucune fenêtre n’en cache une autre il n’y a pas besoin de réduire une fenêtre. Il suffit d’utiliser plusieurs bureaux virtuels, onglet ou pile (tout dépend des fonctionnalités du twm choisi).

      • [^] # Re: XLib, barre des tâches

        Posté par (page perso) . Évalué à 5.

        Malgré ton pertinentage, je prends le risque de te signaler que ton commentaire est complètement à côté de la plaque… comment te dire… c’est comme si tu demandais pourquoi une flûte n’a pas de cordes, ou un clou pas de pas de vis.

        Dans ce cas, il va falloir m'expliquer pourquoi je trouve pratique, sous Awesome, de réduire des fenêtres. Exemple typique : j'ouvre un terminal, j'autojumpe dans mon répertoire d'images, je lance Gimp. Et je réduis le terminal en question.

        Dans un twm, c’est juste inutile. Étant donné qu’aucune fenêtre n’en cache une autre il n’y a pas besoin de réduire une fenêtre. Il suffit d’utiliser plusieurs bureaux virtuels, onglet ou pile (tout dépend des fonctionnalités du twm choisi).

        Bureaux virtuels : non, on y perd la position de le fenêtre. Onglet ou pile : oui, c'est une solution élégante, mais pas tout à fait équivalente.

        • [^] # Re: XLib, barre des tâches

          Posté par . Évalué à 3.

          J’avais pas pensé au fait qu’on perde la position avec les bureaux virtuels. Par contre onglet ou pile me semblent plus adaptés, je pensais naïvement que les gestionnaires implémentaient au moins un (ce qui revient, au final, à avoir une barre de tâche à chaque espace de ton écran que tu as décidé de mettre en pile/onglet). Comme pour moi cette solution me semble bien plus utile, ça vire de facto la nécessité de réduire les fenêtres.

          « je lance Gimp. Et je réduis le terminal en question. » Est-ce que ça signifie que Awesome garde le focus et l’affichage sur le terminal ? J’avoue que ça me plairait, à l’heure actuelle c’est ce qui me gêne le plus dans i3 : le focus et l’affichage change de main et il m’affiche automatiquement la dernière fenêtre ouverte. En l’occurence avec le mode « onglet » de i3, ça m’ouvre direct Gimp et le terminal se retrouve en onglet non visible : dans le cas que tu présentes ça fait direct ce que tu veux, mais perso. je trouve ça gonflant car un logiciel comme Gimp met quelques secondes à s’ouvrir, suffisantes pour être passé à autre chose, et donc pester quand il s’affiche enfin et prend la main sur ce que je suis en train de faire.

          • [^] # Re: XLib, barre des tâches

            Posté par (page perso) . Évalué à 2.

            « je lance Gimp. Et je réduis le terminal en question. » Est-ce que ça signifie que Awesome garde le focus et l’affichage sur le terminal ?

            Non, ce serait chouette en effet, mais non.

          • [^] # Re: XLib, barre des tâches

            Posté par . Évalué à 3.

            Est-ce que ça signifie que Awesome garde le focus et l’affichage sur le terminal ?

            Pas par défaut mais ça se configure

            awful.client.setslave(c)
            
        • [^] # Re: XLib, barre des tâches

          Posté par (page perso) . Évalué à 2.

          et comment tu fais pour reduire une fenetre dans awesome ?

    • [^] # Re: XLib, barre des tâches

      Posté par (page perso) . Évalué à 10.

      Dommage.

      Je ne vois pas trop l'interet d'investir du temps dans une techno next-gen qui est déjà obsoletifiée par wayland. Au moins des WM en xlib on sait en faire, on trouve facilement des exemples et ils marchent très bien.

      • [^] # Re: XLib, barre des tâches

        Posté par . Évalué à 10.

        Je ne vois pas trop l'interet d'investir du temps dans une techno next-gen qui est déjà obsoletifiée par wayland.

        XCB est disponible maintenant, Wayland est très, très loin d'être prêt..

        Et ça c'est très important: qui se souvient de Berlin/Fresco, Y et les autres?
        Wayland n'est pas (et de loin!) la première tentative pour remplacer X..

        La deuxième partie de l'explication me paraît plus raisonnable, je note quand même
        que cela contredit grandement le nom du WM 'from scratch': je propose donc de le renommer en 'Yet another copycat WM'.

  • # Dispositions

    Posté par (page perso) . Évalué à 4.

    Grid : Un simple tableau de NxN fenêtres.

    Et si le nombre de fenêtres n'est pas un carré parfait ?

    Mirror Vertical : Layout développé pour une utilisation plus aisée de gimp, la fenêtre principale est au centre de l'écran et les fenêtres secondaires sont placées à gauche et à droite.

    Puisqu'on parle de Gimp, lorsqu'on a plus d'une image d'ouverte, à part celle active, les autres s'entassent en petit sur un des côtés ? Qu'est-ce qui détermine si les fenêtres sont à gauche ou à droite ?

    D'une façon générale, il serait bon de décrire les algorithmes des dispositions de façon complète, pour qu'on puisse comprendre exactement ce qu'ils font.

    • [^] # Re: Dispositions

      Posté par (page perso) . Évalué à 2.

      Si c'est pas un carré parfait alors il y a des colones du layout qui contiendront moins de fenêtres que les autres.

      Si tu as plusieurs images ouvertes alors il te faudra jouer avec nmaster (avoir plusieurs fenêtres principales). Après c'est à toi de placer tes fenêtres au bon endroit si elle ne sont pas mise selon tes désirs.

      Personnellement je n'utilise pas ce layout :P

    • [^] # Re: Dispositions

      Posté par (page perso) . Évalué à 1.

      Les layouts et le placement automatiques des fenêtres c'est cool mais … en fait non. Là par exemple j'ai 8 fenêtres (vim, htop, l'interpréteur ocaml plus quelques consoles pour lancer un programme qui ouvre lui-même sa propre fenêtre) et seulement 3 d'affichées à l'écran.

      J'adore le tilling, mais par contre je veux pouvoir placer moi-même mes fenêtres et seulement celle que je veux. Malheureusement le nombre de tilling manager avec un mode manuel ne dépasse pas 4 (i3, ratpoison, musca, et scrotwm il me semble).

      Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

      • [^] # Re: Dispositions

        Posté par (page perso) . Évalué à 3.

        Qu'appelles-tu un mode manuel ?

        • [^] # Re: Dispositions

          Posté par (page perso) . Évalué à 1.

          Pouvoir découper moi même mon écran verticalement et horizontalement, que ça ne se fasse pas tout seul dès que j'ouvre une nouvelle fenêtre.

          Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

          • [^] # Re: Dispositions

            Posté par (page perso) . Évalué à 2.

            Tu parles du futur layout inspiré du split/vsplit de Vim dont j'ai parlé dans la news la en fait :)

            • [^] # Re: Dispositions

              Posté par (page perso) . Évalué à 1.

              Autant pour moi, je n'avais pas lu assez attentivement le journal. WMFS devient tout de suite beaucoup plus intéressant du coup.

              Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

      • [^] # Re: Dispositions

        Posté par . Évalué à 1.

        Tu peux ajouter compiz, qui avec l'extension grille permet de placer tes fenêtres sur un rectangle (au choix) 22 ou 32, et d'ajouter les raccourcis claviers qui vont bien. Surement pas aussi puissant que les autres mais très appréciable.

      • [^] # Re: Dispositions

        Posté par (page perso) . Évalué à 2.

        Malheureusement le nombre de tilling manager avec un mode manuel ne dépasse pas 4 (i3, ratpoison, musca, et scrotwm il me semble).

        Il y a aussi Ion (et Notion j'imagine) dans cette catégorie.

        pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

        • [^] # Re: Dispositions

          Posté par (page perso) . Évalué à 1.

          j'ai vaguement regardé notion, ça ne m'a pas parue super intuitif (j'ai essayé le tutoriel).

          Sinon dans mon premier message il fallait bien sûr lire stumpwm et non scrotwm.

          Il existe deux catégories de gens : ceux qui divisent les gens en deux catégories et les autres.

  • # Captures d'écran

    Posté par (page perso) . Évalué à 6.

    C'est là un logiciel typiquement graphique, il serait bon d'avoir quelques captures d'écran. Pas la peine de faire des captures d'un vrai écran de haute résolution, mieux vaut utiliser un (Xephyr)[http://en.wikipedia.org/wiki/Xephyr] :

    $ startx /usr/bin/wmfs -- /usr/bin/Xephyr -screen 600x600 :1
    $ import /tmp/capture.png
    
  • # Pile

    Posté par (page perso) . Évalué à 3.

    Pas de gestion de pile à la Wmii ?

    • [^] # Re: Pile

      Posté par . Évalué à 1.

      Et aussi, j'arrive pas à déterminer si il gère les "keychain" (les combinaisons de touches à la emacs. Du genre C-x C-c M-x butterfly). J'ai du mal à lâcher ratpoison à cause de ça.

      Ça et, mais là j'avoue j'ai pas cherché, les font Xft ?

      • [^] # Re: Pile

        Posté par (page perso) . Évalué à 1.

        Les fonts Xft sont gérées. Pour les keychains non ce n'est pas géré, tu peux juste associer une touche à un ou plusieurs modifiers (genre Ctrl + Alt + Q = client_kill).

  • # 7886 SLOC

    Posté par (page perso) . Évalué à 4.

    WMFS c'est en premier lieu très léger : 7886 SLOC

    Le nombre de lignes de code est-il une métrique à laquelle les développeurs de WMFS attachent de l’importance, à la manière des développeurs de suckless.org (wmii) qui mettent un point d’honneur à ne pas dépasser 10 000 lignes ? Il ne semble pas en être fait mention sur le site.

    Je me méfie un peu de ceux qui cherchent à tout prix à réduire la taille de leur code. Small is beautiful, certes, mais à condition que ne ce soit pas au détriment de la lisibilité du code, sinon on gagne quoi ?

    • [^] # Re: 7886 SLOC

      Posté par (page perso) . Évalué à 3.

      Non, on se fou totalement du nombre de ligne de code. Mais même sans y attacher d'importance, on voit que WMFS reste petit au niveau des sources (donc facilement abordable pour les développeurs!) et ne perd pas en lisibilité/fonctionnalités. :)

  • # Capture d'écran

    Posté par . Évalué à 3.

    Capture d'écran ou c'est du vent

  • # Pourquoi ?

    Posté par (page perso) . Évalué à 2.

    C'est pas un troll mais une vraie question.
    En lisant le journal j'ai plus ou moins l'impression de lire une description d'awesome version 2.x

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.