Ce comportement provient de la fonctionnalité «écran de remplacement» incluse dans certains terminaux (matériels) et dans la plupart des émulateurs de terminaux (logiciels). Ce qui se passe, c’est que certains programmes sensibles aux terminaux basculent sur l’écran alternatif pour effectuer leur travail et reviennent sur l’écran normal lorsqu’ils sont licenciés (quitter, suspendre, etc.). Cela efface efficacement le résultat final de tels programmes.
Une recherche sur le Web sur «terminfo prevent Altscreen» a fourni une page qui traite du problème de l'écran de remplacement et de plusieurs solutions .
Comme le décrit cette page liée, certains programmes peuvent être configurés pour éviter l'utilisation de l'écran de remplacement. L' -X
option moins cher est un moyen indirect de le faire. Vim peut être configuré de la même manière en désactivant les variables t_ti
et t_te
.
Une solution plus large consiste à modifier l' entrée terminfo de votre terminal afin qu'elle n'inclue pas les séquences de contrôle d'écran alternatives. Les entrées terminfo forment une base de données qui indique aux programmes les séquences de contrôle à envoyer à un terminal pour créer certains effets (déplacer le curseur, effacer l'écran, effacer une partie de la ligne en cours, etc.). En modifiant l'entrée terminfo utilisée par votre terminal, vous pouvez vous arranger pour «négliger de dire» à tous les programmes utilisant terminfo que les séquences de contrôle «écran alternatif» existent même.
Dans la liste des séquences de contrôle pour xterm , nous pouvons voir que les séquences de contrôle d’intérêt (pour les émulateurs terminaux semblables à xterm ) sont:
- activer l'écran alternatif:
ESC [ ? 47 h
(de même pour 1047 et 1049), et
- restaurer l'écran normal:
ESC [ ? 47 l
(de même pour 1047 et 1049).
Ces codes sont très probablement présents dans les variables terminfo smcup
et rmcup
. Voici un moyen rapide et sale d’exclure ces variables pour votre terme actuel:
infocmp | sed -e 's/[sr]mcup=[^,]*,//' > /tmp/noaltscreen-terminfo
tic -o ~/.terminfo/ /tmp/noaltscreen-terminfo
Cette méthode est assez rudimentaire et ne fonctionnera certainement pas pour tous les terminaux, mais elle fonctionnera probablement pour la plupart des émulateurs de terminaux similaires à xterm . Idéalement, vous devriez étudier les valeurs dans les variables smcup
et rmcup
de l'entrée terminfo de votre terminal et les modifier de manière prudente pour éviter tout comportement indésirable. La page de discussion / solution ci-dessus contient un fichier terminfo «précuit» que vous pouvez utiliser au lieu de pirater le vôtre (mais quel est l'intérêt de cela?).