Vedo questi bei colori nelle manpage visualizzati con meno quando si impostano un mucchio di queste variabili. Cosa significano, dov'è la documentazione? Questo è interpretato da less o termcap?
Vedo questi bei colori nelle manpage visualizzati con meno quando si impostano un mucchio di queste variabili. Cosa significano, dov'è la documentazione? Questo è interpretato da less o termcap?
Risposte:
Termcap è una libreria che Less utilizza per accedere al terminale. Termcap è in gran parte obsoleto, essendo stato sostituito da Terminfo , ma Terminfo offre un'interfaccia di compatibilità Termcap alle applicazioni. Meno è contenuto con l'interfaccia Termcap e lo utilizza.
La libreria Termcap è una descrizione delle strutture del terminale. Ogni struttura è identificata da un codice di due lettere (o più generalmente di due caratteri). Ad esempio, hc
identifica i terminali cartacei (ovvero stampanti, non schermi); co
è il numero di colonne; md
inizia a visualizzare il testo in grassetto. Ogni funzionalità ha un valore, che può essere un valore booleano (come con hc
), un numero intero (come con co
) o una stringa (come con md
). Molte stringhe sono sequenze di escape che le applicazioni possono inviare al terminale per ottenere un certo effetto.
Perché sfuggire alle sequenze? Perché l'interfaccia tra il terminale e l'applicazione è un flusso di caratteri (più precisamente, un flusso di caratteri in ciascuna direzione: uno per l'input dell'utente, uno per l'output da visualizzare). Quando un'applicazione scrive un carattere sul terminale, di solito viene visualizzato. Alcuni personaggi hanno un comportamento diverso: sono personaggi di controllo, che fanno cose come spostare il cursore, cambiare gli attributi di visualizzazione, ecc. Ci sono molti più comandi che caratteri di controllo, quindi alla maggior parte dei comandi si accede da sequenze di escape, che iniziano con un personaggio speciale (spesso il personaggio di fuga, da cui il nome).
Ad esempio, quando Less desidera visualizzare del testo in grassetto, cerca il valore della md
funzionalità. Questa è una stringa che Less scrive sul terminale. Il terminale riconosce questa stringa come sequenza di escape e regola il suo stato interno in modo che i caratteri successivi vengano visualizzati in grassetto.
All'inizio dei terminali hardware, diversi marchi avevano sequenze e capacità di fuga diverse; il database e l'interfaccia Termcap sono stati inventati in modo tale che le applicazioni non debbano conoscere ogni modello di terminale. Oggi la maggior parte degli emulatori di terminali ha capacità molto simili, ma il database Termcap o Terminfo è ancora utile per far fronte a piccole differenze.
Le LESS_TERMCAP_*
variabili possono essere impostate nell'ambiente o nel .lesskey
file . Fornisce meno valori alternativi per le funzionalità del terminale. Quando Less vuole usare una funzionalità di terminale, diciamo passa a grassetto, controlla prima se c'è una LESS_TERMCAP_md
variabile. Se questa variabile esiste, Less utilizza il suo valore come sequenza di escape per passare al grassetto. In caso contrario, utilizza il valore dal database Termcap. Questo meccanismo consente all'utente di sovrascrivere le impostazioni del database Termcap per Meno.
Le LESS_TERMCAP_*
impostazioni più utili sono le sequenze di escape. È possibile mappare gli attributi a attributi diversi. È possibile utilizzare il tput
comando per cercare il valore di una capacità per il terminale corrente nel database Termcap o Terminfo del sistema. Puoi usare direttamente le sequenze di escape se non ti dispiace essere dipendenti dal terminale. Ad esempio, questa impostazione dice a Meno di essere visualizzata in grassetto rosso quando viene richiesto di visualizzare in grassetto:
LESS_TERMCAP_md=$(tput md; tput AF 1)
o se il tuo tput
comando non supporta i nomi Termcap:
LESS_TERMCAP_md=$(tput bold; tput setaf 1)
Man invia meno testo con una formattazione molto semplice che può solo esprimere grassetto e corsivo. Inoltre, Less utilizza varie funzionalità di formattazione per il suo uso interno, ad esempio per evidenziare i risultati della ricerca e visualizzare la riga della modalità in basso. Ecco alcune delle sequenze di escape utilizzate da Less (elenco solo le funzionalità che è ragionevolmente utile rimappare):
termcap terminfo
ks smkx make the keypad send commands
ke rmkx make the keypad send digits
vb flash emit visual bell
mb blink start blink
md bold start bold
me sgr0 turn off bold, blink and underline
so smso start standout (reverse video)
se rmso stop standout
us smul start underline
ue rmul stop underline
Per mostrare l'output a colori, utilizzare la setaf
funzionalità (o AF
con Termcap).
Le LESS_TERMCAP_*
impostazioni non sono menzionate nella LESS
documentazione. Il miglior riferimento che posso offrire è la mia risposta qui .
LESS_TERMCAP_*
ambienti usando tput
invece di caratteri di escape.
La risposta di Gilles è eccellente, ma questo mi ha incuriosito:
Termcap è in gran parte obsoleto, essendo stato sostituito da Terminfo
Se Termcap è obsoleto, voglio passare a Terminfo
Voglio anche passare a Termcap perché ho trovato un bug. Supponi di aver inserito una variabile termcap nella tua ~/.profile
o simile:
export LESS_TERMCAP_so=$(printf '\33[5;30;43m')
export LESS_TERMCAP_se=$(printf '\33[m')
Dopodiché, se si immette set
, le variabili Termcap creano confusione nell'output del colore.
Per passare a Terminfo, è possibile creare un file xterm-pretty.ti
:
xterm-pretty|xterm with pretty colors,
# exit standout mode
rmso=\e[m,
# begin standout mode
smso=\e[5;30;43m,
# similar terminal
use=xterm,
Compila e installa il file:
tic xterm-pretty.ti
Aggiungi linea ~/.profile
o simile:
TERM=xterm-pretty