Table des matières

Astuces pour le terminal

Introduction

Le terminal (ou émulateur de terminal si on est sous X) peut paraître de prime abord assez austère. Les quelques astuces qui suivent visent à le rendre plus agréable, voire à en faire un environnement de travail stylé et séduisant.

Installation

La plupart des astuces fonctionneront sous votre émulateur habituel (stterm (suckless st, le choix de votre serviteur :-) ), xterm, konsole, gnome-terminal, sakura, terminal XFCE…) et avec le shell Bash.

Utilisation

Avoir de la couleur dans les manpages avec less

Couleurs simples

Il faut rajouter la fonction suivante dans votre .bashrc :

man() {
     env LESS_TERMCAP_mb=$'\E[01;32m' \
     LESS_TERMCAP_md=$'\E[1;32m' \
     LESS_TERMCAP_me=$'\E[0m' \
     LESS_TERMCAP_se=$'\E[0m' \
     LESS_TERMCAP_so=$'\E[1;31m' \
     LESS_TERMCAP_ue=$'\E[0m' \
     LESS_TERMCAP_us=$'\E[1;33m' \
     man "$@"
}

Ce qui permet d'utiliser LESS avec les en-têtes de catégories et texte en gras en vert, les éléments soulignés en jaune et les résultats de recherche en rouge gras.

Couleur à la most

Merci à captnfab pour ça

Plus haut a été utilisé la syntaxe termcap (la librairie termcap, chez GNU/Debian est obsolète).
Elle est remplacée par la librairie terminfo (qui pour rétrocompatibilité, prend en charge la syntaxe de termcap).

Ici est proposé d'utiliser terminfo, pour obtenir le même rendu qu'avec le pager most (non installé par défaut).
Un fichier de capacité terminfo est un fichier binaire, obtenu (compilé) par la commande tic.

Créer le fichier ~/.terminfo/mostlike.src en y ajoutant le code source suivant :

# Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm-pcolor
mostlike|manpages with color looking like most,
  am, hs, km, mir, msgr, xenl,
  cols#80, it#8, lines#24, wsl#40,
  acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
  bel=^G, bold=\E[1m\E[31m, clear=\E[H\E[J, cr=^M,
  csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
  cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
  cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
  dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
  dsl=\E]0;\007, ed=\E[J, el=\E[K, enacs=\E)0, fsl=^G,
  home=\E[H, ht=^I, hts=\EH, il=\E[%p1%dL, il1=\E[L, ind=^J,
  is2=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>, kbs=^H,
  kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
  kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~,
  kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
  kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
  kf2=\E[12~, kf20=\E[34~, kf3=\E[13~, kf4=\E[14~,
  kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
  kfnd=\E[1~, kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~,
  kslt=\E[4~, rc=\E8, rev=\E[7m\E[34m, ri=\EM, rmacs=^O,
  rmcup=\E[J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>,
  rmso=\E[m, rmul=\E[m,
  rs2=\E7\E[r\E8\E[m\E[?7h\E[?1;3;4;6l\E[4l\E>, sc=\E7,
  sgr0=\E[m, smacs=^N, smcup=\E7\E[?47h, smir=\E[4h,
  smkx=\E[?1h\E=, smso=\E[1;30m\E[47m, smul=\E[32m,
  tbc=\E[3g, tsl=\E]0;, u6=\E[%i%d;%dR, u7=\E[6n,
  u8=\E[?1;2c, u9=\E[c,

Puis le compiler avec la commande tic.

Il n'est pas question ici,
De faire compiler un code obscure, sans en établir la confiance.

Origine du code :
Ce code provient du fichier de capacité terminfo du type xterm-pcolor.
Il est obtenu par la commande infocmp xterm-pcolor.
Notes : Il peut légèrement différer, d'une distribution à l'autre, ou avec l'évolution dans le temps.

Modifications apportées :
  • Les paramètres bold, smso, smul ont été modifiés, pour y indiquer les couleurs du pager most.
  • Et pour compatibilité avec les consoles virtuelles2) la séquence d'échappement de l'effacement de l'écran 2J, a été modifiée en J, pour les paramètres clear et rmcup.
tic ~/.terminfo/mostlike.src

Et créer l'alias suivant (dans ~/.bash_aliases) :

alias man="TERM=mostlike PAGER=less man"
Ici la variable PAGER est définie avec la valeur less (le pager installé et utilisé par défaut).

Si vous n'avez pas installé et n'utilisez pas d'autre pager (tel-que most), son renseignement est inutile.

Ne reste plus qu'à réinterpréter .bash_aliases

source ~/.bash_aliases

Coloriser le code lu avec less

Pour cela, installer le paquet source-highlight :

apt-get install source-highlight

puis ajouter dans son .bashrc les lignes suivantes :

export LESSOPEN="| /usr/share/source-highlight/src-hilite-lesspipe.sh %s"
export LESS=' -R '

Ouvrez un nouveau terminal ou re-éxecuter le .bashrc :

source .bashrc

et hop, magie les fichiers de code que vous consultez avec less disposent de la couleur ! ;)

Utiliser vim en tant que pager

Pour lire les manpages (et autres) avec vim, ajouter ceci dans votre .bashrc

export PAGER="/bin/sh -c \"unset PAGER;col -b -x | \
   vim -R -c 'set ft=man nomod nolist' -c 'map q :q<CR>' \
   -c 'map <SPACE> <C-D>' -c 'map b <C-U>' \
   -c 'nmap K :Man <C-R>=expand(\\\"<cword>\\\")<CR><CR>' -\""

Définir le titre de son terminal

Pour Bash

Le .bashrc fournit par Debian dispose déjà de cette fonction mais nous allons l'améliorer. Chercher les lignes suivantes :

# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
    PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"

et ajouter en dessous :

    show_command_in_title_bar()
    {
        case "$BASH_COMMAND" in
            *\033]0*)
                 ;;
            *)
                echo -ne "\033]0;${USER}@${HOSTNAME}:${PWD} > ${BASH_COMMAND}\007"
                ;;
        esac
    }
    trap show_command_in_title_bar DEBUG

Ainsi le titre de votre terminal comprend votre login, le nom de la machine, le dossier actuel et, le cas échéant, le nom du programme en cours d'éxecution.

Pour Zsh

Cela ne fonctionnera pas pour les utilisateurs de zsh qui préféreront ajouter le code suivant à leur .zshrc :

if [ "$SHELL" = '/bin/zsh' ]
then
    case $TERM in
         st*|*term)
         precmd() { print -Pn "\e]0;%n@%m:%~\a" }
         preexec () { print -Pn "\e]0;%n@%m:$1\a" }
         ;;
    esac
fi

Sogal 22/08/2015 12:22

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !
2)
Les types de capacité terminfo xterm sont spécifiques aux terminaux (fenêtres). Les consoles (virtuelles), sont de type linux.