¿Cómo restablezco el scrollback en el terminal a través de un comando de shell?

30

Al usar Terminal.app, puedes borrar la pantalla usando el shell incorporado clear o presionando ^ + L (Control-L).

Sin embargo, todo esto es hacer retroceder el contenido de la pantalla actual una altura de pantalla y restablecer el cursor / entrada en la primera línea. Lo que significa que todavía puedes desplazarte hacia atrás y verlo.

Lo que también puedes hacer, es restablecer todo tu scrollback presionando + K (Comando-K).

Después de hacer esto, no puedes retroceder en absoluto.

En ciertas situaciones (notablemente, antes de ejecutar screen o vim ), me gustaría restablecer el desplazamiento hacia atrás antes de que se ejecute el comando.

¿Hay un comando (como clear ) que se implementa en OS X que me permite hacer esto? Dada la existencia de pbcopy y pbpaste , creo que podría existir algo similar que me permita hacer esto.

    
pregunta Jason Salaz 21.11.2011 - 17:31

3 respuestas

48

El terminal admite una extensión de la secuencia de escape ED (Borrar en la pantalla) para borrar el desplazamiento hacia atrás. También es compatible con xterm. El comando ED, descrito en el VT100 manual , acepta estos valores para el parámetro Ps:

ESC [ Ps J

Parameter   Parameter Meaning

0           Erase from the active position to the end of the screen
1           Erase from start of the screen to the active position
2           Erase all of the display

Terminal ( y xterm ) agrega:

3           Erase the scroll-back (aka “Saved Lines”)

Tenga en cuenta que esto solo borra el desplazamiento hacia atrás, no la pantalla. Esto le permite borrar una u otra, o ambas, enviando dos secuencias de escape.

Por ejemplo, puede borrar la pantalla y el desplazamiento hacia atrás con el siguiente comando de shell: clear && printf '\e[3J'

(El comando clear busca la secuencia apropiada para limpiar la pantalla del terminal actual, pero la secuencia de escape “borrar desplazamiento hacia atrás” es personalizada y debe estar codificada. Si lo pones en un script de shell Si no sabe con certeza, solo se ejecutará con Terminal, debe comprobar que $ TERM_APPLICATION es Apple_Terminal antes de enviarlo.)

    
respondido por el Chris Page 08.12.2013 - 16:28
30

⌘K, acceso directo a "Ver > Borrar scrollback ".

ACTUALIZACIÓN : esto se puede automatizar con AppleScript mediante el siguiente comando:

osascript -e 'tell application "System Events" to keystroke "k" using command down'

... que puedes, por supuesto, alias a lo que quieras, o almacenar en una función en tu script de inicio de sesión ~/.profile :)

Sin embargo, como seguridad, para poder usar esto incluso en segundo plano sin correr el riesgo de emitir una pulsación de tecla a una aplicación frontal incorrecta, te aconsejaría rodearla con la siguiente prueba:

if application "Terminal" is frontmost

... que nos da el siguiente código:

osascript -e 'if application "Terminal" is frontmost then tell application "System Events" to keystroke "k" using command down'

... que en turnos, correctamente escapado y alias ed, termina en:

alias clear="osascript -e 'if application \"Terminal\" is frontmost then tell application \"System Events\" to keystroke \"k\" using command down'"

¡Y aquí está tu nuevo clear ! :)

    
respondido por el MattiSG 21.11.2011 - 19:13
5

Aquí hay un código que funciona tanto para macOS 'Terminal como para iTerm2. Tampoco necesita que la ventana esté en primer plano.

printf '3[2J3[3J3[1;1H'

No me preguntes cómo funciona.

    
respondido por el Alexander 14.03.2018 - 23:13

Lea otras preguntas en las etiquetas