Eu vejo essas cores bonitas nas páginas de manual vistas com menos ao definir várias dessas variáveis. O que eles significam, onde está a documentação? Isso é interpretado por less ou termcap?
Eu vejo essas cores bonitas nas páginas de manual vistas com menos ao definir várias dessas variáveis. O que eles significam, onde está a documentação? Isso é interpretado por less ou termcap?
Respostas:
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, hc
identifica terminais impressos (ou seja, 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 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 md
recurso. 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 .lesskey
arquivo . 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_md
variá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 tput
comando 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 tput
comando 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 setaf
recurso (ou AF
com o Termcap).
As LESS_TERMCAP_*
configurações não são mencionadas na LESS
documentação. A melhor referência que posso oferecer é minha resposta aqui .
LESS_TERMCAP_*
envários usando em tput
vez de caracteres de escape.
A resposta de Gilles é excelente, mas isso me deixou curioso:
Termcap é amplamente obsoleto, tendo sido substituído pelo Terminfo
Se o Termcap estiver obsoleto, quero mudar para o Terminfo
Também quero sair do Termcap porque encontrei um bug. Digamos que você coloque uma variável termcap no seu ~/.profile
ou 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 ~/.profile
ou similar:
TERM=xterm-pretty