Como tornar independente do terminal menos chave?

3

Nos scripts bash, podemos usar tput para definir menos variáveis independentes do terminal:

export LESS_TERMCAP_me=$(tput sgr0; )

Podemos fazer o mesmo com lesskey ?

    
por Cyker 07.12.2016 / 07:58

2 respostas

2

Resposta curta

  • Sim você pode colocar a variável LESS_TERMCAP_me no arquivo lesskey , mas isso requer correção do código fonte e construção da sua própria versão less (explico abaixo). / p>

  • Não o arquivo lesskey não pode conter comandos externos como tput para se tornar independente do terminal. No entanto, você pode usar vários arquivos lesskey conforme recomendado pela resposta de Thomas Dickey .

lesskey file

O comando lesskey é usado para converter um conteúdo de texto legível por humanos em um arquivo de configuração binária para o comando less . Este arquivo de configuração é denominado lesskey file e geralmente é o arquivo ~/.less .

Esses arquivos contêm três seções:

  1. Comando (por exemplo, :q quit )
  2. Edição de linha (por exemplo, ^G abort )
  3. less variáveis de ambiente (por exemplo, LESS_TERMCAP_me = 3(B3[m )

Coloque as variáveis LESS_TERMCAP_* no arquivo lesskey

$ cat > lesskey.txt << EOF
#env
LESS = -iSrsM +Gg
LESS_TERMCAP_md = $(tput bold; tput setaf 6)
LESS_TERMCAP_me = $(tput sgr0)
LESS_TERMCAP_so = $(tput bold; tput setaf 3; tput setab 4)
LESS_TERMCAP_se = $(tput rmso; tput sgr0)
LESS_TERMCAP_us = $(tput smul; tput bold; tput setaf 7)
LESS_TERMCAP_ue = $(tput rmul; tput sgr0)
LESS_TERMCAP_mr = $(tput rev)
LESS_TERMCAP_mh = $(tput dim)
EOF

$ lesskey lesskey.txt  # By default lesskey writes ~/.less

$ man bash             # By default man uses less (pager)

Bug

O comando less lê a configuração ~/.less tarde demais:
logo após procurar por variáveis LESS_TERMCAP_* .

Esse bug afeta a versão 487 lançada em 29 de março de 2017 (e certamente versões anteriores).

Acabei de enviar um relatório de bug e a correção correspondente para os mantenedores. Eu atualizarei esta resposta quando a correção for aplicada para o próximo less release ...

Conserte você mesmo

  1. Faça o download do arquivo de código-fonte de:

  2. Inversa duas linhas no arquivo main.c na linha 113
    Antes:

    /*
     * Process command line arguments and LESS environment arguments.
     * Command line arguments override environment arguments.
     */
    is_tty = isatty(1);
    get_term();
    init_cmds();
    init_charset();
    init_line();
    

    Depois:

    /*
     * Process command line arguments and LESS environment arguments.
     * Command line arguments override environment arguments.
     */
    is_tty = isatty(1);
    init_cmds();         /* Load lesskey file before */ 
    get_term();          /* getting variables LESS_TERMCAP_* */
    init_charset();
    init_line();
    
  3. Instalar as dependências necessárias para a compilação

    ./configure
    

    Se ./configure falhar, identifique as dependências ausentes.
    No meu caso, instalei ncurses-devel para obter o cabeçalho term.h .

  4. Construir

    make 
    
  5. Mantenha seu próprio less em algum lugar, por exemplo, em um diretório pessoal ~/bin

    mkdir -p ~/bin
    cp ./less ~/bin
    PATH="$PATH:~/bin"
    

    Não se esqueça de definir a variável de ambiente PATH no seu ~/.profile ou, se preferir, outro arquivo como ~/.bashrc , ~/.login ...

Dicas extras

  • Veja o TERMCAPS usado em uma página de manual

    LESS_TERMCAP_DEBUG=1 man bash
    
  • Recupere a página do manual com TERMCAPS encoding

    MANPAGER='tee man.txt' man bash
    
  • Combine essas duas dicas

    MANPAGER='tee man.txt' man bash
    LESS_TERMCAP_DEBUG=1 less man.txt
    
por 08.07.2017 / 21:20
0

Você pode fazer com que less leia um arquivo lesskey diferente para cada tipo de terminal, por exemplo, definindo o ambiente LESSKEY (ou LESSKEY_SYSTEM ) na inicialização do seu shell. A maneira mais simples de fazer isso seria usar a variável TERM como parte do nome do arquivo e fazer com que o seu shell verifique a existência desses arquivos dependentes do terminal antes de definir a variável LESSKEY .

    
por 05.02.2017 / 01:54

Tags