Deblan blog

[Astuce] i3wm : traverser les workspaces

Je suis devenu un vrai fan du gestionnaire de fenêtres i3wm et pour cause, il est ultra simple à scripter :)

Jusqu'à aujourd'hui une fonctionnalité majeure me manquait : pouvoir naviguer vers le workspace qui précède ou qui suit celui courant. On peut switcher entre les deux derniers workspaces qui ont été focused ou se déplacer directement vers un workspace (pour autant qu'un mapping soit prévu).

Pour arriver à combler ce manque, j'ai utilisé i3-msg qui permet de récupérer des informations sur i3wm et de lui donner des instructions. Je script en php car il faut lire du json...et en shell c'est compliqué !

L'algo est simple :

  • je récupère les workspaces avec : i3-msg -t get_workspaces
  • je les ordonne par ordre alphabétique (c'est comme ça que i3 les affiche)
  • je récupère le workspace courant
  • suivant ce qu'on demande, je retourne le workspace qui précède ou suit le workspace courant
  • je demande à i3 de switcher vers le workspace via : i3-msg 'workspace "le nom du workspace cible"'

Le script est disponible ici. Placez-le où vous voulez et renseignez un mapping tel que celui-ci (dans ~/.i3/config) :

bindsym $mod+p exec ~/bin/i3_switch_workspace.php previous
bindsym $mod+n exec ~/bin/i3_switch_workspace.php next

Note : dans ce mapping, mes raccourcis sont window+P pour aller au workspace précédant et window+N pour aller au suivant. Mon script se trouve dans ~/bin/ et le fichier est nommé i3_switch_workspace.php.

N'oubliez pas de rendre le script exécutable (chmod +x).


  • Hedy
    • ,
    • Merci pour le partage :)
      J'ai adopté i3wm depuis 10 jours et j'en suis pleinement content !
      Une petite chose me manque encore : la possibilité, au démarrage, d'agencer précisément les applications comme j'ai l'habitude de les utiliser sur chaque workspace.
      A chaque fois je dois les réagencer à la main...
  • Simon
    • ,
    • Tu as deux façon de procéder :

      - tu peux scripter pour faire à la suite des : « i3-msg workspace "foo"; /path/to/mon_appli » mais ça implique que l'appli s'ouvre rapidement car c'est asynchrone

      - utiliser un soft tel que "xdotool" qui te permet de générer des événements clavier et souris. Typiquement, je prépare mon premier bureau avec un script qui me compose mon fenêtrage : http://dedi.geneweb.fr/~simon/videos/xdotool.ogv
      Le code est le suivant : http://wall.deblan.fr/x157d/bash/1/
  • Hedy
    • ,
    • Ah génial !
      Je vais décortiquer ça et me l'adapter :)
      Par contre, ton wall, c'est du fait maison ou c'est un script dispo qque part ?
  • bob
    • ,
    • Bonsoir,
      Et l'utilisationde :
      bindsym $mod+q workspace prev_on_output
      bindsym $mod+s workspace next_on_output
      ne correspond pas ?
  • gp4004
    • ,
    • Bonsoir,

      j'utilise
      bindsym $mod+Left workspace prev
      bindsym $mod+Right workspace next

      qui semble faire ce que tu souhaite
  • Simon
    • ,
    • omg, j'étais passé à coté dans la doc >< Merci bien !
  • Ulhume
    • ,
    • Un peu comme Hedy j'ai pas mal de problématique de placement d'applications. Pour cause, sans vouloir jouer l'escalade, j'ai 3 écrans et 6 workspaces par écran (y'a une grosse logique là dedans, c'est pas juste pour faire riche ;-).

      Du coup chaque workspace de chaque écran a un rôle bien précis et chaque application a une place bien déterminée.

      J'avais dabord utilisé le très bon wmfs qui n'a pas tenu la demande. Ensuite i3 qui est beaucoup plus paramétrable et scriptable (et stable ;-) mais cela reste limité. Perso j'ai vraiment trouvé mon bonheur avec Awesome qui lui est ni paramétrable, si scriptable, mais simplement programmable. Du coup on peut tout faire sans réellement de limite. Il y a une logique de signal qui permet de détecter l'arriver des applications et de les placer très précisement comme de leur ajouter des fonctions (barre de titre, layout, etc.). Bon, tout n'est pas rose ceci dit, il faut se frapper un drole de langage, Lua pour ne pas le nommer, qui est franchement biscournu. Mais ceci mis à part Awesome reste un excellent choix pour qui veut un gestionnaire de paramètres sans limites.

      Bon maintenant je suis un peu terrible aussi, i3 reste excellent hein :)

      PS: ton moteur de commentaire n'aime vraiment pas noscript :p
  • Simon
    • ,
    • Avant d'arriver à i3wm, j'ai rapidement essayé plusieurs tilings mais je ne me suis jamais dis "ah ouai c'est carrément cool". Je suis resté un très long moment sur fvwm-crystal qui a les avantages d'un gestionnaire de bureau presque classique et il sait faire de l'agencement de fenêtres presque aussi bien qu'un tiling. i3wm a été un vrai coup de coeur quand je l'ai installé. Je n'ai jamais accroché sur le principe de layout tels que ceux qu'on rencontre dans awesome. Qui plus est, au moment ou j'avais besoin de changer (fvwm-crystal a des soucis de stabilité), passer du temps sur de la configuration compliquée (ou pas très intuitive) me n'intéressait pas : le manque de temps et de motivation pour en trouver…donc lua c'était mort en fait :p

      Pour noscript : http://www.deblan.tv/chercher?query=robot (les deux premiers articles) ^^
  • Ulhume
    • ,
    • Je dirais pas le contraire pour i3, j'ai beaucoup aimé aussi et c'est clairement un excellent choix. Mais bon, je reste un développeur et je n'aime pas les limites ;p En plus pour complexifier encore ce que je disais de mon bureau, j'ai le même environnement qui doit fonctionner sur 3, 2 et 1 écran selon mes postes de travail, avec donc un agencement des tags en fonction. En somme, i3 a aussi tapé dans ses limites. Sous Awesome, pour donner une idée, j'ai près de 500 lignes de Lua pour répondre en profondeur à mes besoins.

      Maitenant c'est vrai que j'esaye de rester gentil avec LUA mais si je dois être honnête, ce langage me file un peu des urticaires :) Pourtant j'en ai bouffé pas mal dans ma vie dans langages différents mais celui là, on dirait qu'il adopte des syntaxe "différentes" (pour rester poli ;-) juste histoire de dire que c'est différent. Exemple typique, en Lua, "différent" se dit ~=, c'est sur que c'est vachement mieux que les "classique" != ou <> :-)

      Peut-être qu'un jour je trouverais le temps de tester un autre WM, Qtiles, qui lui se travaille en python.

      Sinon pour les captchas, perso j'ai fini par arrêter la course à l'échalotte et j'ai depuis deux ans opté pour un captcha que je nomme fièrement "Stupid Captcha". J'avais commençé par une question dans cette esprit ("Quel est la couleur du cheval blanc d'Henry IV". Et le spam a disparu du jour au lendemain. Aujourd'hui je déploie son complexe cette approche chez mes clients qui s'éclattent à trouver des questions plus crétines les unes que les autres et so far, aucun d'entre eux n'a pris de spam (et il y a les echos dans le tas...).

      Après reste les spams générés par les fermes d'humain mais là, rien ne peut l'empêcher...
  • Ulhume
    • ,
    • PS: j'espère que je ne donne pas trop l'impression de critiquer à la mode "moi je", car j'aime bien ce que tu écris, ça me change des click-click pan-pan qui peuplent de plus en plus la blogoshère libre :)

Ajouter un commentaire

Vous pouvez utiliser du markdown.Afficher l'aide.