GNU/Linux >> Tutoriels Linux >  >> Linux

Comportement étrange de la commande Bash Clear supprime le tampon de défilement.?

Chaque fois que je cours en clair dans mon terminal, il supprime le tampon de défilement du haut de l'écran à la ligne actuelle. Je l'ai essayé dans xterm, st et urxvt, et le problème persiste. Existe-t-il un moyen de modifier le comportement de clear afin qu'il ne touche pas le tampon de défilement ?

Réponse acceptée :

Le commentaire "du haut de l'écran à la ligne courante" est ambigu. Si vous vouliez dire du haut de la partie visible de l'écran, ce n'est pas le scrollback . Le scrollback d'un terminal est la partie que vous ne pouvez voir qu'en utilisant la barre de défilement (ou des touches appropriées telles que shift pageup).

XTerm Control Sequences documente la séquence d'échappement pertinente :

CSI Ps J  Erase in Display (ED).
            Ps = 0  -> Erase Below (default).
            Ps = 1  -> Erase Above.
            Ps = 2  -> Erase All.
            Ps = 3  -> Erase Saved Lines (xterm).

La capacité de description du terminal clear utilise l'avant-dernier, par exemple,

clear=E[HE[2J

pour positionner le curseur en haut à gauche, puis effacer tout l'écran (visible). Vous pourriez utilisez Effacer ci-dessous , mais qui n'est pas utilisé dans la description du terminal.

Se référant à l'effacement du scrollback :Il s'agit d'une fonctionnalité spécifique au terminal, à l'origine une séquence d'échappement dans xterm (1999, documentée dans ctlseqs.ms mais non mentionnée dans les modifications) et plus tard (2011) implémentée en tant qu'extension pour la console Linux et la description de terminal correspondante. La base de données du terminal le répertorie comme une "extension diverse".

Actuellement, ces descriptions de terminaux ont la fonctionnalité :

  • linux3.0 (la valeur par défaut actuelle pour "linux")
  • mastic
  • xterm+basic (un bloc de construction utilisé dans la plupart des variantes "xterm")

Que ce soit pris en charge dans les sosies xterm tels que VTE, il faudrait répondre par des tests (il n'y a pas de documentation utile pour VTE ou Konsole).

Si vous préférez ne pas utiliser l'extension, vous pouvez supprimer le E3 capacité de la description du terminal que vous utilisez, par exemple,

infocmp -1x >foo
edit foo, removing the line with "E3="
tic -x foo

J'ai suggéré d'utiliser les options -1 et -x pour simplifier la mise en forme et afficher la fonctionnalité à modifier. L'exemple donné dans https://ghostbin.com/paste/kfsbj est cohérent avec ce conseil :

  • le nom de chemin /home/flowerpick/.terminfo/x/xterm serait utilisé par ncurses
  • les capacités AX et XT sont des capacités étendues (comme E3 ), affiché avec le -x option.

Si vous utilisez plus d'un type de terminal, vous devrez le faire pour chacun (valeur de $TERM ), et la modification ne s'applique qu'à la machine sur laquelle vous exécutez clear . Les deux premières lignes de infocmp la sortie montre sur laquelle vous travaillez :

#   Reconstructed via infocmp from file: /home/flowerpick/.terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),

Par exemple, uxrvt définit $TERM à quelque chose comme rxvt-unicode , produisant des lignes comme celle-ci dans infocmp :

#       Reconstructed via infocmp from file: /lib/terminfo/r/rxvt-unicode       
rxvt-unicode|rxvt-unicode terminal (X Window System),

Le st le programme utilise xterm (ou éventuellement xterm-256color ), même si cela fait un moment que je n'ai pas vu une copie de ça qui a assez bien fonctionné pour être commenté.

En relation :Forcer l'écran à rester vide et ignorer l'entrée ?

Au fait, vous pourriez avoir un alias pour clear qui envoie la séquence d'échappement donnée (en ignorant la description du terminal), mais je n'ai vu cela signalé par personne.

Si vous vouliez "effacer ci-dessus", ce n'est pas aussi simple que de taper "effacer". L'échappement

Linux
  1. Comment effacer l'historique de Bash sous Linux

  2. 5 utilisations de la commande mv dans le terminal Linux

  3. Comment effacer le terminal dans Ubuntu

  4. commande d'exportation bash

  5. Commande ip dans le terminal Mac OS X

Commande de lecture bash

Bash Heredoc

Commande de source bash

Commande d'historique sous Linux (historique de bash)

Commande Bash printf

Script bash (II)