Documentazione sulle variabili LESS_TERMCAP_ *?


38

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?

immagine dello schermo

pagina man di ss

Risposte:


45

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, hcidentifica i terminali cartacei (ovvero stampanti, non schermi); coè il numero di colonne; mdinizia 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 mdfunzionalità. 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 .lesskeyfile . 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_mdvariabile. 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 tputcomando 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 tputcomando 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 setaffunzionalità (o AFcon Termcap).

Le LESS_TERMCAP_*impostazioni non sono menzionate nella LESSdocumentazione. Il miglior riferimento che posso offrire è la mia risposta qui .


8
Grazie. Ho anche esaminato brevemente il codice sorgente di less e ho scoperto che quando imposta LESS_TERMCAP_DEBUG su qualcosa e poi apri man puoi vedere qualcosa come la fonte delle pagine man e in essa tutti i tag di funzionalità che vengono utilizzati. Rende più facile decidere a cosa si desidera impostarli.
risposta l'

1
Vedi questa risposta su come impostare tutti gli LESS_TERMCAP_*ambienti usando tputinvece di caratteri di escape.
Kaushal Modi,

3

La risposta di Gilles è eccellente, ma questo mi ha incuriosito:

Termcap è in gran parte obsoleto, essendo stato sostituito da Terminfo

  1. Se Termcap è obsoleto, voglio passare a Terminfo

  2. Voglio anche passare a Termcap perché ho trovato un bug. Supponi di aver inserito una variabile termcap nella tua ~/.profileo 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 ~/.profileo simile:

TERM=xterm-pretty
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.