Impossibile disattivare i margini automatici per termcap in Mac
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?
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:
-
tput
,reset
- inizializza un terminale o interroga terminfo banca dati - sezione cronologia per
tput
- sezione cronologia per
tset
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 ??em> 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 daam
(automatico margini); per alcuni terminali, come il VT100, è ragionevole per impostaream
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. (^ _ ^)