Pages

Sunday, June 07, 2009

Colorindo as "man pages"

Para colorir uma página de manual sem alterar o paginador padrão do comando man, defina as linhas abaixo no ~/.bashrc.
#  begin blinking
export LESS_TERMCAP_mb=$'\E[01;31m'
# begin bold
export LESS_TERMCAP_md=$'\E[01;33m'
# end mode
export LESS_TERMCAP_me=$'\E[0m'
# begin standout-mode - info box
export LESS_TERMCAP_so=$'\E[01;41;37m'
# end standout-mode
export LESS_TERMCAP_se=$'\E[0m'
# begin underline
export LESS_TERMCAP_us=$'\E[01;32m'
# end underline
export LESS_TERMCAP_ue=$'\E[0m'
Recarregue o ~/.bashrc (abra uma nova janela do terminal após salvar o arquivo) e digite "man man" (página de manual do comando man) para ver como ficou o resultado.

Traduzindo

Blinking é piscando ... você já viu alguma coisa piscando no man ? Eu não faço idéia de onde a configuração de "begin blinking" vai atual... eu não vi o vermelho (número 31) em negrito (01) em lugar algum das páginas que verifiquei.

A variável relativa a "begin bold" refere-se ao conteúdo que tradicionalmente está em negrito, ou seja, nomes dos programas e opções da maioria das páginas man. Bem como títulos de seções. O 01 refere-se ao negrito (sugiro fortemente que mantenha) e 33 é amarelo.

A variável relativa a "begin standout-mode" refere-se aquela caixa que fica na parte de baixo da janela e indica a a linha (posição relativa e absoluta no texto). Nessa configuração pessoal, eu usei 41, que refere-se ao background com cor vermelha e branco (37) como cor da fonte.

A variável relativa a "begin underline" refere-se ao conteúdo que tradicionalmente está em sublinhado. Aplica-se quase todos os valores das opções da página de uma manual. No meu exemplo, eu utilizo 01, que é referente a negrito, e 32, que é a cor verde.

Todos os "end alguma coisa" refere-se a restabelecer a coloração normal do texto após aplicar a modificação de cor. A menos que queira um carnaval de cores sem sentido na sua página de manual, é conveniente manter a configuração acima.

As cores

O código de cores e efeitos é simples. As Funções ZZ inclui uma função que lhe ajuda com essa tarefa, mas você não precisa instalar a mesma para usar as cores, basta visitar a página de testes para descobrir quais são as cores que lhe interessa.

Na prática, onde está 01 acima, pode variar entre 00, modo normal, 01, modo em negrito. O 04 forma escrita sublinhada (e eu não sei porque), pois o bom senso diz que o 02 e 03 deviam existir... Pois, ... acho que o bom senso não foi respeitado, pois não funciona comigo... ou que deve ter algum significado especial esse 04.

Onde lê-se 41 nas variáveis acima, pode-se alterar entre 40 e 47. Aí a figura da página das funções ZZ ajuda, pois essa configuração refere-se a cor de fundo.

Onde lê-se 37, ou melhor, números na casa de 30, pode-se usar números entre 30 e 37 e essas referem-se a cor da fonte. Novamente o link da página de testes da funções ZZ ajuda muito, porque você deve combinar os valores de fundo e fonte para que tudo fique visível. Note inclusive que seria muito ruim usar uma fonte azul com um fundo preto...

Nota: 30 é preto, mas preto com negrito fica cinza e torna-se visível sob o fundo preto. Observe que existe uma grosseira variação na tonalidade da cor conforme o status da fonte. É basicamente por isso que uso negrito em tudo acima. Torna o que é importante mais nítido...

Não funcionou ?

Infelizmente, a configuração acima não funciona em qualquer distribuição. Eu conheço essa dica a muito tempo, mas não funciona(va) no openSUSE... Há um tópico no fórum que tenta esclarecer alguma coisa (mas cuidado, porque lá tem alguma informações trocadas/erradas), tudo que consegui foi colocar a "info box" colorido... o que não adianta nada. Eu só pude confirmar que essa dica realmente funcionava hoje, no Arch Linux.... Nunca testei no Ubuntu

Alternativas ?
No Viva o Linux possui uma dica que ensina como usar o most como paginador do man e uma dica de como criar uma função para ler o resultado do man no vim nos comentários. A dica sobre o most e o man você também encontra em outros lugares, como aqui.

E falando do vim, no wiki existe uma dica mais completa (com várias dicas nos comentários adicionando outras informações) de como colocar o vim para ser o leitor das páginas de manual que eu ainda não testei, e não sei se testarei, mas inclui uma personalização da sintaxe, o que é necessário, pois o padrão não é muito bom.

No meu vim, essa dica também funciona.

Nem tudo fica colorido ?

Curiosamente, o vim é o único que permitiria você de adivinhar o que deve ou não colorir. Entenda que por padrão, não há como o paginador comum (seja ele qual for), adivinhar o que deve ser colorido sem a formatação da página informe isso a ele. Ou seja, o que não está em negrito e o que não está sublinhado, não será identificado como um ponto a ser colorido... e nem tudo que devia ter sofrido com essas modificações de formato de fato sofreram em algumas páginas de manual (veja "man find" ou "man vim" e compare com "man man" e "man cp").

E é aí que o vim pode levar vantagem, pois pode-se alterar a sintaxe para ele utilizar expressões regulares para identificar o que é uma opção, valor, etc, etc. Infelizmente, isso não é o padrão.

2 comments:

  1. Mitre, a rolagem ficou lenta (cê sabe que o man tem rolagem igual ao vim, né?) então, notei que a rolagem ficou mais lenta. Derrepente alguma das diretivas atrapalha, vou até tentar descobrir.

    ReplyDelete
  2. Bom, eu não uso rolagem !
    Nem sabia que o man tinha rolagem igual ao vim...

    Antigamente, meu PS1 era cheio de configurações e cores. Naquela época, eu notava que a existência ou não de cores fazia o output ser ligeiramente mais lento.

    Hoje eu não vejo mais isso, mas a máquina é melhor também.

    Eu não sei o quanto mais lento ficou no seu caso, mas talvez não seja uma configuração conflitante.

    ReplyDelete