Yoran 6 février, 2012 - 01:58 urxvt X11 console
Installer et paramétrer urxvt

Les application en mode texte ne sont pas une anecdote venant d'un lointain passé. Contrairement aux idées reçues, ces dernières ont évoluées pour coller aux usages d'aujourd'hui tout en restant plus stable, plus légères, plus spécialisées et plus configurables que leurs petites sœurs graphiques.

Mais pour que ces applications prennent leur pleine dimension, il leur faut un hébergement digne de ce nom, un terminal virtuel tout aussi rapide, léger, stable et efficace. Utilisé à peu prés partout, un tel terminal est un peu la pierre angulaire du bureau minimaliste.

: Nous allons donc voir comment paramétrer ce que je considère comme le plus performant des terminaux, rxvt-unicode aka urxvt.

Pourquoi urxvt ?

La question se pose légitimement car finalement rien ne ressemble plus à une console qu'une autre console, et quel bureau ne dispose pas aujourd'hui de son propre émulateur de terminal ? Et s'il s'agit pour vous juste de lancer quelques commandes de temps en temps, autant en effet se contenter de ce qui existe dans votre environnement.

En revanche, si vous comptez construire un bureau minimaliste pour utiliser des applications texte (vim, mutt, newsbeuter, irssi, etc.), l'efficacité de la console est aussi fondamentale que le processeur graphique pour un joueur (pour moi, tous les GPU se valent ;-).

Dans cette idée j'avais il y a (déjà) deux ans fait quelques tests pour objectiver l'efficacité des différents émulateurs de terminal. Les résultats avaient alors positionné loin devant urxvt comme l'émulateur présentant le meilleur rapport légèreté/performance/fonctionnalités :

  • L'affichage le plus rapide, même en scroll et sur des applications fortement colorisées.
  • Une empreinte mémoire très faible (comparée aux terminaux tels Gnome Terminal ou Konsole).
  • Ultra-stable. C'est bien simple, j'utilise urxvt pour le moins intensivement et en deux ans je n'ai jamais eu le moindre crash (ce qui est loin d'être le cas de Gnome Terminal ou Konsole).
  • Totalement paramétrable (gestion du clavier, couleurs, comportement, etc.)
  • Prise en charge des polices TTF.
  • Extensibilité par des greffons en Perl. Il en existe beaucoup à travers le net répondant à de nombreux besoins.
  • Prise en charge totale de l'encodage UTF8 (comme son nom l'indique ;-).

Autant de chose qui font pour moi d'urxvt, le meilleur terminal, et de loin.

Installation

Par les paquets

Il y a de très fortes chances qu'urxvt fasse partie des paquets standards de n'importe quelle distribution. Pour la deb, le paquet s'appelle rxvt-unicode et s'installe donc par :

##apt-get install rxvt-unicode
installation d'urxvt

Par les sources

Ce que j'apprécie le plus avec mon bureau minimaliste consiste en la simplicité et la rapidité de compilation de ses applications. Je n'ai jamais à attendre les paquets pour disposer des dernières versions, du patch "qui va bien" ou même de modifier le code (généralement du C de base relativement lisible).

Pour compiler urxvt, il nous faudra soit un tarball des dernières sources, soit la récupération d'un copie du dépôt CVS. Une fois les sources récupérées, un ./configure --help nous donne la liste des options possibles. Vous pouvez aussi modifier le fichier src/features.h qui contient une liste d'option statiques à commenter/décommenter.

Pour ma part, j'utilise les options suivantes :

gastoncd rxvt-unicode
gaston./configure --prefix=/usr --disable-codsets --disable-pixbuf --disable-transparency --disable-fading --disable-next-scroll --disable-xterm-scroll --disable-rxvt-scroll --disable-swapscreen --disable-iso14755 --enable-256-color
gastonmake -j 4
gastonsudo make install
Compilation d'urxvt

Et c'est tout, avec cela vous disposez d'une console fonctionnelle en 256 couleurs. J'y ai désactivé la gestion de la transparence car j'aime bien mes yeux, et les scrollbars car je ne les utilise pas. A vous de faire votre mouture.

Terminfo

Sous ce nom un peu étrange réside un concept qui remonte à la nuit du temps UNIX (qui commence le 1 Janvier 1970, rappelons le ;-). A cette époque, les terminaux étaient physiques. Une configuration "classique", dite "centralisée", consistait en un serveur unique duquel partait un faisceau de liaisons série (remplacé plus tard par les LAN), des postes de travail dont la seule intelligence était d'interpréter les ordres du serveur pour l'affichage et encoder en retour ce qui était tapé au clavier. Si vous y réfléchissez un peu, vous verrez là le cocasse du "modernisme" des applications web. Car finalement qu'est-ce qu'une application web si ce n'est un vieux système centralisé avec un terminal moderne appelé "navigateur"...

Bien évidemment, même si des standards ce sont imposés dans leur manière d'échanger avec le serveur (vt100, ANSI, etc), chaque terminal avait ses propres exotismes de causerie. Ainsi sont nés les termcap (TERMinal CAPabilities) qui ne sont rien d'autre que des fichiers permettant au serveur de savoir qu'envoyer pour effacer l'écran distant ou encore comprendre que telle séquence de code correspond à la touche Flèche Haut. Les termcaps, qui sont à un moment devenus des terminfo, forment donc une base de données des capacités de chaque terminal. Et les consoles virtuelles, comme urxvt, n'échappent pas à la règle.

Lorsqu'une application console se lance, et qu'elle est codée proprement, la première chose qu'elle fait est récupérer le terminfo qui va bien en fonction de la console utilisée. Pour cela elle s'aide de la variable d'environnement $TERM qui contient toujours la référence du terminal dans la base terminfo. Pour les terminaux physiques il fallait obligatoirement mettre la bonne valeur à cette variable dans sont ~/.bashrc. Les terminaux virtuels règlent généralement eux-mêmes cette variable au mieux de leurs capacités.

Ainsi lorsque vous lancez urxvt, et que vous tapez la commande echo $TERM, vous devez obtenir quelque chose comme rxvt-unicode ou encore rxvt-unicode-256color. Si vous obtenez autre chose, comme xterm ce n'est pas très bon car les codes ne sont pas les mêmes entre ces deux terminaux. Vérifiez alors que vous n'avez pas une ressource URxvt.termName qui traine dans votre ~/.Xdefault. Si oui, enlevez la et relancez urxvt pour voir ce que cela donne.

Ceci fait, vous pouvez obtenir la liste des capacité du terminal par la commande infocmp.

gastonecho $TERM
rxvt-unicode-256color
gastoninfocmp
# Reconstructed via infocmp from file: /usr/share/terminfo/r/rxvt-unicode-256color
rxvt-unicode-256color|rxvt-unicode terminal with 256 colors (X Window System),
am, bce, bw, ccc, eo, hs, km, mc5i, mir, msgr, npc, xenl, xon,
btns#5, colors#256, cols#80, it#8, lines#24, lm#0, ncv#0,
pairs#32767,
(...)
kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
(...)
acsc=+C\,D-A.B0E``aaffgghFiGjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\E(0%e\E(B%;,
sgr0=\E[m\E(B, sitm=\E[3m, smacs=\E(0, smam=\E[?7h,
smcup=\E[?1049h, smir=\E[4h, smkx=\E=, smso=\E[7m,
smul=\E[4m, tbc=\E[3g, tsl=\E]2;, u6=\E[%i%d;%dR, u7=\E[6n,
u8=\E[?1;2c, u9=\E[c, vpa=\E[%i%p1%dd,
capacités du terminal urxvt patché pour les 256 couleurs

Ici nous voyons par exemple que le termcap est en 256 couleurs (logique si on a $TERM=rxvt-unicode-256color), que pour mettre en gras, il faut que le serveur envoie la commande \E[1m et que la touche F10 correspond au code \E[21m

Alors à quoi cela sert de savoir tout cela me direz-vous ? Et bien tout simplement à arrêter de faire n'importe quoi comme je le vois sur 99% des tutos sur le net traitant du thème "comment faire marcher ma touche Home" (un exemple). Avant d'aller taper dans la définition des touches du terminal (voir plus loin), de hacker inputrc, ou que sais-je, commencez par vérifier 1/ que votre variable $TERM représente bien le terminal que vous utiliser, 2/ que la commande infocmp renvoie bien un résultat 3/ que l'application qui pose problème (ex. VIM) prend bien en compte $TERM et les codes donnés par infocmp. Après seulement il sera temps d'aller chercher ailleurs..

Pour vim, vous pouvez valider le dernier point en utilisent les commandes :set term et :set termcap

Les ressources de X

Pour son paramétrage, urxvt utilise le fichier de ressource X. Ce fichier se trouve dans votre dossier (à créer s'il n'existe pas encore) sous le nom ~/.Xdefaults ou ~/.Xresources (le premier nom est semble y il déprécié en faveur du second, mais les deux fonctionnent).

A l'origine toutes les applications X utilisaient ce fichier pour y puiser leur paramétrage. Aujourd'hui son usage est bien plus restreint et permet essentiellement de gérer l'économiseur d'écran (xscreensaver), le thème du curseur, les réglages de police de caractère (dpi, antialiasing, hinting, etc.) et les applications qui le respecte encore telles qu'urxvt.

Pour comprendre la suite il est nécessaire de s'arrêter sur les notions de classes et de nom des applications X. Une classe est une valeur définissant le type d'application, ou le type de contrôle (bouton, menu, etc) au sein de l'application. Généralement une classe commence par une majuscule. Par exemple la classe d'IceWeasel est IceWeasel.

Le nom (ou instance) est lui spécifique à l'application. Le nom d'Iceweasel est ainsi en réalité Navigator (Une trace du lointain héritage de FireFox, petit fiston du célèbre Netscape Navigator). Pour urxvt, la classe de l'application est URxvt (notez les deux majuscules) et son nom est urxvt (tout en minuscules).

Petite astuce, un moyen simple de connaître la classe et l'instance de n'importe quelle application est donné par la commande xprop. Lancez-la dans une console et le curseur de la souris se transforme en croix vous permettant de pointer une application. La commande affiche alors un tas d'information dont une ligne WM_CLASS indiquant en première valeur l'instance, et en seconde la classe.

Ces deux notions vont nous servir à remplir notre fichier ~/.Xdefaults avec des lignes de la forme :

nomAppli.ClasseAppli.(..).ClasseMonWidget.ressourceX=valeurY
Définition d'une ressource

Cela se lit : donne la valeur "Y" à la ressource "X" du contrôle de classe "MonWidget", bla bla, contenu dans l'application de classe "Appli" et de nom "appli".

Dans la pratique, il sera bien rare d'avoir à utiliser la classe des contrôles. Cela se simplifiera donc sous la forme :

nomAppli.ClasseAppli.ressourceX=valeurY

Pour simplifier encore, il est possible d'omettre le nom, le ressource portera donc sur toutes les applications d'une même classe mais vu que cette classe est généralement unique par application, le risque est limité. De même il est possible de ne mettre que le nom et d'omettre la classe. Enfin vous pouvez aussi utiliser le séparateur * à la place de .. A*B signifie "quel que soit le chemin entre A et B". Cela remplacera donc aussi bien A.E.B que A.F.B.

En résumé, pour l'application urxvt, urxvt.x, URxvt.x, urxvt*x et URxvt*x auront le même résultat.

Dernières petites précisions sur le fichier ~/.Xdefaults, les commentaires s'y notent par un ! en début de ligne. Enfin il est possible d'être propre et organisé en découpant ce fichier en plusieurs petits fichier que l'on appellera par la commande #include "chemin/vers/fichier".

Exemple d'organisation, créer un dossier ~/.xdefaults et y mettre un main.rc. Puis dans le fichier ~/.Xdefaults on ne mettra que :

#include ".xdefaults/main.rc"
un Xdefault générique

Ainsi tout sera rangé au même endroit et vous pourrez dans main.rc inclure d'autres fichiers (ex. color.rc, urxvt.rc, etc.).

Apparence du terminal

Police et position

Passons maintenant à la pratique en commençant par fixer la taille par défaut de la console. Cette possibilité est offerte par la ressource geometry=largeurxhauteur+/-positionX+/-positionY qui est présente pour beaucoup d'application X. Mais c'est plus un usage qu'une norme à part entière. Ainsi pour urxvt, largeur et hauteur ne sont pas exprimées en pixels, mais en caractères (ce qui est assez logique vu l'usage). En revanche la position (optionnelle) est elle fixée en pixel. Le + et le - indiquent des positions relatives aux bords gauche ou droit (ou haut et bas pour la position Y) de l'écran.

URxvt.geometry: 74x27
Définition de la géométrie du terminal

Ici nous ne définissons pas de position, juste la taille d'un nouveau terminal (74 caractères de large sur 27 de haut). Mais pour que cela ait du sens, il faut aussi définir les polices utilisées.

URxvt.font: xft:DejaVu Sans Mono:size=10
URxvt.boldFont: xft:DejaVu Sans Mono:size=10
Définition des polices du terminal
ec

Nous utilisons une police TrueType DejaVu. J'en ai testé énormément (j'en ai même acheté) mais cela reste pour moi celle qui allie le mieux compacité et lisibilité. Mais il s'agit là d'un point de vue que je ne défendrais pas. Faites vos tests et utilisez celle qui vous convient le mieux, le choix ne manque pas (Terminus, consolas, monaco, inconsolas, oloron program, etc.).

Barres de défilement

Urxvt offre de nombreuses option permettant de spécifier le type de barre qui vous convient. Personnellement j'aime bien l'option "pas de barre", je n'en vois en effet pas vraiment l'intérêt. Mais pour ceux qui y tiennent cela donne quelque chose comme cela :

URxvt*saveLines: 10000
URxvt*scrollBar: true
URxvt*scrollBar_right: true
URxvt*scrollColor: #c2dd5a
URxvt*scrollBar_floating: true
URxvt*scrollstyle: plain
Configuration de la barre de défilement

Le point intéressant ici, outre l'esthétique, est le nombre de lignes qu'urxvt va sauvegarder dans son historique (ici, 10000). Adaptez cette valeur à votre usage pour ne pas dépenser exagérément les ressources. Une telle valeur est utile pour un terminal qui afficherait des traces, beaucoup moins pour celui utilisé avec mutt ou encore irssi qui utilise son propre buffer.

Enfin, notez que pour se balader dans l'historique, vous pouvez soit utiliser la roulette, soit simplement le clavier par Ctrl-PageUp et Ctrl-PageDown. De même vous pouvez chercher dans l'historique par la combinaison Alt-S (vous pouvez changer cela par la ressource searchable-scrollback).

Fond et transparence

Commençons par la base utile, définir le fond et la couleur du texte de la console. L'un et l'autre sont des couleurs par défaut. Elle sont utilisée si l'application ne spécifie rien qui les contredise. À ne pas confondre donc avec les couleurs que nous allons voir plus loin.

Urxvt utilise entre autre la même notation que le web pour les couleurs, cela nous donne :

URxvt*foreground: #f2f2f2
URxvt*background: #101010
Définition des couleurs du fond et du texte par défaut

Ça c'est pour la versions de base. Il est bien évidemment possible d'aller plus loin, notamment en jouant sur une image de fond qui peut être une image fixe (via la ressource backgroundPixmap et une image au format XPM), le fond d'écran de votre bureau via une fausse transparence, et enfin tout ce qui se trouve sous le terminal par la vraie transparence.

D'une manière générale, le principe d'une image de fond pour une console n'est pas forcement à éliminer au nom de la visibilité. En effet, l'œil est habitué à travailler sur des surfaces naturellement texturées même très légèrement. Personnellement j'utilise donc une image de fond s'inspirant de ce principe (un métal très légèrement brossé) de sorte à mieux "accrocher" le regard. Et j'ai constaté à l'usage que mes yeux fatiguaient moins sur un tel fond que sur un fond lisse sur lequel l'œil va "glisser". Maintenant ceux qui utilisent la transparence pour faire apparaître un fond d'écran colorée à travers leur console... Tout est histoire de gouts...

Commençons par la fausse transparence qui doit fonctionner dans tous les cas.

URxvt.inheritPixmap: true
URxvt.tintColor: #FF0000
URxvt.shading:110
Utilisation d'une fausse transparence

La première ressource indique à urxvt qu'il doit recopier la fond du bureau pour en faire son fond de console. Le second réglage permet de coloriser le fond. Dans le cas présent, j'applique un vilain rouge bien gore pour l'exemple. Notez que l'intensité de la couleur agit comme modificateur du niveau de transparence (ex. #800000 donnera un fond peu transparent rouge). Enfin le dernier paramètre agit sur la brillance de l'image. Une valeur entre 0 et 100 va assombrir. Entre 100 et 200 elle va l'éclaircir.

L'autre transparence disponible (la vraie) est réservée à ceux qui utilise un compositeur de fenêtre.

URxvt.depth: 32
URxvt.background: rgba:0000/0000/0000/dddd
Utilisation de la vraie transparence

Dans ce cas nous indiquons à urxvt d'utiliser une profondeur de pixel de 32bits (24 bits pour stocker les composantes RGB et 8 de plus pour la transparence) et nous indiquons un fond noir (le triplet de 0000) assorti d'une transparence (dd, la transparence allant de 0 à ff).

Si vous souhaitez utiliser un compositeur de fenêtres léger vous pouvez essayer Cairo Composite Manager.

Gestion des couleurs

Mode 8/16 couleurs

Sorti des valeurs par défaut, urxvt dispose de 3 modèles de couleur : 8/16, 88 et 256 couleurs. Pour commencer par le premier mode, il s'agit en réalité du mode classique en 8 couleurs doublé d'une triche pour l'augmenter à 16 couleurs.

En effet la séquence permettant de choisir couleur de texte et fond est respectivement de la forme ^[[3xm et ^[[4xm. x représente ici une valeur sur 1 digit allant de 0 à 7 (index de la couleur) ou 9 (retour à la couleur par défaut). En somme nous sommes un peu limité de l'indexation... Il y a bien le 8 de libre mais c'est un peu "faible" comme extension ;-).

L'astuce pour passer à 16 couleurs consiste à revoir l'interprétation de l'attribut 'gras' (de séquence ANSI ^[[1m). Cet attribut indique normalement au terminal que le caractère qui suit est gras, mais indique aussi qu'il est en surbrillance. Le terminal va donc jouer sur cette ambigüité pour utiliser 8 autres couleurs "surbrillantes". Ainsi le "rouge" devient "rouge brillant", ce qui n'aurait que peut d'intérêt si les terminaux ne permettaient pas en outre de redéfinir les 16 couleurs de sorte à ce que ce "rouge brillant" soit finalement "vert pomme"... Ce qui nous donne pour une version Tango de la palette:

URxvt*color0: #101010
URxvt*color1: #f13a21
URxvt*color2: #93f91d
URxvt*color3: #ffd00a
URxvt*color4: #004f9e
URxvt*color5: #ec0048
URxvt*color6: #2aa7e7
URxvt*color7: #f2f2f2
URxvt*color8: #1d202f
URxvt*color9: #ff361e
URxvt*color10: #ffc005
URxvt*color11: #93ff00
URxvt*color12: #0071ff
URxvt*color13: #ef0051
URxvt*color14: #4bb8fd
URxvt*color15: #a020f0
Paramétrage de la palette de couleurs

On dispose ainsi bien de 16 couleurs distinctes... Mais ce n'est pas sans "quelques" problèmes :

  1. Le mode gras/brillant n'existant pas pour le fond, les 8 couleurs "gagnées" ne sont accessibles que pour le texte (un fond gras, ça n'a pas de sens...).
  2. Les applications qui s'attendent réellement à avoir un "rouge brillant" font une sale tête (au sens littéral du terme) lorsqu'on leur colle un "vert pomme" à la place...
  3. Corolaire du point précédent, si vous configurez une application pour afficher telle chose en vert pomme, cela risque d'être plutôt vilain vu d'un autre terminal pour qui le vert pomme est toujours "rouge brillant".
  4. Enfin, cerise sur le terminal, ce dernier ne sachant trop quoi choisir entre "gras" et "brillant", prennent souvent l'option la plus exhaustive. On arrive donc à un vert-pomme-gras du plus bel effet ;-).

Pour régler le dernière problème avec urxvt, la "solution" consiste à désactiver soit la gestion de styles (à la compilation), soit assigner une police non-grasse en tant que police à utilise pour le gras. Cela se fait dans ~/.Xdefaults via la ressource URxvt.boldFont (attention à la casse !). De même vous pouvez redéfinir l'affichage des italiques et des gras/italiques respectivement par italicFont et boldItalicFont.

! Police de base, ni grasse, ni italic
URxvt.font: xft:DejaVu Sans Mono:size=10

! Sa version grasse qui ne l'est pas
URxvt.boldFont: xft:DejaVu Sans Mono:size=10

! Sa version grasse-italic qui n'
est qu'italique
URxvt.boldItalicFont: xft:DejaVu Sans Mono:italic:size=10
Suppression des gras

Pas très satisfaisant ceci dit car nous avons ainsi perdu la capacité de faire du gras et gardé les autres problèmes intactes. Passons donc à la vitesse au dessus.

Mode 88/256 Couleurs

Depuis un certain temps déjà xterm et urxvt proposent un mode plus évolué que la glutte qui précède. Comme nous l'avons vu, la couleur du texte s'écrit en ANSI ^[[3xm (ou ^[[4xm pour le fond). Et si vous vous souvenez bien, nous avons juste la valeur x=8 de libre. C'est la brèche utilisée à l'origine par xterm pour ajouter 256 couleurs... Comment ? Simplement en définissant les valeurs 38 et 48 comme début de séquence permettant d'accéder aux 256 valeurs. L'avantage est que ces valeurs aliens seront ignorées par les anciens terminaux et cela permet ainsi d'étendre la norme ANSI sans la corrompre.

Ainsi une encre en mode 256 couleurs s'écrit ^[[38;5;y (remplacer 38 par 48 pour un fond). La partie 5 est là pour éviter les erreurs d'interprétation (5 voulant dire "clignotant", il est rarement utilisé). La valeur y quant à elle peut aller de 0 à 255 :

  • De 0 à 15 - Ce sont strictement les mêmes couleurs que la palette initiale, c'est à dire celle définie par les ressources colorX : #RRGGBB utilisées plus haut pour la palette tango. Ainsi ^[[30m a la même signification que ^[[38;5;0
  • De 16 à 231 : un cube de 6x6x6=216 couleurs. Ces couleurs sont définies par le terminal et ne peuvent être changée (il me semble que c'est faisable avec urxvt par une séquence ANSI).
  • de 232 à 255 : 24 niveaux de gris.

Urxvt en mode 88 couleurs reprend strictement le même principe mais avec un cube de 4x4x4 couleurs et 8 niveaux de gros. Maintenant lorsque vous compilez vous-même urxvt avec l'option --enable-256-color vous aurez exactement les mêmes couleurs qu'xterm.

Maintenant les avantages du mode 256 couleurs sont avant tout qu'ils règlent les problèmes du mode 16 couleurs :

  • Le fond et l'encre sont choisies parmi les mêmes couleurs.
  • Le gras peut être utilisé ou pas sur l'importe quelle couleur.
  • La palette étendue est suffisamment vaste pour ne plus avoir à redéfinir les 16 couleurs de base.

Mapping du clavier

Dans une console, chaque appui de touche correspond à une séquence de codes émises par le terminal qui sera interprétée par le logiciel. Ces séquences sont spécifique à la norme émulée par le terminal (ANSI, VT100, etc) mais aussi à chaque émulateur de terminal qui va rajouter ses propres exotisme.

Normalement les caractéristiques d'un terminal sont consignés dans un fichier appelé termcap. C'est ce fichier qui est lu par l'application qui saura alors à quoi correspond quelle séquence. Pour savoir quel termcap lire, l'application se base sur la variable d'environnement TERM. Ainsi si cette variable contient xterm (ce qui est la valeur par défaut si vous ouvre un shell sous xterm), l'application (par exemple mutt) car aller chercher le termcap correspondant et du coup comprendre que si xterm lui envoie le code ^[[A, cela veut dire "flèche vers le haut".

Le ^[ correspond au code ascii 27 (aka Control-[ aka Control-Esc) et non à deux caractères.

Ça c'est dans le meilleur des mondes. Dans la vraie vie, le termcap n'est jamais correctement renseigné, ou mieux, il n'existe pas (c'est plus ou moins le cas pour urxvt). Du coup l'application ne sait que penser des touches spéciales tapées et votre terminal se rempli rapidement de codes ésotériques. C'est typiquement le cas des touches Ctrl-Shift-Fléches.

Une manière très pratique de connaître les séquences générées par un terminal est de lancer ce terminal et de taper la commande cat -v. Tapez ensuite les touches que vous souhaiter documenter, leur séquence doit apparaître en clair.

Pour ajouter ce mapping à URXVT :

URxvt.keysym.S-Up: \033[1;2A
URxvt.keysym.S-Down: \033[1;2B
URxvt.keysym.S-Right: \033[1;2C
URxvt.keysym.S-Left: \033[1;2D
URxvt.keysym.S-Home: \033[1;2H
URxvt.keysym.S-End: \033[1;2F
URxvt.keysym.C-Up: \033[1;5A
URxvt.keysym.C-Down: \033[1;5B
URxvt.keysym.C-Right: \033[1;5C
URxvt.keysym.C-Left: \033[1;5D
URxvt.keysym.C-S-Up: \033[1;6A
URxvt.keysym.C-S-Down: \033[1;6B
URxvt.keysym.C-S-Right: \033[1;6C
URXvt.keysym.C-S-Left: \033[1;6D
Génération des séquences de touche

Seul souci, le Control-Shift est déjà pris par urxvt pour gérer l'encodage "manuel" des caractères unicode (standard ISO 14755). La solution consiste à désactiver cette fonctionnalité qui ne me sert pas tous les jours:

URxvt.iso14755: false
URxvt.iso14755_52: false
Désactivation du mode ISO14755

Gestion de la souris

De manière externe, la prise en charge de la souris par urxvt est minimaliste et se limite à la roulette pour accéder à l'historique, au double-click pour sélectionner un mot et au triple-click pour la ligne complète.

Mais en interne, urxvt génère pour les application qu'elle héberge des séquences identiques à ce que nous avons vu pour le clavier. Cela inclue la position du curseur, les boutons, la roulette (qui n'est rien d'autre que deux boutons supplémentaires) mais aussi le drag. Cette dernière possibilité est très pratique, lorsque l'application sait le gérer.

C'est par exemple le cas de VIM si vous ajoutez à votre .vimrc la commande set mouse=a (a voulant dire que la souris est utilisé dans tous les cas, :help mouse pour plus d'info sur les possibilités).

Maintenant, le fait d'activer la gestion de la souris dans VIM permet de faire pas mal de chose mais pas forcement tout. Pour aller plus loin il faut définir dans VIM le mode de gestion de la souris commandé par la variable ttymouse. Pour savoir dans quel mode vous êtes par défaut, faite un set ttymouse. Chez moi cela renvoie xterm2 qui est déjà un bon niveau de support. Mais si votre version de VIM le prend en charge, il existe un niveau encore plus efficace permettant tout ce que la version graphique de VIM permet (scroll, sélection, redimensionnement de fenêtres, etc). Ce mode est atteint par :set ttymouse=urxvt). Si cela génère une erreur, c'est que votre VIM n'est pas assez récent, le mieux est donc de compiler le votre à partir des sources.

Une fois VIM en mode "urxvt", c'est superbement fluide à un tel point que cette option comble à elle seule l'espace entre un VIM dans une console, et un gVim (la version graphique de VIM). Le seul détail qui manque est le changement de forme du curseur lorsqu'il survole des zones déplaçable. Je pense qu'on va survivre ;-)

Si vous maintenez la touche Shift pressée, Urxvt va garder les évènements souris pour lui sans les transmettre à l'application hébergée. Cela permet notamment d'utiliser le presse-papier primaire même au sein d'application gérant la souris et donc ses propres sélections.

Extension par script

Gestion des URL

Une chose importante dans une console moderne est de pouvoir rapidement afficher une URL sur le navigateur par défaut. Pour cela il faut activer les extensions perl et utiliser le greffon matcher fourni en standard.

URxvt.perl-ext-common: default,matcher
Activation des extensions Perl

Une fois le terminal relancé, les urls doivent être automatiquement soulignées et clickables. Cependant, je suis un grand fan de pentadactyl et de son système de numérotation des liens. Et par chance Sterling Camden aime aussi et a créé pour urxvt un greffon produisant le même résultat. Pour utiliser cela à la place de matcher, il suffit de télécharger l'archive et de recopie url-picker dans un dossier (à créer) ~/.urxvt/kbd. Ce dossier nous servira par la suite à stoquer toutes les extensions Perl "custom".

URxvt.perl-lib : .urxvt/perl
URxvt.perl-ext-common: default,url-picker
URxvt.keysym.C-f: perl:url-picker
Ajout d'une extension Perl custom

Outre la déclaration du greffon, nous avons assigné à la combinaison de touche Control-F l'action d'affichage des liens numérotés. Un redémarrage de la console et vous pouvez tester. Ceci fait, affichez un texte contenant plusieurs URL, puis pressez Control-F. Une série de numéros doivent apparaître au début de chaque URL présente sur l'écran. Tapez maintenant le numéro d'une URL, elle s'ouvrir dans le navigateur par défaut.

Les onglets

Là aussi, j'aborde ce point par souci d'exhaustivité car, exception faite du navigateur, je ne suis pas un grand fan d'onglets. Comme les scrollbars, les menus déroulants et les barres d'outils, j'ai même tendances à les faire disparaître dés que je le peux.

D'un point de vue graphique, urxvt ne gère pas les onglets. Maintenant il y a trois solutions possible pour disposer de cette fonctionnalité :

  • Passer par le greffon standard tabbed. Vous disposerez ainsi d'onglets en mode texte avec une série de raccourcis pour les gérer (Shift-bas pour un nouvel onglet, Shift-Gauche|Droite pour se balader, Ctrl-D pour supprimer l'onglet courant).
  • Passer par GNU screen ou tmux.
  • Utiliser un gestionnaire de fenêtre permettant les onglets comme i3.

Gestion du presse-papier

Comme vous le savez sans doute, X dispose de deux presse-papiers. Celui d'origine (aka primaire) qui est déclenché dés que vous faites une sélection de texte dans n'importe quelle application. Pour coller, il suffit alors de se positionner sur la cible et de faire un click-central. Ensuite vous avez le presse-papier "classique" par Ctrl-C/Ctrl-V. Urxvt fonctionne très bien avec le presse-papier primaire mais n'implémente rien pour récupérer les données du presse-papier "bureau".

Il est possible de se passer de click-central (et donc de la souris) en utilisant pour coller la combinaison de touche Shift-Ins. Pratique pour les portables qui n'ont pas de bouton central.

Pour régler cela, deux solutions. Soit vous maintenez les deux presse-papier synchrone en utilisant un outil comme parcellite, ou plus simplement autocutsel (voir mon précédent article pour cette approche).

L'autre option consiste à implémenter le presse-papier bureau sur urxvt par le biais d'un autre greffon appelé en toute originalité clipboard que vous placerez dans le dossier ~/.urxvt/perl assorti du paramétrage suivante :

URxvt.perl-ext-common: default,url-picker,clipboard
URxvt.keysym.C-S-c: perl:clipboard:copy
URxvt.keysym.C-S-v: perl:clipboard:paste
Ajout du greffon pour la gestion du presse-papier

Le paramétrage est assez facile à comprendre et le presse-papier est disponible après avoir relancé urxvt via les touches Control-Shift-V et Control-Shift-C.

Configuration par application

Tout ceci est bien sympathique mais que faire lorsque l'on a besoin qu'urxvt se comporte différemment pour une application donnée. Par exemple pour lui fournir un mapping de clavier ou des couleurs spécifiques à elle seule.

La solution à ce problème réside dans .Xdefaults et sa fameuse syntaxe nom.classe.ressource=valeur. Il est en effet tout à fait possible pour la majorité des applications X de modifier soit le nom de l'application, soit la classe, soit les deux. Par exemple pour une application GTK, il suffit d'ajouter les paramètres --class=maClasse et/ou --name=monNom. Il en va de même pour urxvt que l'on peut ainsi travestir.

Pour illustrer le propos, imaginons qu'une combinaison de touche affiche un terminal contenant alsamixer mais que nous devions modifier les couleurs de ce terminal pour rendre la légende de l'application lisible. Un tel terminal sera lancé de la manière suivante :

gastonurxvt -name alsa -title audio -e alsamixer
Lancement d'un terminal nommé

Le paramètre -name va avoir pour incidence d'écraser le nom d'origine de l'application qui ne sera donc plus urxvt, mais alsa. -title donne un titre au terminal et -e indique la commande à exécuter, ici alsamixer. Si vous utilisez xprop pour tester cette nouvelle fenêtre, vous constaterez bien que son nom est alsa mais que sa classe est restée URxvt.

Dans la mesure où nous avons jusqu'à maintenant défini uniquement des ressources pour la classe URxvt, elle fonctionneront aussi pour ce terminal. Reste donc à ajouter des règles qui sont spécifique au nom alsa :

! on donne une position et une taille spécifique à ce terminal
alsa.geometry: 100x20+50+40

! et on altère une couleur qui n'est pas lisible sinon
alsa.color4: #653415
paramétrage d'un terminal nommé

L'autre avantage de cette approche et qu'elle permet à un gestionnaire de fenêtre évolué (ex. awesome, i3, wmfs, etc.) d'appliquer des règles pour ce nom particulier (ex. rendre la fenêtre flottante).

urxvt en mode démon

Urxvt est encore trop lent à se lancer ou trop lourd en ressources à votre goût ? Pas de problème, il suffit d'utiliser le démon urxvtd qui gérera sous un même processus l'ensemble des terminaux ouverts.

Le démon se lance très simplement, de préférence dans votre fichier ~/.xinitrc de la manière suivante

urxvtd -o -f -q
Lancement du démon uxrvtd

Le -o indique que le démon doit se caler sur l'affichage X en cours, ce qui lui permet de mourir en toute simplicité lorsque X est arrêté. -f passe le démon en arrière plan et -q lui dit d'être sobre en paroles.

Lorsque le démon est en route, son usage est vraiment très très complexe. Il faut en effet penser à ne plus lancer urxvt, mais urxvtc. Tout le reste est strictement identique (paramétrage, options en ligne de commande, etc).

Une fois le démon en route, la différence est très perceptible sur des outils "lourds" (tout est relatif ;-) comme vim. Le démarrage est simplement instantané.

Conclusion

Nous n'avons abordé ici qu'une infime partie des paramétrages disponibles pour urxvt. La connaissance peut cependant être facilement étendue en consultant le man du terminal. En attendant, j'espère vous avoir fait apprécier ce terminal qui fait partie intégrante de mon quotidien.

Vos remarques et commentaires...

Stophe, le 7 juin, 2012 - 20:19

Pour les onglets de urxvt, dans le fichier .Xdefaults :

URxvt.perl-ext-common: tabbed
!pour des couleurs moins moches :
URxvt*tabbed.tabbar-fg: 10
URxvt*tabbed.tabbar-bg: 8
URxvt*tabbed.tab-fg: 14
URxvt*tabbed.tab-bg: 8

Maëlan, le 1 mai, 2014 - 01:28

Sinon, pour que le défilement à la molette fonctionne avec des programmes type less, il suffit d’activer l’extension « vtwheel » disponible sur l’AUR d’Arch (paquet « urxvt-vtwheel »). Vu qu’elle est courte, la voici en entier :

#! perl

# Implements a scrollwheel just like in good old vt100's mices

sub simulate_keypress {
    my ($self, $type) = @_; #type: 0:up, 1:down

    my $keycode_up = 111;
    my $keycode_down = 116;

    my $numlines = 3;

    my $keycode = 0;
    if ($type eq 0) {
        $keycode = $keycode_up;
    } elsif ($type eq 1) {
        $keycode = $keycode_down;
    } else {
        return;
    }

    for (my $i = 0 ; $i ne $numlines ; $i++) {
        $self->key_press(0,$keycode);
        $self->key_release(0,$keycode);
    }
}

sub on_button_release {
    my ($self, $event) = @_;

    #my $res_ss = $self->resource("secondaryScroll");
    #warn("ressource ss is <$res_ss>");

    !$self->current_screen and return ();

    #warn("foo, event: <$event->{button}>\n");
    if ($event->{button} eq "4") { # scroll up
        $self->simulate_keypress(0);
    return 1;
    } elsif ($event->{button} eq "5") { # scroll down
        $self->simulate_keypress(1);
    return 1;
    }

    return ();
}

Et aussi, pour que ça ne fasse pas n’importe quoi (sans ça, quand on scrolle dans less, après ça se mélange avec le buffer de l’invite de commande, même s’il faut scroller vers le haut pour le voir) :

URxvt.secondaryScroll: false

Il ne reste plus qu’un détail que je n’ai pas réussi à régler : contrairement à man ou less, top n’efface pas son écran en quittant.

Stophe, le 10 juin, 2012 - 09:19

Avec Fluxbox, on peut regrouper les fenetres dans une seule barre de titre avec le fichier .fluxbox/apps :

[group] (workspace=[current])
[app] (name=urxvt)
[end]

Ça évite l'utilisation des onglets dans urxvt

La police Terminus est aussi très sympa (elle porte bien son nom)

Excellent article, qui m'a permis entr'autres de passer de xfce4-terminal à urxvt :o)

Yoran, le 10 juin, 2012 - 10:30

Oui, malheureusement je n'ai pas réussi à activer (ou savoir si c'était faisable) les onglets avec awesome. Mais c'est certain que c'est mieux de laisser d'une manière générale la gestion des onglets au gestionnaire de fenêtres. Fluxbox permet-il de mettre les onglets verticalement ?

Stophe, le 10 juin, 2012 - 15:08

L'action "ArrangeWindowsVertical" permet d'organiser les fenêtres verticalement en découpant l'écran, imitant un peu le tiling. (il y a aussi son homologue horinzontal)

J'ai réussi à avoir des tabs verticales, en faisant ceci :

1- Dans le fichier ~/.fluxbox/init :
session.screen0.tab.intitlebar : false
session.screen0.tab.placement : left

2- Dans le fichier ~/.fluxbox/apps :
[group]
[app] (name=urxvt)
[Tab] {on}
[deco] {TINY} #ou {NORMAL} ou {TOOL} dépend si on veut les boutons de la barre de titre ou pas
[group]

Yoran, le 10 juin, 2012 - 15:25

Yep, donc c'est pas mal car après avoir un peu cherché sur awesome, il semble qu'il y ait eu dans une ancienne version une extension qui faisait le job, mais celle-ci ne semble pas portée sur la version 3.0. Dommage car je suis devenu un peu accroc à ce WM totalement programmable :-)

Stophe, le 10 juin, 2012 - 15:39

Bientôt un tuto sur Awesome alors ;o)

Yann Meow, le 6 février, 2012 - 22:01

Bonsoir !
Le lien pour clipboard est erroné : "hetps://..."
Sinon très bon article je vais de ce pas reconfigurer mon terminal :)

Yoran, le 6 février, 2012 - 23:43

C'est corrigé merci :) N'hésite pas à faire des retours, ce papier peut encore largement être amélioré je pense.

mader, le 7 février, 2012 - 12:19

Salut Ulhume,

As-tu configuré la gestion du presse-papier avec "clipboard" dans ta configuration pour urxvt ?
En tout bien tout honneur bien sûr, ce n'est pas une critique.

J'ai rencontré quelques petits problèmes :

J'ai remplacé ces 2 lignes :

URxvt.keysym.C-S-c: perl:clipboard:copy
URxvt.keysym.C-S-v: perl:clipboard:paste

par

URxvt.keysym.Shift-Control-C: perl:clipboard:copy
URxvt.keysym.Shift-Control-V: perl:clipboard:paste

Car la combinaison "Shift-Control-(C|V)" n'était pas prise en compte.

De plus, ce qui est assez cocasse, c'est que le "copy" fonctionne mais pas le "paste".
Si par exemple je fais un "Ctrl+c" dans firefox et que je le paste dans urxvt avec "Shift-Control-V", rien ne se passe.
Bon, c'est un faux problème car j'ai toujours le "Shift-Ins" je le conçois.

En regardant le script "clipboard" de plus près j'ai découvert qu'il utilisait la commande "xsel".
Donc, je me suis dit que j'allais regarder avec "xclip".

D'où, j'ai rajouté dans mon .Xdefaults

URxvt.copyCommand: xclip -i -selection clipboard
URxvt.pasteCommand: xclip -o -selection clipboard

Toujours le même problème.
Je suis revenu à ma configuration initiale (xsel).

Le comique de la chose vient du faite que la commande "xsel -ob" me renvoie bien ce qui est dans le clipboard.
Enfin bon, ce n'est pas un vrai problème mais un juste un retour.

Voici ma configuration concernant ma gestion du presse papier :

URxvt*perl-lib: /usr/lib/urxvt/perl/
URxvt*perl-ext-common: default,matcher,clipboard
URxvt.keysym.Shift-Control-C: perl:clipboard:copy
URxvt.keysym.Shift-Control-V: perl:clipboard:paste

NB : J'ai copié le script directement dans "/usr/lib/urxvt/perl/".

Yoran, le 7 février, 2012 - 12:53

Pas de soucis pour la "critique" ;-) Oui je l'ai configuré et utilisé pendant des mois sur Debian Squeeze mais avec une version compilée moi-même d'Urxvt. Pour l'article j'ai juste recopié ma configuration que j'avais mise en commentaire pour cela.

Concernant la syntaxe de keysym c'est très étonnant, car oui, j'utilise C/S/M et ça fonctionne très bien. D'ailleurs cela apparaît aussi dans le man :
URxvt.keysym.M-C-0x61: list|\033<|abc|>

Pour ce qui est de la commande, c'est vrai j'aurais du le préciser, mais clipboard utilise par défaut "xsel" et non "xclip". Mais chez moi xsel fonctionne sans aucun soucis... J'arrive à copier et à coller, du moins j'arrivais car je suis passé depuis une semaine en mode "syncro" qui est plus simple à mon sens.

Sinon, petite remarque sur perl-lib, je te conseille de faire comme j'ai dit (un dossier local) car 1/ chose étrange, cela ne va pas empêcher urxvt d'aller chercher ses scripts par défaut dans usr/lib et 2/ cela permet de capitaliser ta configuration sur plusieurs machines ou plusieurs installation, donc moins de temps perdu.

Dans tous les cas, je vais répercuter tout cela dans l'article, merci pour ton retour !

Julien, le 9 février, 2012 - 12:00

Bonjour,

Alors apparemment, la gestion des « raccourcis » dans les définitions des touches nécessite le mode « keysym-list » à partir de la version 9.14 (enfin c'est ce que j'ai compris sur http://cvs.schmorp.de/rxvt-unicode/Changes).

Par contre, je n'arrive pas à faire marcher le clipboard et je ne trouve pas le mode « clipboard » ni sur la page http://pod.tst.eu/http://cvs.schmorp.de/rxvt-unicode/src/urxvt.pm ni dans le dossier « /usr/lib/urxvt/perl », peut-être qu'il a été retiré ?

Quoi qu'il en soit, il est possible de copier à partir du clipboard en appuyant sur .

Maëlan, le 1 mai, 2014 - 00:53

(Je déterre cette discussion, mais pas grave.)

Pour le premier problème, apparemment c’est parce qu’il faut mettre la lettre (C ou V) en majuscule lorsqu’il y a le modificateur Shift :

Rxvt.keysym.C-S-C: perl:clipboard:copy
URxvt.keysym.C-S-V: perl:clipboard:paste

et pas :

Rxvt.keysym.C-S-c: perl:clipboard:copy
URxvt.keysym.C-S-v: perl:clipboard:paste
slc66, le 8 février, 2012 - 15:01

Bonjour,

Je viens d'essayer d'activer la souris dans VIM

:set ttymouse=urxvt'

Ca ne marche pas chez moi.

Par contre,

:set mouse=a

me permet d'activer la gestion du scroll avec la roulette.

Super ton article.

Merci

Stéphane

Yoran, le 8 février, 2012 - 15:29

mouse=a (help :mouse pour plus d'info) active la gestion de la souris en console. C'est en effet un pré-requis, j'aurais du le préciser.

ttymouse va en revanche déterminer le mode de gestion de la souris qui a été activé par la commande précédente. Tu peux vérifier quel est le mode géré par défaut en tapant simplement :set ttymouse. Il y a for à parier que ce soit xterm2.

Le mode ttymouse=urxvt (pas de quotes à la fin) est disponible sur les versions récentes de VIM. J'en dispose car j'ai recompilé les sources d'urxvt.

Maëlan, le 1 mai, 2014 - 01:06

La seule différence que j’ai constatée en passant de ttymouse=xterm2 à ttymouse=urxvt (j’avais déjà mouse=a), c’est que les touches début et fin ne fonctionnent plus. Plus exactement, au lieu du comportement usuel, elles activent des fonctions de vim pour modifier la casse. C’est cool aussi, mais bon.

Yoran, le 8 février, 2012 - 15:38

J'ai mis à jour le chapitre en espérant que ce soit plus clair ainsi.

raph, le 8 février, 2012 - 16:11

Comme police de terminal, je recommande Inconsolata, très bonne pour coder, avec des zéros différents des o et O, des un, différents des pipes | et des l.

Pour urxvt, je rajouterai aussi :

URxvt.keysym.M-C-s: command:\033]50;xft:Inconsolata:antialias=true:size=12\007
URxvt.keysym.M-C-d: command:\033]50;xft:Inconsolata:antialias=true:size=18\007
URxvt.keysym.M-C-f: command:\033]50;xft:Inconsolata:antialias=true:size=28\007

commandes qui permettent de changer de taille de police en cours d'utilisation. C'est moins pratique que les menus déroulants parfois présents, mais ça permet de grossir la taille d'un terminal sans tuer tous les autres, pour ponctuellement montrer quelque chose à quelqu'un d'un peu loin.

et sinon j'utilise le thème de couleur zenburn, piqué chez anrxc http://git.sysphere.org/dotfiles/tree/Xdefaults. (et j'ai aussi un zenburn pour vim).
mon gestionnaire de fenêtres est Awesome, je le recommande.

Yoran, le 8 février, 2012 - 17:12

Je ne connaissais pas Inconsolata mais chez moi ce n'est lisible qu'en la mettant à 14 minimum... Et encore je trouve que ça bave un peu. Mais c'est peut-être mes réglages XFT qui différent de toi. Sinon bonne idée pour les raccourcis, on pourrait même imaginer coller cela dans un plugin en perl avec un truc genre Ctrl/+ et Ctrl/-

Sinon pour le théme ZenBurn, je m'en suis largement inspiré pour le mien (que j'ai appelé viral ;-). En fait c'est un ZenBurn-like avec contraste un chouilla plus élevé et transposé sur la logique d'organisation 16 couleurs de Solarized avec un script python pour générer les configurations pour urxvt, mutt, irssi & co.

raph, le 8 juin, 2012 - 11:55

Merci beaucoup pour url-picker, qui remplace avantageusement url-select (qui était déjà sympa).
Ce que j'aimerais vraiment pour la gestion des tailles de police c'est un menu "à la xterm", où en un clic de souris on a le choix entre 4 ou 5 tailles. Il y a de la doc pour écrire des popup pour urxvt ?

Le script Python "pour générer les configurations pour urxvt, mutt, irssi & co" est disponible quelque part ? Et le thème "viral" ?

Pour Inconsolata, en fait, je l'utilise en 14 : j'ai une vue pas très bonne et je fatigue vite avec des tailles plus petites.

Yoran, le 8 juin, 2012 - 12:49

Je ne sais pas pour les docs mais j'ai cela si tu veux: https://github.com/dave0/urxvt-font-size

Perso je passe par une commande bash pour changer les polices et leur taille :
#! /bin/bash
font="Droid Sans Mono"
if [ ! -z "$2" ] ; then
  font="$2"
fi
printf '\33]50;%s%d\007' "xft:$font:size=" $1

Yoran, le 9 juin, 2012 - 15:37

Si cela t"intéresse, vu que le plugin que je t'ai signalé ne fonctionne qu'avec les vieux format de font (les trucs à rallonge avec les *-*-*), j'en ai fait une version simplifiée qui fonctionne avec les polices spécifiées au format "xft:DejaVu Sans Mono:style=Regular:size=10" :

#!/usr/bin/perl

sub on_user_command {
  my($term, $command) = @_;
  my $increment = $command eq "font-increase"?1:-1;
  my $font = $term->resource('font');
  if ($font =~ /size\=(\d+)/) {
    my $original=$1;
    my $new=$original+$increment;
    if ($new<6) { $new = 6; }
    $font =~ s/size\=$original/size\=$new/;
    $term->cmd_parse( "\033]710;$font\007");
  }
}

Pour l'utiliser par Control-+ et Control-- du clavier numérique, cela donne

URxvt.keysym.C-KP_Add: perl:font-increase
URxvt.keysym.C-KP_Subtract: perl:font-decrease

raph, le 10 juin, 2012 - 00:51

Super, merci beaucoup !

(je ne suis pas bon en perl, mais j'ai commencé à bidouiller un peu un plugin pour ajouter des options au menu "option-popup", pour l'instant je n'arrive pas à faire exécuter les commandes (avec un term->cmd_parse) sans que ça freeze... Je réessaierai quand j'aurai plus de temps. Je pense que c'est vraiment un truc sympa de xterm que ce menu, je l'aurai un jour, je l'aurai...)

Yoran, le 10 juin, 2012 - 09:26

si tu arrives à un truc fonctionnel, je suis preneur de la technique pour faire les popup :)

raph, le 13 juin, 2012 - 16:18

Re,

Toujours rien de fonctionnel pour le popup, mais je te dirai, promis.

Est-ce qu'il serait possible de modifier ton plugin pour avoir "increase, decrease et reset" pour les tailles. Je vois bien ce que fait le "?1:-1", mais je galère à le transformer en if/else fonctionnel avec du reset (c'est à dire pouvoir revenir à ma taille par défaut n'importe quand, quitte à ce que cette taille soit "en dur" dans le plugin) ?
(accessoirement, je galère pour coder, car mon xrdb -merge .Xresources ne marche pas, du coup je dois killer X régulièrement, c'est assez limitant : tu développes comment ?)

Yoran, le 13 juin, 2012 - 16:31

Un truc comme cela ?

sub on_user_command {
  my($term, $command) = @_;
  my $increment;
  if ($command eq "font-increase") {
    $increment = 1 ;
  } elsif ($command eq "font-decrease") {
    $increment = -1;
  } elsif ($command eq "font-reset") {
    $increment = 0;
  } else {
    return;
  }
  my $font = $term->resource('font');
  if ($font =~ /size\=(\d+)/) {
    my $original=$1;
    my $new=$increment==0?12:$original+$increment;
    if ($new<6) { $new = 6; }
    $font =~ s/size\=$original/size\=$new/;
    $term->cmd_parse( "\033]710;$font\007");
  }
}

xrdb ne me sert que lorsque je change les raccourcis. Généralement je fais un xrdb ~/.Xdefaults. Ensuit pour tester, je lance simplement un urxvt à partir d'une console, je vérifie si ça fonctionne et éventuellement je mets des traces avec print "coucou"; qui se retrouve dans la console qui a lancé urxvt. Pour mettre fin au test un simple Ctrl-C dans cette console ou je fermes la console de test.

Anonymous, le 6 mars, 2012 - 16:51

Merci pour ce post. Après un passage à awesome,. je cherchais un moyen de me débarrasser de xfce-terminal. C’est presque fait grâce à vous.

Il reste néanmoins une fonctionnalité que je n’arrive pas à reproduire avec rxvt:

lorsque l’on veut visualiser une ligne dans l’historique, on peut remonter en arrière (shift+flèche du haut); mais si le programme courant de la fenêtre produits des ligne (compilation, installation d’un paquet, etc.), tout défile, et la ligne que l’on était en train de lire remonte au fur et à mesure que le programme affiche sa sortie.

Avec xfce-terminal, le contenu du terminal ne défilait pas: l’ascenseur remontait tout seul au fur à et à mesure que la sortie du programme courant produisait ses lignes, et l’affichage restait identique.

(j’espère m’être fait compris, mais j’ai du mal à décrire ce que je recherche)

Est-il possible de reproduire ce comportement avec rxvt?

Merci d’avance

Yoran, le 6 mars, 2012 - 17:51

Oui, c'est (heureusement ;-) possible :

URxvt.scrollTtyOutput:false

Et une petite finesse, le fait de synchroniser le scrollback buffer et le scroll lorsque l'on presse une touche :

URxvt.scrollTtyKeypress:true

Anonymous, le 6 mars, 2012 - 21:14

Ce n’est pas tout à fait cela.

URxvt.scrollTtyOutput:false

permet d’éviter de revenir en bas de la fenêtre pour afficher ce que la sortie produit. Mais si, par exemple, la sortie sort 10 caractères \n (nouvelle ligne), le contenu de rxvt va scroller de 10 lignes (s), y compris la ligne que je suis en train de visualiser.

C’est ce scrolling que j’aimerais éviter.

Yoran, le 6 mars, 2012 - 22:40

Pas certain de comprendre le besoin du coup. Le principe c'est quoi ? Ton prompt est disons en bas de ta fenêtre, tu lances une commande, et tu voudrais que cela ne scroll pas ? En gros que les lignes s'accumulent sous ton "curseur" et que ce soit toi qui décide de descendre ? Si c'est cela j'ai du mal à comprendre comment tu l'utilises. Genre tu es en bas de l'écran, tu tapes "ls -la" et tu ne vois le résultat qu'en donnant un coup de roulette ?

Je pense que j'ai du louper une marche :)

Anonymous, le 7 mars, 2012 - 09:25

Si le prompt est en bas de ma fenêtre, le comportement est normal.

Pas tout à fait cela. Ce que je souhaite, c’est que si je remonte une fois et que le prompt, ou plutôt la sortie, sort hors de ma fenêtre rxvt, alors quelque soit ce qui se passe en bas, au niveau du prompt et de la sortie, alors rxvt ne doit pas scroller.

Exemple typique dans mes habitudes: je lance un

aptitude update

, puis je remonte dans mon terminal lire des informations affichées par des commandes précédentes, en faisant sortie le prompt contenant la commande lancée hors de l’affichage. Chez moi l’aptitude update est long (plusieurs dépôts, qui prennent une ou deux minutes), cela me laisse du temps. Avec rxvt, lorsque je commence à lire ce qui m’intéresse, et qu’aptitude affiche son blah blah habituel, pour chaque ligne affichée par aptitude, ma fenêtre scrolle d’une ligne. C’est ce scroll que je souhaite éviter.

Yoran, le 7 mars, 2012 - 10:47

Ah ok donc comportement "normal" en somme :) Désolé, je dois être un peu crevé :

URxvt.scrollTtyOutput:false
URxvt.scrollTtyKeypress:true
URxvt.scrollWithBuffer:true

Le truc "clef" est "scrollWithBuffer" qui est contre-intuitif. Dans une logique "utilisateur", tu te dis "je veux pas que ça scroll", et donc tu aurais tendance à lui coller "false". Sauf que cette ressource indique si le scroll doit impacter la position dans le backscroll buffer. Et c'est bien ce que l'on veut car pour que "ça ne bouge pas", il faut que le backscroll buffer bouge à chaque nouvelle ligne en bas, sinon il est "poussé" vers le haut. Un peu tordu, j'en conviens :)

Anonymous, le 7 mars, 2012 - 12:08

Ça marche exactement comme je le veux.

Personnellement je configure aussi comme ceci:

URxvt.scrollTtyKeypress: false

. C’est plus pratique pour copier coller des lignes de l’historique vers la ligne de commande, tout en continuant d’afficher l’historique et sans revenir à la ligne de commande.

Exemple typique: je copie/colle des noms de packages issus d’un aptitude search pour les installer.

Yoran, le 7 mars, 2012 - 14:21

Content que ça fonctionne pour toi.

Idéalement il faudrait que le "retours" se fasse sur une combinaison de touche particulière plutôt que n'importe laquelle, cela permettrait d'avoir le meilleur deux comportements. Car moi quant je scroll sur 2 ou 3 km de logs, je suis bien content d'avoir une possibilité de retour rapide :)

Publier un nouveau commentaire

Le contenu de ce champ sera maintenu privé et ne sera pas affiché publiquement.
  • To highlight piece of code, just surround them with <code type="language"> Your code &tl;/code>>. Language can be java,c++,bash,etc... Everything Geshi support.
  • Tags HTML autorisés : <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <div> <p> <br>
  • Les lignes et les paragraphes vont à la ligne automatiquement.
  • Les adresses de pages web et de courriels sont transformées en liens automatiquement.

Plus d'informations sur les options de formatage

CAPTCHA
Cette question est là pour déterminer si vous êtes humain ou pas...