Come faccio a resettare lo scrollback nel terminale tramite un comando shell?

30

Quando usi Terminal.app, puoi cancellare lo schermo usando la shell incorporata clear o premendo ^ + L (Control-L).

Tuttavia, tutto ciò non fa altro che spingere il contenuto della schermata corrente indietro di un'altezza dello schermo e reimpostare il cursore / input sulla prima riga. Significa che puoi ancora scorrere indietro e vederlo.

Ciò che sei anche in grado di fare, è resettare l'intero scrollback premendo + K (Comando-K).

Dopo averlo fatto, non puoi tornare indietro.

In determinate situazioni (in particolare, prima di eseguire screen o vim ), vorrei ripristinare lo scorrimento prima che il comando venga effettivamente eseguito.

Esiste un comando (come clear ) implementato in OS X che mi consente di farlo? Data l'esistenza di pbcopy e pbpaste , sto pensando che potrebbe esistere qualcosa di simile che mi permetterà di farlo.

    
posta Jason Salaz 21.11.2011 - 17:31
fonte

3 risposte

48

Il terminale supporta un'estensione della sequenza di escape ED (Erase in Display) per cancellare lo scroll-back. È anche supportato da xterm. Il comando ED, descritto nel manuale VT100 , accetta questi valori per il parametro 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

Terminale ( e xterm ) aggiunge:

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

Si noti che questo cancella solo lo scroll-back, non lo schermo. Ciò consente di cancellare l'uno o l'altro o entrambi inviando due sequenze di escape.

Ad esempio, puoi cancellare lo schermo e lo scroll-back con il seguente comando shell: clear && printf '\e[3J'

(Il comando clear cerca la sequenza appropriata per cancellare lo schermo per il terminale corrente, ma la sequenza di escape "cancella scroll-back" è personalizzata e deve essere hardcoded Se lo inserisci in uno script di shell che non sai per certo che verrà eseguito solo con Terminal, dovresti controllare che $ TERM_APPLICATION sia Apple_Terminal prima di inviarlo.)

    
risposta data 08.12.2013 - 16:28
fonte
30

⌘K, collegamento a "Visualizza > Cancella scrollback ".

UPDATE : può essere automatizzato con AppleScript con il seguente comando:

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

... che puoi ovviamente alias in qualunque cosa desideri, o memorizzare in una funzione nel tuo script di accesso ~/.profile :)

Però, come sicurezza, per poterlo usare anche in background senza rischiare di inviare una sequenza di tasti a un'app di fronte sbagliata, ti consiglio di circondarlo con il seguente test:

if application "Terminal" is frontmost

... che ci dà il seguente codice:

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

... che a sua volta, correttamente escapato e alias ed, termina in:

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

Ed ecco il tuo nuovo clear ! :)

    
risposta data 21.11.2011 - 19:13
fonte
5

Ecco il codice che funziona sia per MacOS Terminal che per iTerm2. Neanche la finestra deve essere in primo piano.

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

Non chiedermi come funziona.

    
risposta data 14.03.2018 - 23:13
fonte

Leggi altre domande sui tag