Le linee terminali di OS X non vanno in scrollback


12

Ho un problema che si presenta quando si utilizza il Terminale di Mac OS X (TERM = xterm): a volte si trova in uno stato in cui le linee che scorrono dall'alto non vengono aggiunte al buffer di scorrimento. Non sto usando screeno simili; questa è una semplice shell bash all'interno di una scheda Terminale.

Non lo fa immediatamente dopo aver aperto una nuova scheda. Credo che sia un effetto collaterale di qualcosa che ho eseguito nella scheda del problema. La mia ipotesi è che abbia qualcosa a che fare con l'emulazione xterm, forse la regione di scorrimento.

Cosa non ha funzionato:

  • Ripristino soft e hard tramite il menu Shell
  • In esecuzione resetnella scheda

Esiste un modo affidabile per ripristinare il terminale e / o lo stato xterm?

Qualcuno può fornire una spiegazione per ciò che sta accadendo, anche se l'unica soluzione è chiudere la scheda e aprirne una nuova?


Quale versione di Mac OS X stai utilizzando? Hai il buffer su qualcosa di meno di "illimitato" e le linee che ti mancano sono semplicemente le linee più vecchie che sono cadute dal retro del buffer?
Spiff

Mac OS X 10.6.2 e il buffer è di 10.000 linee, tuttavia le linee perse sono quelle che scorrono appena fuori dallo schermo. Se sfoglio una schermata, quelle linee non ci sono, e infatti mentre le linee scorrono dall'alto, la pagina più recente di scrollback non cambia mai.
Steve Madsen,

Risposte:


19

Ciò significa che il terminale utilizza il buffer dello schermo alternativo. C'è una schermata principale, che scorre nel registro di scorrimento, e una schermata alternativa che non lo fa. Programmi "a schermo intero" o "orientati allo schermo" come top, less, emacs, vim e screen commutano il terminale sullo schermo alternativo per impostazione predefinita.

Ogni schermo ha i suoi contenuti e stato. Avere una schermata alternativa consente ai programmi di assumere il controllo dell'intero display, quindi ripristinare i contenuti precedenti quando escono, tornando alla schermata principale.

A partire da Mac OS X Lion 10.7, Terminal ha una voce di menu che puoi usare per cambiare manualmente le schermate:

Visualizza> Mostra / nascondi schermata alternativa

Questo viene fornito principalmente in modo da poter visualizzare o copiare il testo dalla schermata alternativa dopo l'uscita da un programma "a schermo intero". Xterm ha un comando simile.

È inoltre possibile utilizzarlo per forzare manualmente un programma a utilizzare una schermata particolare, ad esempio per controllare se l'output passa al registro di scorrimento. Tuttavia, se stai attualmente utilizzando un programma che passa esplicitamente alla schermata alternativa, potresti confonderlo o ottenere risultati imprevisti se lo forza sulla schermata principale mentre il programma è in esecuzione, quindi usalo con cautela.

A seconda del programma, potrebbe essere presente un argomento della riga di comando o altri mezzi per configurarlo per utilizzare la schermata principale. ad es less -X.

Alcune voci terminfo sono progettate specificamente per sopprimere utilizzando la schermata alternativa, ad es xterm1. TERM=xterm1 emacseseguirà Emacs sulla schermata principale. Non consiglio di usarlo xterm1permanentemente, perché disabilita una serie di altre utili funzionalità rispetto all'impostazione predefinita xterm-256colorsu Lion.

Puoi anche cambiare schermata usando il tputcomando per emettere sequenze di escape all'interno di una shell o di uno script. tput smcuppassa alla schermata alternativa e tput rmcuptorna alla schermata principale.

Per vedere quale programma è attualmente in esecuzione, guarda il nome del programma visualizzato nella finestra Terminale o nel titolo della scheda, oppure guarda la finestra Inspector ( Shell> Mostra Inspector ). L'ultimo processo nella lista di Inspector è (di solito) il programma corrente usando lo schermo. È quello che dovrai configurare per utilizzare invece la schermata principale.


1
Sembra una risposta molto promettente. Una spiegazione ragionevole del fatto che un programma potrebbe chiudersi in modo anomalo, lasciando attiva la schermata alternativa?
Steve Madsen,

Se torni nella shell dopo aver eseguito un programma "a schermo intero", sì, è una possibilità, anche se i programmi più popolari, come quelli che ho elencato, sono affidabili sulla pulizia dopo se stessi. Se un programma "a schermo intero" si arresta in modo anomalo potrebbe lasciare il terminale sullo schermo alternativo. Tuttavia, hai detto di aver provato Shell> Invia Hard Reset , che include il ritorno alla schermata principale. Se dovesse succedere di nuovo, potresti provare a usare questo comando per tornare indietro:tput rmcup
Chris Pagina

Un'altra possibilità è che un programma abbia lasciato il terminale con una "regione di scorrimento". Esistono codici per indicare al terminale di scorrere solo un sottointervallo di righe durante lo scorrimento. I programmi lo usano per visualizzare le linee di stato, ad esempio, che non scorrono fuori dallo schermo. Se la regione di scorrimento non include la riga superiore, il testo non scorrerà nel registro di scorrimento. Ancora una volta, tuttavia, hai detto di aver provato un Hard Reset, che dovrebbe cancellare anche quello.
Chris Page

2
Nel mio caso, ciò che sembra essere accaduto è che la mia sshsessione su una macchina remota non è riuscita (scaduto?) Mentre ero dentro vi, apparentemente lasciando il terminale nella schermata alternativa (perché vinon mi è mai stata data la possibilità di ripulire). In seguito, qualsiasi nuova sshsessione nello stesso terminale mostrerebbe il problema descritto dall'OP, fino a quando non avessi risolto il problema selezionando la voce di menu Visualizza> Nascondi schermata alternativa .
Efesto,

Grazie, ha aiutato Visualizza> Mostra / Nascondi schermo alternativo . Ha una combinazione chiave che devo aver inconsapevolmente colpito e non sapevo cosa è successo o come annullare
aexl
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.