Documentação em variáveis LESS_TERMCAP_ *?

33

Eu vejo essas cores bonitas em manpages exibidas com menos ao definir um monte de estas variáveis. O que eles querem dizer, onde está a documentação? Isso é interpretado por menos ou termcap?

captura de tela

    
por anselm 10.01.2014 / 12:10

2 respostas

40

Termcap é uma biblioteca que Less usa para acessar o terminal. O Termcap é amplamente obsoleto, tendo sido substituído pelo Terminfo , mas o Terminfo oferece uma interface de compatibilidade do Termcap para os aplicativos. Menos está contente com a interface Termcap e usa isso.

A biblioteca Termcap é uma descrição das instalações do terminal. Cada instalação é identificada por um código de duas letras (ou mais geralmente de dois caracteres). Por exemplo, hc identifica terminais de impressão (isto é, impressoras, não telas); co é o número de colunas; md começa a exibir texto em negrito. Cada recurso possui um valor, que pode ser um valor booleano (como em hc ), um inteiro (como em co ) ou uma string (como em md ). Muitas das strings são seqüências de escape que os aplicativos podem enviar ao terminal para obter um certo efeito.

Por que seqüências de escape? Porque a interface entre o terminal e a aplicação é um fluxo de caracteres (mais precisamente, um fluxo de caracteres em cada direção: um para entrada do usuário, um para saída para exibição). Quando um aplicativo grava um caractere no terminal, ele geralmente é exibido. Alguns caracteres têm um comportamento diferente: são caracteres de controle, que fazem coisas como mover o cursor, alternar atributos de exibição, etc. Há muito mais comandos do que caracteres de controle, portanto, a maioria dos comandos é acessada por seqüências de escape, que começam com um caractere especial (geralmente o caractere de escape, daí o nome).

Por exemplo, quando Menos deseja exibir algum texto em negrito, ele procura o valor do recurso md . Esta é uma string que Less escreve no terminal. O terminal reconhece essa string como uma seqüência de escape e ajusta seu estado interno para que os caracteres subseqüentes sejam exibidos em negrito.

Nos primeiros dias dos terminais de hardware, diferentes marcas tinham diferentes seqüências de escape e capacidades; o banco de dados e a interface do Termcap foram inventados para que os aplicativos não precisem conhecer cada modelo de terminal. Atualmente, a maioria dos emuladores de terminal tem recursos muito semelhantes, mas o banco de dados Termcap ou Terminfo ainda é útil para lidar com pequenas diferenças.

As variáveis LESS_TERMCAP_* podem ser definidas no ambiente ou no .lesskey arquivo . Ele fornece menos valores alternativos para os recursos do terminal. Quando Menos quiser usar um recurso de terminal, por exemplo, alterne para negrito, ele primeiro verifica se há uma variável LESS_TERMCAP_md . Se esta variável existir, Less usa seu valor como a seqüência de escape para alternar para negrito. Caso contrário, ele usa o valor do banco de dados Termcap. Esse mecanismo permite que o usuário substitua as configurações do banco de dados do Termcap por Menos.

As configurações mais úteis de LESS_TERMCAP_* são sequências de escape. Você pode mapear atributos para atributos diferentes. Você pode usar o comando tput para pesquisar o valor de um recurso para o terminal atual na Termcap ou Terminfo

LESS_TERMCAP_md=$(tput md; tput AF 1)

ou se o comando tput não suporta nomes de Termcap:

LESS_TERMCAP_md=$(tput bold; tput setaf 1)

O homem envia menos texto com algumas formatações muito simples que podem apenas expressar negrito e itálico. Além disso, Menos usa vários recursos de formatação para uso interno, como destacar os resultados da pesquisa e exibir a linha de modo na parte inferior. Aqui estão algumas das seqüências de escape que Less usa (eu só listo recursos que é razoavelmente útil para remapear):

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

Para mostrar a saída em cores, use o recurso setaf (ou AF com o Termcap).

As configurações de LESS_TERMCAP_* não são mencionadas na documentação LESS . A melhor referência que posso oferecer é minha resposta aqui .

    
por 11.01.2014 / 05:01
3

Resposta do Gilles é excelente, mas isso me deixou curioso:

Termcap is largely obsolete, having been replaced by Terminfo

  1. Se o Termcap estiver obsoleto, quero mudar para o Terminfo

  2. Eu também quero mudar do Termcap porque encontrei um bug. Digamos que você coloque um variável termcap no seu ~/.profile ou similar:

    export LESS_TERMCAP_so=$(printf '[5;30;43m')
    export LESS_TERMCAP_se=$(printf '[m')
    

    Depois disso, se você digitar set , as variáveis do Termcap atrapalharão sua cor saída.

Para mudar para o Terminfo, você pode criar um arquivo 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,

Compile e instale o arquivo:

tic xterm-pretty.ti

Adicione uma linha a ~/.profile ou similar:

TERM=xterm-pretty
    
por 07.04.2017 / 14:06