2015-07-22 42 views

risposta

7

La maggior parte degli emulatori di terminale è in grado di salvare e ripristinare il contenuto dello schermo.

I codici terminfo per questo sono smcup per accedere alla modalità a schermo intero e rmcup per uscire. (I codici termcap sono ti e te.)

Se queste funzionalità sono attivate nel database terminfo, qualsiasi programma che utilizza ncurses stamperà la stringa smcup in entrata, e la stringa rmcup in uscita.

Sul sistema che sto utilizzando in questo momento, le corde sono (con \E che rappresenta il carattere di escape):

smcup: \E7\E[?1;47h 
rmcup: \E[2J\E[?1;47l\E8 

Questo ripristina il contenuto precedente dello schermo, nonché la posizione del cursore.

I significati specifici delle sequenze (per xterm) sono documented here:

  • smcup:
    • \E7 Salva Cursore
    • \E[?1;47h applicazione Tasti cursore; Utilizzare schermo alternativo Buffer
  • rmcup:
    • \E[2J schermata Cancella
    • \E[?1;47l applicazione Tasti cursore; Uso normale buffer dello schermo
    • \E8 Ripristinare Cursore

(Ciò presuppone che sto comprendere l'uso del punto e virgola correttamente;. Io non sono sicuro al 100% di quello)

+0

Ho imparato qualcosa di nuovo. Questo spiega molto; grazie. – Qix

+2

L'impostazione dei tasti cursore dell'applicazione normalmente non viene eseguita in smcup/rmcup - la maggior parte dei programmi presume che sia stata eseguita nella stringa di inizializzazione (is2). Vedi ad esempio [mastice] (http://invisible-island.net/ncurses/terminfo.src.html#tic-putty) nel database del terminale ncurses. E, naturalmente, la modalità 47 è stata a lungo obsoleta con xterm (dal [1998] (http://invisible-island.net/xterm/xterm.log.html#xterm_90)). –

+1

@ThomasDickey: Apparentemente le mie voci termcap/terminfo non sono aggiornate (il che non è sorprendente). Grazie per l'informazione. Farò qualche ricerca e aggiornerò la mia risposta Real Soon Now. –

8

Per quanto riguarda la risposta da @Keith Thompson — non esattamente:

  • vim non usa l'ottimizzazione dello schermo di ncurses che invia smcup e rmcup automaticamente. Piuttosto, è un termcap application. segue una convenzione utilizzata dalla maggior parte (non tutte) delle applicazioni termcap. Esistono alcune implementazioni di vi che non sono ad esempio (su IRIX64 forse).
  • come per "la maggior parte dei terminali" —, in realtà, i sostegni di xterm sono una piccola parte di terminal database (conteggiando anche le variazioni, meno del 10%). Riformulare che a qualcosa come "i emulatori di terminale più comuni su Linux.
  • il terminale non Salva e ripristinare il contenuto dello schermo. Invece, si passa tra due schermi (nella documentazione di xterm 'normale' e" alternate "). In xterm per esempio, si può sempre passare tra i due utilizzando una voce di menu. la Domanda xterm Why doesn't the screen clear when running vi? dà più dettagliatamente.
  • per una migliore contesto, si noti che smcup è un (oscuro) abbreviazione di set -mode-cursor-positioning o start modalità di posizionamento del cursore. (anche indirizzo del cursore). Il r in rmcup significa "reset" (e m significa "modalità"). set/reset hanno connotazioni diverse da salvataggio/ripristino; con quest'ultimo l'utente è portato a credere che i valori possano essere accumulati.