Chocoblog

Chocoblog

Billets sur l'informatique, les logiciels libres et retours d'utilisation sont au programme avec la possibilité de publier des billets de copains.

Résoudre les problèmes entre rxvt et zsh

Ce billet a été initialement publié l'année dernière sur http://blog.sandrocazzaniga.fr

J'utilise comme émulateur de terminal rxvt qui peut fonctionner en mode daemon/client ce qui peut le rendre très rapide. De plus il fortement configurable et consomme peu. Seulement j'utilise ZSH comme bourne shell et j'ai rencontré quelques difficultés à faire cohabiter les deux (sous ArchLinux).

Le principal problème était qu'un paquet de touches n'était pas reconnu notamment celui pour aller en fin de ligne, utiliser la recherche inverse, supprimer le caractère via la touche suppr etc.

Il vous faut pour celà ajouter ces commandes dans votre .zshrc :

typeset -g -A key

bindkey -e
bindkey "^[[3~" delete-char
bindkey "^R" history-incremental-search-backward
bindkey "^[[1;5D" emacs-backward-word
bindkey "^[[1;5C" emacs-forward-word
bindkey "^[[5~" up-line-or-history
bindkey "^[[6~" down-line-or-history
bindkey "^[[7~" beginning-of-line
bindkey "^[[8~" end-of-line

Vous devrez peut-être adapter les codes. Pour simplement savoir quelle touche correspond à quelle code, exécutez la commande cat sans argument et tapez la touche qui vous intéresse. Dans mon cas pour la touche Ctrl-Fleche + droite :

% cat 
^[[1;5C

J'ai longtemps eu encore un problème, le forward/backward word ne fonctionnait pas. Lorque j'éxecutais la combinaison de touche Ctrl+fleche droite/gauche rxvt scintillait. J'ai enfin résolu mon problème en rajoutant au fichier de conf d'urxvt (~/.Xdefaults) les deux lignes suivantes :

URxvt.keysym.C-Right : \033[1;5C
URxvt.keysym.C-Left : \033[1;5D

EDIT: Après mise à jour vers la version 9.21 ce "hack" ne fonctionnait plus. Si vous utilisez le plugin tabbed avec urxvt, et que vous voulez quand même avoir le backward/forward word il vous faudra supprimer le bloc ligne (environ) 370 du fichier /usr/lib/urxvt/perl/tabbed. En fait tabbed code en dur l'utilisation de Ctrl+fleche droite/gauche pour déplacer les "tab". Du coup j'ai pas trouvé d'autre moyen d'outrepasser ça.

Enfin, je voulais scroller via Shift+PageUp/Down. Il faut encore rajouter dans le fichier de conf d'rxvt :

URxvt.keysym.Shift-PageUp: command:\033]720;1\007
URxvt.keysym.Shift-PageDown: command:\033]721;1\007

Et voilà, les pageUp/Down, début de ligne, fin de ligne, la touche suppr, la recherche dans l'historique, les backward/forward word devraient maintenant fonctionner dans votre terminal préféré.