Xterm-Title mini-HOWTO

Winfried Trümper, winni@xpilot.org
traduction Jean-Albert Ferrez, ferrez@dma.epfl.ch

Version 1.3, 22 Oct 1996

La plupart des gens vous diront que c'est stupide : il suffit de faire un

xterm -T "Emplacement publicitaire a louer" \
      -n "Vous pouvez aussi avoir le nom de l'icone" &

pour avoir n'importe quel texte dans la barre de titre de xterm. Certes, mais si vous voulez changer ce texte après le démarrage ?

Pour changer le titre de xterm pendant l'exécution, il suffit de lui envoyer une séquence spéciale de caractères. Une telle séquence est appelée "séquence d'échappement" et n'est généralement pas affichée telle quelle à l'écran, mais provoque au contraire une action particulière.

Par exemple, si vous tapez <ctrl-v> <Esc> <c> <Enter>, votre xterm devrait se réinitialiser (c'est à dire effacer l'écran). Le <ctrl-v> et le <Enter> ne servent en fait qu'à dire au shell (bash) d'afficher la séquence <Esc> <c> elle-même.

Vous aurez compris que je désigne les touches par leur nom entouré de <>.

Maintenant, pour changer la texte de la barre de titre et de l'icône de xterm, il suffit d'utilliser les séquences d'échappement :

<esc> <]> <2> <;>   pour le titre
<esc> <]> <1> <;>   pour le nom de l'icone

Pour envoyer ces séquences à xterm, au lieu de les taper au clavier, nous allons utiliser la commande echo

echo -e "\033]2; Emplacement publicitaire a louer. \007"

Vous l'aurez certainement deviné : "\\033" est la représentation octale du caractère échappemment (Esc) et l'option -e active cette syntaxe. Il faut terminer le texte qui doit apparaître dans la barre de titre avec un <ctrl-g>, également connu sous le nom de "bip".

Une application intéressante de ces possibilités est de déplacer les informations affichées d'habitude dans l'invite (prompt) vers la barre de titre. Supposons que vous ayez défini votre invite ainsi :

export PS1='\u@\h:\w> '

ce qui donne par exemple :

winni@FeilSurf:~/mail>

Qu'est ce qui arrive si vous allez dans le répertoire "/afs/rrz.uni-koeln.de/pub/packages/linux/kernel/v2.0" ? L'invite devient longue et ne laisse pas beaucoup de place pour taper des commandes.

winni@FeilSurf:/afs/rrz.uni-koeln.de/pub/packages/linux/kernel/v2.0>

C'est embêtant. Mais si vous mettez ces informations dans la barre de titre, tout rentre dans l'ordre :

export PS1='\033]2; \u@\h:\w \007bash> '

Cette commande affiche la séquence d'échappement appropriée et ne laisse que bash> _ dans l'invite.

Malheureusement, la longueur maximale de la valeur de PS1 est d'environ 60 (?) caractères et donc ce qui précède ne peut pas toujours être appliqué. Une autre idée est de redéfinir certaines commandes internes du shell tels que cd pour afficher ces séquences d'échappement, mais cela a pour effet secondaire indésirable de modifier sans cesse la barre de titre lors de l'exécution de scripts de commandes ... (eh oui, chaque cd change le titre).

La manière la plus sure me semble être l'utilisation de la variable d'environnemet "PROMPT_COMMAND". Le contenu de cette variable est exécuté à la fin de chaque commande avant que bash ne réimprime l'invite. L'exemple suivant est très utile dans un environnement réseau avec beaucoup de xterm ouverts :

export PROMPT_COMMAND='echo -ne "\033]2;$LOGNAME@$HOST Directory: $PWD\007\033]1;$LOGNAME@$HOST\007"'

... notamment lorsque vous regardez la liste des fenêtres affichée par votre window-manager. Et pour être parfait, on ne définit cette variable que lorsque l'on est dans un xterm :

if [ "$TERM" = "xterm" -o "$TERM" = "xterm-color" -o \
     "$TERM" = "rxvt"  -o "$TERM" = "vs100" ]
then
  PS1='bash> '
  PS2='bash>> '
  PS3='bash>>> '
  export PROMPT_COMMAND='echo -ne "\033]2;$LOGNAME@$HOST:$PWD\007\033]1;$LOGNAME@$HOST\007"'
fi

Notez que l'invite "bash> " rend la ligne de commande plus consistente puisque plusieurs programmes mettent leur nom ainsi (gnuplot, ncftp, gap, kash, ...). Mais même cette manière de faire pose problème avec certains programmes qui comme "ytalk" lancent des sous-shells. Si cela vous arrive, faites simplement :

    unset PROMPT_COMMAND

Joyeux Linuxage (Happy Linuxing) -Winfried Trümper <winni@xpilot.org>

CREDITS:

Ville Voutilainen <vvoutila@raita.oulu.fi> qui a remarqué que les ;s manquaient dans la première moité du document.

PS:

N'utilisez jamais de séquences d'échappement brutes dans vos programmes ! Utilisez le programme tput pour déterminer les séquences adéquates en fonction de la variable d'environnement $TERM et de la description symbolique de l'action désirée. Voyez tput(1) pour plus de détails (tapez man 1 tput sur la ligne de commande).

Les séquences d'échappement pour la barre de titre de xterm sont la seule exception à cette règle.

PS2:

Si vous voulez connaître la liste des séquences d'échappement que xterm comprend, jetez un oeil dans les sources de rxvt au fichier doc/xterm.seq.