Artisan Numérique

/cli/terminal/urxvt/ Des onglets dans urxvt

L'un des seuls gros défaut que je trouve encore à urxvt, c'est l'absence d'une gestion efficace des onglets. Il existe bien le greffon tabbed fournit en standard mais outre le fait qu'il soit disons-le assez moche et bien buggé, il manque un peu de souplesse.

Je me suis donc mis à hacker le code de ce greffon pour finalement le ré-écrire en grande partie.

Principe original

Ce nouveau greffon nommé tabs (super original, ça oui :-) est donc à son origine un simple hack du module tabbed. Avec le temps il en garde surtout la partie logique d'origine consistant à utiliser le terminal lancé juste pour afficher la ligne de statut, et de créer par la suite un terminal enfant par onglet.

Chaque terminal enfant vient alors se placer au dessus du terminal principal de sorte ne laisser visible que la ligne des onglets.

Ce plugin reprend aussi certains principes de tabbed_new (une version amélioré de tabbed) dont la colorisation et le renommage manuel des onglets.

Voyons maintenant ce que ce plugin apporte de neuf par rapport à tabbed :

  • Une gestion plus évoluée des couleurs. Tout est paramétrable ou presque.
  • Chaque action (ouverture d'onglet, déplacement, etc) est une commande que l'on peut lier ou pas à un raccourcis clavier.
  • Les onglets peuvent être manuellement renommés.
  • Les onglets sont aussi renommable comme un terminal, par séquence OSC.
  • On peut fermer un onglet.
  • Divers bugs liés à la tricherie de la fenêtre principale ont été corrigés.
  • Si une application dans un onglet attire l'attention par un BELL, c'est remonté à la fenêtre principale et donc au gestionnaire de fenêtre.

Paramétrage

Les raccourcis clavier

Contrairement à tabbed, ce greffon vous permet de choisir le raccourcis qui vous convient pour chacune des actions. Il permet aussi de ne pas associer de raccourcis aux actions qui ne vous intéressent pas.

Comme toujours, cela se paramètre via ~/.Xdefaults :

! Ajout d'un onglet
URxvt.keysym.M-t              : perl:tab-new

! Changement de l'onglet actif
URxvt.keysym.M-Left           : perl:tab-previous
URxvt.keysym.M-Right          : perl:tab-next

! Déplacement de l'onglet actif (ordre)
URxvt.keysym.M-C-Left         : perl:tab-move-left
URxvt.keysym.M-C-Right        : perl:tab-move-right

! Renommage manuel d'un onglet
URxvt.keysym.M-C-r            : perl:tab-rename

! Commande de saut sur le numéro d'un onglet. Ex. Alt-j5 ira sur l'onglet marqué 5:
URxvt.keysym.M-j              : perl:tab-jump

! Suppression d'un onglet
URxvt.keysym.M-C-k            : perl:tab-kill
les raccourcis

Apparence

Les couleurs sont elles aussi modifiables via ~/.Xdefaults, de même que le séparateur entre les onglets.

! Couleur de la barre (hors onglets)
URxvt.tabs.tab-bar-fg        : 17
URxvt.tabs.tab-bar-bg        : 18

! Couleur d'un onglet innactif
URxvt.tabs.tab-fg            : 17
URxvt.tabs.tab-bg            : 18

! Couleur d'un onglet actif
!URxvt.tabs.tab-current-fg    : 23
!URxvt.tabs.tab-current-bg    : 21

! Couleur d'un onglet en urgence
URxvt.tabs.tab-urgent-fg     : 23
URxvt.tabs.tab-urgent-bg     : 13

! Couleur d'un onglet où il se passe quelque chose
URxvt.tabs.tab-activity-fg   : 23
URxvt.tabs.tab-activity-bg   : 13

! Couleur du curseur de renommage
URxvt.tabs.tab-rename-color  : 23

! Couleur du séparateur
URxvt.tabs.tab-divider-color : 2

! Séquence du séparateur. %20 indique un espace. Il peut y avoir plusieurs caractères.
URxvt.tabs.tab-divider        : -

! Position de la barre (0 en haut, 1 en bas)
URxvt.tabs.tab-position      : 1
Présentation des onglets

Séquences

Certaines séquences OSC permettent de modifier la barre d'onglets. La plus classique, celle qui permet d'en changer le titre. C'est la même que celle qui permet de changer le titre d'un terminal en général.

gastonecho -en "\033]2;Un nouveau titre\007"

Il y a aussi une séquence pour créer un nouvel onglet. C'est pratique par exemple pour initialiser un terminal en lançant automatiquement une série d'onglets.

gastonecho -en "\033]777;tab-new;-e;sh;-c;ssh tagazok.fr\007"

Ici on ouvre un onglet qui lance une session ssh sur le serveur tagazok.fr. Il s'agit des mêmes arguments que pour lancer urxvt (ici urxvt -e sh -c ssh tagazok.fr), la seule différence est que chacun est séparé par un ;.

Changelog

Version 1.0

  • Positionnement de la ligne de tabs en haut ou en bas du terminal.
  • Des couleurs spécifiques pour la barre, les onglets sélectionnés, non sélectionnés ainsi que le diviseur et les onglets où il se passe quelque chose (activité).
  • Possibilité de changer le contenu du séparateur d'onglet.
  • Affichage de l'index de l'onglet dans son label pour une sélection rapide à la mode screen (ex. alt-j + numéro).
  • Renommage manuelle un onglet.
  • Renommage d'un onglet par la séquence d'échappement qui change le titre d'un terminal.
  • Tous les raccourcis clavier sont paramétrable via keysym.

Version 1.1

  • Bug sur le focus/clavier réglé.

Version 1.2

  • Bug tabbed sur les touches étendues non gérées réglé.

Version 1.3

  • Suppression d'un onglet.
  • Simplification du code (suppression du proxy de hooks de tabbed)
  • Remonté des BELL (et donc du hint urgent sur la fenêtre principale) pour les onglets non actifs.

Version 1.4

  • Prise en charge des OSC de changement de titres séquence 0/1 (seull le 2 était utilisé pour l'instant).
  • Possibilité d'ouvrir un onglet par séquence OSC.
  • Prise en charge du mode "urgent" avec couleurs associées lorsqu'un Control-G est émis dans l'onglet.

Téléchargement

Ban, à la demande de certain j'ai mis cela sur mon compte github. J'aime pas trop beaucoup l'idée mais bon, faut vivre avec son temps, de temps en temps ;-)

Au passage j'y ai mis tous mes plugins pour urxvt, et donc plus particulièrement celui-là.