Documentação sobre variáveis ​​LESS_TERMCAP_ *?

Respostas:

45

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 com o Termcap para aplicativos. Menos é o conteúdo da interface do Termcap e a utiliza.

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, hcidentifica terminais impressos (ou seja, impressoras, não telas); coé o número de colunas; mdcomeça a exibir texto em negrito. Cada recurso possui um valor, que pode ser um booleano (como em hc), um número inteiro (como em co) ou uma sequência (como em md). Muitas das seqüências de caracteres são seqüências de escape que os aplicativos podem enviar ao terminal para obter um certo efeito.

Por que escapar sequências? Como a interface entre o terminal e o aplicativo é um fluxo de caracteres (mais precisamente, um fluxo de caracteres em cada direção: um para entrada do usuário e outro para saída). 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 Less deseja exibir algum texto em negrito, ele procura o valor do mdrecurso. Esta é uma string que Less escreve no terminal. O terminal reconhece essa sequência como uma sequê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, marcas diferentes tinham seqüências e capacidades de escape diferentes; o banco de dados e a interface do Termcap foram inventados para que os aplicativos não precisassem conhecer todos os modelos de terminais. Atualmente, a maioria dos emuladores de terminal possui recursos muito semelhantes, mas o banco de dados Termcap ou Terminfo ainda é útil para lidar com pequenas diferenças.

As LESS_TERMCAP_*variáveis ​​podem ser definidas no ambiente ou no .lesskeyarquivo . Ele fornece menos valores alternativos para os recursos do Terminal. Quando Less quer usar um recurso de terminal, digamos mudar para negrito, ele primeiro verifica se há uma LESS_TERMCAP_mdvariável. Se essa variável existir, Less usará seu valor como sequência de escape para mudar 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 Termcap por Menos.

As LESS_TERMCAP_*configurações mais úteis são sequências de escape. Você pode mapear atributos para diferentes atributos. Você pode usar o tputcomando para procurar o valor de uma capacidade para o terminal atual no sistema Termcap ou Terminfo banco de dados. Você pode usar seqüências de escape diretamente se não se importar em ser dependente do terminal. Por exemplo, essa configuração indica Menos para exibir em negrito quando instruído a exibir em negrito:

LESS_TERMCAP_md=$(tput md; tput AF 1)

ou se o seu tputcomando não suportar nomes do Termcap:

LESS_TERMCAP_md=$(tput bold; tput setaf 1)

O homem envia menos texto com uma formatação muito simples que só pode expressar negrito e itálico. Além disso, Less 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 (apenas listo os recursos que são razoavelmente úteis 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 setafrecurso (ou AFcom o Termcap).

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

Gilles 'SO- parar de ser mau'
fonte
8
Obrigado. Também observei brevemente o código fonte de less e descobri que quando você define LESS_TERMCAP_DEBUG como algo e depois abre o man, pode ver algo como a fonte das páginas do manual e todas as tags de capacidade usadas. Torna mais fácil decidir o que você deseja defini-los.
anselm
11
Veja esta resposta sobre como definir todos os LESS_TERMCAP_*envários usando em tputvez de caracteres de escape.
214166 Kaushal Modi #
3

A resposta de Gilles é excelente, mas isso me deixou curioso:

Termcap é amplamente obsoleto, tendo sido substituído pelo Terminfo

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

  2. Também quero sair do Termcap porque encontrei um bug. Digamos que você coloque uma variável termcap no seu ~/.profileou similar:

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

    Depois disso, se você digitar set, as variáveis ​​Termcap atrapalham a saída de cores.

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

Adicionar linha ~/.profileou similar:

TERM=xterm-pretty
Steven Penny
fonte