
Cada vez que ejecuto clear en mi terminal, elimina el búfer de desplazamiento hacia atrás desde la parte superior de la pantalla hasta la línea actual. Lo probé en xterm, st y urxvt y el problema persiste. ¿Hay alguna manera de cambiar el comportamiento de borrar para que no toque el búfer de retroceso?
Respuesta1
El comentario "desde la parte superior de la pantalla hasta la línea actual" es ambiguo. Si te referías desde la parte superior de laparte visiblede la pantalla, ese no es eldesplazarse hacia atrás. El retroceso de una terminal es la parte que puede ver solo usando la barra de desplazamiento (o teclas adecuadas como Mayús hacia arriba).
Secuencias de control XTermdocumenta la secuencia de escape relevante:
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 capacidad de descripción del terminal clear
utiliza el penúltimo, por ejemplo,
clear=\E[H\E[2J
para colocar el cursor en la parte superior izquierda y luego borrar toda la pantalla (visible). Túpodríautilizar elBorrar debajo, pero eso no se utiliza en la descripción del terminal.
Refiriéndose a la limpieza deldesplazarse hacia atrás: Esa es una característica específica del terminal, originalmente una secuencia de escape en xterm (1999, documentado enctlseqs.mspero no mencionado en los cambios) y posterior (2011) implementado como una extensión para la consola Linux y la descripción del terminal correspondiente. La base de datos del terminal lo enumera como un"extensiones varias".
Actualmente, estas descripciones de terminales tienen la característica:
- linux3.0(el valor predeterminado actual para "linux")
- masilla
- xterm+básico(un componente básico utilizado en la mayoría de las variantes de "xterm")
Si es compatible con similares a xterm como VTE, se tendría que responder mediante pruebas (no hay documentación útil para VTE o Konsole).
Si prefiere no utilizar la extensión, puede eliminar laE3
capacidad de la descripción del terminal que utiliza, por ejemplo,
infocmp -1x >foo
edit foo, removing the line with "E3="
tic -x foo
Sugerí usar las opciones.-1
y-x
para simplificar el formato y mostrar la característica a cambiar. El ejemplo dado enhttps://ghostbin.com/paste/kfsbjes consistente con ese consejo:
- el nombre de la ruta
/home/flowerpick/.terminfo/x/xterm
sería utilizado por ncurses - las capacidades
AX
yXT
son capacidades extendidas (comoE3
), que se muestran con la-x
opción.
Si está utilizando más de un tipo de terminal, deberá hacer esto para cada uno (valor de $TERM
), y el cambio solo se aplica a la máquina donde ejecuta clear
. Las primeras líneas del infocmp
resultado muestran en cuál está trabajando:
# Reconstructed via infocmp from file: /home/flowerpick/.terminfo/x/xterm
xterm|xterm terminal emulator (X Window System),
Por ejemplo, uxrvt
establece $TERM
algo como rxvt-unicode
, produciendo líneas como esta en infocmp
:
# Reconstructed via infocmp from file: /lib/terminfo/r/rxvt-unicode
rxvt-unicode|rxvt-unicode terminal (X Window System),
El st
programa usa xterm
(o posiblemente xterm-256color
), aunque ha pasado un tiempo desde que vi una copia deesoque funcionó lo suficientemente bien como para comentar.
Por cierto, tupodríaTengo un alias para clear
el cual se envía la secuencia de escape dada (ignorando la descripción del terminal), pero nadie ha informado de esto.
Si desea "borrar arriba", no es tan sencillo como escribir "borrar". El escape \033[1J
se borra desde la esquina superior izquierda hasta la posición actual del cursor. Podrías crear un script que haga esto, para borrar solo ellíneasencima de su cursor actual:
- utilizar el informe de posición del cursor para encontrar la fila/columna en la que se encuentra actualmente el cursor, y
- si el cursor no está en la primera línea (guardando esa posición), mueva el cursor hacia arriba una línea y luego (con la
hpa
secuencia) muevabienun número grande, - emitir el "claro arriba", y
- volver a la posición original usando
cup
(direccionamiento del cursor).
Esa parte con el informe de posición del cursor no parece funcionar en (por ejemplo) un enlace de línea de lectura, así que sugerí un script. Podría crear un enlace que utilizara las capacidades del cursor para guardar/restaurar si no existiera el problema de estar en la primera línea.
Respuesta2
Tuve el mismo problema y agregar un alias me .bashrc
ayudó:
alias clear='printf "\E[H\E[2J"'
Recordatorio: ¡Los cambios .bashrc
entran en vigor después de abrir una nueva terminal!
Respuesta3
Rutinariamente uso clear
para que mi símbolo del sistema se mueva a la parte superior de la pantalla y, sin darme cuenta, borro el búfer de desplazamiento hacia atrás, a menudo con contenido importante, como mensajes de error útiles de operaciones anteriores.
Al revisar la página de manual, dice claramente:
clear borra la pantalla si esto es posible, incluido su búfer de desplazamiento hacia atrás (si se define la capacidad extendida "E3").
También hay una opción allí:
-x no intenta borrar el buffer de desplazamiento hacia atrás del terminal usando la capacidad extendida “E3”.
Desde entonces, agregué esto a mi lista de alias en ~/.bashrc:
alias clear='clear -x'
Todavía recibo el mensaje para moverme a la parte superior cuando ejecuto clear
, pero ahora puedo desplazarme hacia atrás si quiero.
Respuesta4
Mi solución para esto es agregar el siguiente alias a mi.bashrc
alias clear='tput reset'
En caso de que uno desee utilizar el comportamiento original, por ejemplo, para borrar información confidencial del búfer de desplazamiento hacia atrás, la versión sin alias se puede invocar fácilmente anteponiendo una barra invertida \
como se explica.aquíoaquí. Eso se vería así
\clear