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 .