Page suivante Page précédente Table des matières

2. Le paquetage Terminfo

Le paquetage terminfo est un ensemble de fichiers compilés à l'aide de l'utilitaire tic. Chaque fichier contient une série de commandes capables de réaliser, sur le terminal référencé par ce fichier, toutes les opérations de gestion d'un écran : modification de la visibilité du curseur, déplacement du curseur, défilement du texte, modification des couleurs du texte et/ou du fond, etc...Puisque les fichiers sont compilés cela signifie qu'il existe des fichiers sources, modifiables et directement lisibles. En général un jeu de fichiers sources accompagnent la bibliothèque ncurses.

2.1 Emplacement des fichiers terminfo

Les fichiers terminfo sont habituellement situés dans les chemins suivants :

La dernière localisation est plus rare et ne se rencontre que sur des systèmes plus anciens.

Pour faciliter la recherche, chaque fichier compilé décrivant les capacités de traitement d'un terminal est placé dans un sous-répertoire du répertoire terminfo. Le nom de ce sous répertoire est constitué de la première lettre du terminal géré. Le fichier lui-même porte le nom du terminal suivi de différentes lettres qui indiquent les multiples déclinaisons du terminal en question.Ainsi si vous tapez la commande :

locate xterm
Vous verrez défiler à l'écran toutes les variantes du terminal xterm qui est le terminal habituellemnt émulé sous X Window.

Tous ces fichiers sont regroupés dans le répertoire :

/usr/share/terminfo/x

En ce qui concerne le fichier source, il peut très bien manquer à votre distribution. En tout état de cause vous pourrez le télécharger aux adresses :

2.2 Visualisation du contenu d'un fichier terminfo

Il existe un utilitaire qui permet de visualiser le contenu d'un fichier terminfo décrivant les capacités d'un terminal déterminé. Cet utilitaire est infocmp. Ainsi, si sous le shell vous validez la commande suivante :

infocmp xterm
Vous obtiendrez l'affichage suivant qui, évidemment, éclairera immédiatement, pour vous, les capacités de traitement d'un terminal xterm!
[pierre@localhost pierre]$ infocmp xterm
#       Reconstructed via infocmp from file: /usr/share/terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),
        am, km, mir, msgr, xenl,
        cols#80, it#8, lines#24,
        acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
        bel=^G, bold=\E[1m, clear=\E[H\E[2J, 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, ed=\E[J,
        el=\E[K, enacs=\E)0, home=\E[H, ht=^I, 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=\EOP, 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=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS, 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, ri=\EM, rmacs=^O, rmcup=\E[2J\E[?47l\E8,
        rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m, rmul=\E[m,
        rs2=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>, sc=\E7,
        sgr0=\E[m, smacs=^N, smcup=\E7\E[?47h, smir=\E[4h,
        smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
        u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c,

2.3 Première interprétation du contenu d'un fichier terminfo

Nous comprenons tout de même que passée la première ligne qui rappelle les différents noms du terminal nous trouvons une série d'identificateurs. Chaque identificateur désigne une capacité de traitement du terminal ; pour cette raison ils sont souvent appelés capname.

Nous constatons que chaque identificateur de capacité du terminal est séparé du suivant par une virgule. Il est clair également que nous pouvons distinguer trois types différents d'identificateur :

  1. Les premiers sont immédiatement suivis d'une virgule et sont de type booléen.
  2. Les deuxièmes sont suivis d'un dièse, lui-même suivi d'une valeur numérique. Ils sont de type numérique.
  3. Les troisièmes sont suivis du signe =, lui-même suivi d'un ensemble de caractères. Ils sont de type chaîne de caractères.
Cette première approche nous a permis de débroussailler le terrain. Nous allons tenter d'utiliser les outils mis à la disposition du programmeur pour accéder proprement aux différentes capacités d'un terminal.


Page suivante Page précédente Table des matières