Documentation sur les variables LESS_TERMCAP_ *?

Réponses:

45

Termcap est une bibliothèque que Less utilise pour accéder au terminal. Termcap est en grande partie obsolète, après avoir été remplacé par Terminfo , mais Terminfo offre une interface de compatibilité Termcap aux applications. Less se contente de l'interface Termcap et l'utilise.

La bibliothèque Termcap est une description des installations du terminal. Chaque établissement est identifié par un code à deux lettres (ou plus généralement à deux caractères). Par exemple, hcidentifie les terminaux papier (c.-à-d. Les imprimantes, pas les écrans); coest le nombre de colonnes; mdcommence à afficher du texte en gras. Chaque capacité a une valeur qui peut être un booléen (comme avec hc), un entier (comme avec co) ou une chaîne (comme avec md). La plupart des chaînes sont des séquences d'échappement que les applications peuvent envoyer au terminal pour obtenir un certain effet.

Pourquoi échapper des séquences? Parce que l'interface entre le terminal et l'application est un flux de caractères (plus précisément, un flux de caractères dans chaque sens: un pour l'entrée utilisateur, un pour la sortie à afficher). Lorsqu'une application écrit un caractère sur le terminal, celui-ci est généralement affiché. Quelques caractères ont un comportement différent: ce sont des caractères de contrôle, qui permettent, par exemple, de déplacer le curseur, de changer d'attributs d'affichage, etc. Il y a beaucoup plus de commandes que de caractères de contrôle. un caractère spécial (souvent le caractère d'échappement, d'où le nom).

Par exemple, lorsque Less souhaite afficher du texte en gras, il recherche la valeur de la mdcapacité. Ceci est une chaîne que Less écrit sur le terminal. Le terminal reconnaît cette chaîne en tant que séquence d'échappement et ajuste son état interne afin que les caractères suivants soient affichés en gras.

Aux débuts des terminaux matériels, différentes marques avaient différentes séquences d'échappement et capacités; la base de données et l'interface Termcap ont été inventées pour que les applications n'aient pas à connaître tous les modèles de terminaux. De nos jours, la plupart des émulateurs de terminaux ont des fonctionnalités très similaires, mais la base de données Termcap ou Terminfo est toujours utile pour gérer des différences mineures.

Les LESS_TERMCAP_*variables peuvent être définies dans l'environnement ou dans le .lesskeyfichier . Il fournit Less avec des valeurs alternatives pour les capacités du terminal. Lorsque Less veut utiliser une capacité de terminal, disons passer en gras, il vérifie d’abord la présence d’une LESS_TERMCAP_mdvariable. Si cette variable existe, Less utilise sa valeur en tant que séquence d'échappement pour passer en gras. Sinon, il utilise la valeur de la base de données Termcap. Ce mécanisme permet à l'utilisateur de remplacer les paramètres de la base de données Termcap pour Less.

Les LESS_TERMCAP_*paramètres les plus utiles sont les séquences d'échappement. Vous pouvez mapper des attributs sur différents attributs. Vous pouvez utiliser la tputcommande pour rechercher la valeur d'une fonctionnalité du terminal actuel dans la base de données Termcap ou Terminfo du système. Vous pouvez utiliser directement des séquences d'échappement si cela ne vous dérange pas d'être dépendant du terminal. Par exemple, ce paramètre indique à Less d'afficher en gras rouge lorsque vous êtes invité à afficher en gras:

LESS_TERMCAP_md=$(tput md; tput AF 1)

ou si votre tputcommande ne supporte pas les noms Termcap:

LESS_TERMCAP_md=$(tput bold; tput setaf 1)

L'homme envoie moins de texte avec une mise en forme très simple qui ne peut qu'exprimer en gras et en italique. De plus, Less utilise diverses fonctionnalités de formatage pour son usage interne, notamment pour mettre en évidence les résultats de la recherche et afficher la ligne de mode en bas. Voici certaines des séquences d'échappement utilisées par Less (je ne répertorie que les fonctionnalités qu'il est raisonnablement utile de remapper):

termcap terminfo  
ks      smkx      make the keypad send commands
ke      rmkx      make the keypad send digits
vb      flash     emit visual bell
mb      blink     start blink
md      bold      start bold
me      sgr0      turn off bold, blink and underline
so      smso      start standout (reverse video)
se      rmso      stop standout
us      smul      start underline
ue      rmul      stop underline

Pour afficher la sortie en couleur, utilisez la setaffonctionnalité (ou AFavec Termcap).

Les LESS_TERMCAP_*paramètres ne sont pas mentionnés dans la LESSdocumentation. La meilleure référence que je puisse offrir est ma réponse ici .

Gilles, arrête de faire le mal
la source
8
Merci. J'ai aussi brièvement examiné le code source de less et constaté que lorsque vous définissez LESS_TERMCAP_DEBUG sur quelque chose, puis ouvrez man, vous pouvez voir quelque chose comme la source des pages de manuel et toutes les balises de capacité utilisées. Il est plus facile de décider de ce que vous voulez définir.
Anselm
1
Voir cette réponse sur la façon de définir tous les LESS_TERMCAP_*vars env en utilisant tputplutôt que des caractères d'échappement.
Kaushal Modi
3

La réponse de Gilles est excellente, mais cela m'a rendu curieux:

Termcap est en grande partie obsolète, ayant été remplacé par Terminfo

  1. Si Termcap est obsolète, je souhaite passer à Terminfo

  2. Je souhaite également m'éloigner de Termcap car j'ai trouvé un bogue. Disons que vous mettez une variable termcap dans votre ~/.profileou similaire:

    export LESS_TERMCAP_so=$(printf '\33[5;30;43m')
    export LESS_TERMCAP_se=$(printf '\33[m')

    Après cela, si vous entrez set, les variables Termcap gâchent votre sortie couleur.

Pour basculer sur Terminfo, vous pouvez créer un fichier xterm-pretty.ti:

xterm-pretty|xterm with pretty colors,
# exit standout mode
  rmso=\e[m,
# begin standout mode
  smso=\e[5;30;43m,
# similar terminal
  use=xterm,

Compiler et installer le fichier:

tic xterm-pretty.ti

Ajouter une ligne à ~/.profileou similaire:

TERM=xterm-pretty
Steven Penny
la source