web-dev-qa-db-fra.com

Comment "moins" bascule-t-il sur le texte, puis sur l'invite?

Lorsque je lance less sur un fichier, l'invite disparaît et le contenu du fichier s'affiche à l'écran. Puis quand j'appuie sur q, il retourne à l’invite. Je pense que less le fait en enregistrant le tampon de terminal actuel, en ouvrant un nouveau tampon, en exportant le fichier dans le nouveau, puis en le fermant, en supprimant le nouveau tampon et en restaurant l'ancien, mais je ne sais pas quoi ce processus s'appelle ou comment il le fait.

J'ai regardé dans man less mais je n'ai rien trouvé. J'ai essayé de le rechercher sur Google, mais je n'ai rien trouvé d'utile, si ce n'est que la commande screen peut faire la même chose avec les sessions Shell.

En fin de compte, je demande parce que je veux que git diff utilise un nouveau tampon au lieu d’imprimer en ligne. J'ai déjà défini GIT_PAGER=less et git --paginate diff, mais ils n'ont rien changé. Et j'ai une solution de contournement, mais elle est un peu longue: git diff --color=always | less -R

Mise à jour: après quelques recherches, il apparaît que tput smcup et tput rmcup sont des commandes de haut niveau permettant de faire la même chose, probablement à l'aide du package termcap.

6
wjandrea

Toutes les fonctions de gestion d’écran de less se trouvent dans son module screen.c . Au démarrage, à moins d'être en mode "no init" (_-X_ ou _--no-init_), il génère sa chaîne _sc_init_, qui est termcap 's ti chaîne ( "initialisation du terminal" , qui prépare le terminal à une opération de contrôle du curseur en plein écran). En sortie, il sort sa chaîne _sc_deinit_, qui est termcap ’s te chaîne .

Le comportement que vous voyez est le comportement par défaut avec git, si less n'est pas configuré (, c'est-à-dire le LESS la variable est non définie); lorsque c'est le cas, git exécute less avec les options FRX, ce qui entraîne la fermeture de less si le contenu ne tient que sur un seul écran, les couleurs d'affichage et l'initialisation ignorée. le terminal.

Pour obtenir le comportement que vous recherchez, définissez LESS sur _-R_ ou définissez le paramètre _core.pager_ git sur _less -+X_ (voir _man git-config_ pour plus de détails).

4
Stephen Kitt