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
.
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).