Domanda

Devo disattivare i margini automatici secondo la seguente dichiarazione dal manuale di Screen sul mio Mac

  

Se il tuo terminale è un " true "   terminale a margine automatico (non consente   l'ultima posizione sullo schermo          per essere aggiornato senza scorrere lo schermo) considera l'utilizzo di una versione   del termcap del tuo terminale          i margini automatici sono disattivati.

Come puoi disattivare i margini automatici in base al termcap del tuo terminale?

È stato utile?

Soluzione

Secondo Sequenze di controllo XTerm , questa sequenza dovrebbe fare ciò che è stato chiesto:

CSI ? 7 l

Cioè,

printf '\033[?7l'

Il 7 è documentato come

        Ps = 7  -> Wraparound Mode (DECAWM).

e il carattere finale l (L minuscola) indica questo come un reset piuttosto che un controllo set .

Per qualsiasi motivo, il nome terminfo per questo è più oscuro: "margini automatici". Queste funzionalità terminfo riguardano la funzione (vedere terminfo (5) ):

   auto_right_margin             am         am        terminal has auto‐
                                                      matic margins
   enter_am_mode                 smam       SA        turn on automatic
                                                      margins
   exit_am_mode                  rmam       RA        turn off automatic
                                                      margins

È interessante notare che la descrizione del terminale vt100-nam in ncurses (che apparentemente nessuno usa) inizializza il terminale per usare margini di automargins usando questa stringa:

rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, 

(il \ E [? 7h lo imposta) e afferma che il terminale non utilizza i margini automatici annullando am . Ha anche le funzionalità terminfo rmam e smam . Quindi potresti farlo per dimostrare che funziona:

tput rmam
stty columns 999
ps -efwwwwwl

e (per l'utente normale) vedere l'elenco ps ben troncato rispetto al margine destro della finestra del terminale.

Le altre varianti vt220-nam e vt320-nam appaiono corrette ...

A proposito, per Mac , useresti i terminfo nomi come rmcup anziché il termcap RA , poiché OSX utilizza tput (terminfo) di ncurses anziché la variante BSD.

Ulteriori letture:

Occasionalmente qualcuno chiede di sopprimere le automargin perché suppongono che i terminali possano scorrere / scorrere a sinistra / a destra per mostrare le informazioni che non sono state inserite in una nuova riga. I terminali che lo fanno sono rari e il terminale OSX non è uno di quelli . Si comporta come un sottoinsieme di xterm, che a sua volta emula la serie di terminali DEC vt52 / vt100 / vt220 / etc. In questa domanda, OP è preoccupato / confuso riguardo a questo paragrafo dal manuale screen :

  

Se il tuo terminale è un " true " terminale auto-margin (non consente il    ultima posizione sullo schermo da aggiornare senza scorrere lo schermo)   considera l'utilizzo di una versione del termcap del tuo terminale che ha automatico   i margini sono disattivati. Ciò garantirà un aggiornamento accurato e ottimale di   lo schermo in tutte le circostanze. La maggior parte dei terminali al giorno d'oggi ha "magia"   margini (margini automatici più l'ultima colonna utilizzabile). Questo è il VT100   tipo di stile e perfettamente adatto per lo schermo. Se tutto ciò che hai è a   & Quot; allineare " lo schermo del terminale con margine automatico sarà contenuto per usarlo, ma   l'aggiornamento di un personaggio messo nell'ultima posizione sullo schermo potrebbe non esserlo   essere possibile finché lo schermo non scorre o il personaggio non viene spostato in a   posizione sicura in qualche altro modo. Questo ritardo può essere ridotto usando a   terminale con capacità di inserimento del carattere.

Quella ultima posizione sullo schermo si riferisce all'angolo in basso a destra del terminale. Nel caso normale, se il cursore si trova nell'angolo in basso a destra e si stampa un carattere, ci si aspetterebbe che il display scorra verso l'alto di una riga e mostri il carattere sulla riga successiva. Inoltre (poiché i terminali possono essere implementati in diversi modi), alcuni potrebbero scorrere verso l'alto quando stampi un personaggio nell' ultima posizione . Il VT100 non lo fa. In questo caso non solo non scorre verso l'alto, ma ignora i caratteri non stampabili mentre è attivo il margine (vedere le domande frequenti su xterm Quella descrizione del wrapping è strana, dicci di più? ). C'è un flag terminfo xenl che è impostato per mostrare quando il terminale ha questo comportamento speciale. Circa un terzo delle descrizioni dei terminali nel database dei terminali presenta questo flag. Mentre la maggior parte di questi sono per terminali che probabilmente non incontrerai mai, tieni presente che i consigli nella pagina del manuale sono stati riscritti in un'era in cui quegli altri terminali avevano la stessa probabilità di essere trovati come un VT100-simile. La storia dei primi cambiamenti per lo schermo è scarsa, ma il testo era nel secondo post dello schermo su Usenet nel 1992. Il post iniziale nel 1987 diceva qualcosa di simile:

  

Schermo   non scrive mai nell'ultima posizione dello schermo, a meno che non sia booleano   la capacità LP si trova nella voce termcap del terminale.   Generalmente,    schermata   non è possibile prevedere se un particolare terminale scorre o meno quando   un carattere è scritto nell'ultima colonna dell'ultima riga;   LP indica che è sicuro scrivere in questa posizione.   Tieni presente che la funzionalità LP è indipendente da am (automatico   margini); per alcuni terminali, come il VT100, è ragionevole   per impostare am nonché LP nella voce termcap corrispondente   (VT100 non sposta il cursore quando viene scritto un carattere   l'ultima colonna di ogni riga).

La formulazione successiva riflette il fatto che il sistema terminfo era prevalente e il nome LP non era il nome termcap scelto per corrispondere con < codice> xenl (è xn ).

Il punto di tutto ciò è che screen tenta di convertire tra programmi che scrivono su diversi tipi di terminali e li fa apparire tutti come un tipo di terminale & # 8212; il che significa che tenta di mettere il testo sul display del terminale in tutte le posizioni. L'angolo in basso a destra è un problema perché alcuni terminali potrebbero scorrere verso l'alto, rovinando il tentativo di scrivere lì. Come soluzione alternativa, alcuni terminali hanno fornito un'alternativa:

  • utilizzando una modalità diversa (inserisci),
  • posiziona il cursore sul vicino all'ultima posizione del display,
  • scrivi i caratteri da compilare, spingendo un carattere nell'ultima posizione e
  • disattiva la modalità di inserimento una volta eseguita (altrimenti un fastidio).

Circa due terzi delle descrizioni nel database dei terminali hanno la capacità di eseguire questa modalità di inserimento ( smir ). Ciò non era ancora perfetto, ma sicuramente valeva la pena menzionarlo nel 1992. Circa un quarto implementa una funzione simile simile ich1 . Alcuni implementano entrambi (e vi potrebbero confondersi con quelli, provando a fare entrambi i metodi).

I sosia di VT100 forniscono un terzo modo per scrivere l'ultima posizione; screen controlla e usa tutto ciò che c'è.

Altri suggerimenti

La maggior parte degli emulatori di terminale, incluso il terminale predefinito mac, non sono "veri terminali a margine automatico" nel senso qui discusso - emulano un terminale serie vt100, che aveva "intelligente" arrotolare. Puoi controllare eseguendo cat e digitando fino alla fine dell'ultima riga: dopo aver digitato l'ultimo carattere, il cursore rimane alla fine della riga (evidenziando il carattere appena digitato) fino a quando non digiti un altro personaggio.

L'unica conseguenza di un "vero terminale con margine automatico" è che un carattere non può essere visualizzato nell'angolo in basso a destra (anche se alcuni programmi sono in grado di aggirare questo spostando un carattere in posizione con ich / ich1 )

Se ti capisco correttamente, stai cercando di impostare la funzione autowrap su NO usando il database terminfo. Se è così, credo che tu possa usare il flag -nam per spegnerlo - qualcosa come vt100-nam dovrebbe farlo. Puoi anche controllare guardando le pagine man per terminfo.

Se questo risolve la tua domanda, segnalo. (^_^) Altrimenti ... commenta di nuovo e controllerò di nuovo per te. Cheers!

Aggiornamento: esiste anche un collegamento che può essere applicato a te per attivare e disattivare l'avvolgimento. Dai un'occhiata al foglio di scelta rapida qui . E ulteriori informazioni per Screen sono disponibili qui (ricerca per avvolgere). Puoi anche controllare qui su come usare setterm (sezione 17.14 Modifica del Impostazioni del terminale). Controlla anche qui per esempi di modifica delle impostazioni.

Di nuovo buona fortuna. (^ _ ^)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top