`less` ou `more` suporta ansi escape `\x1b[2K` (erase_line)?

`less` ou `more` suporta ansi escape `\x1b[2K` (erase_line)?

Basicamente quero animar meu terminal, mas como o texto é muito longo, preciso de um pager. Digamos apenas que quero alterar a cor do meu texto periodicamente em menos. É possível?

Responder1

EDITARAs respostas porvonbrandeThomas Dickeysão tecnicamente mais precisos.

lesssuporta escapes ANSI brutos quando a -ropção é usada. Ele também suporta Apagar em linha.

Você não verá nenhuma animação. Por exemplo:

echo -e "foo\x1b[1G\x1b[2Kbar" > test.ansi
less -r test.ansi

Será impresso apenas bar.

moretransmite escapes ANSI por padrão, mas não oferece suporte à edição de linha do que testei.

Veja tambémesta resposta do Stackoverflow sobre as diferenças de lessemoremost.

Responder2

Limpar a linha tem apenas uma relação indireta com a alteração das cores dos terminais: se você alterar asfundocolor, então muitos terminais (console Linux, rxvt, xterm, bem como programas que imitam um deles) irão colorir a área limpa do fundo usando essa cor.

lessusa algumas operações de compensação, mas não \x1b[2K. Lendo ofonte, ele usa vários recursos usando a interface termcap. As partes mais relevantes estão descritas noinformações do termo(5)página de manual:

   clr_bol                   el1    cb   Clear to beginning
                                         of line
   clr_eol                   el     ce   clear to end of line
                                         (P)

Isto é, \x1b[Ke \x1b[K, para el1e el, respectivamente. Não há capacidade termcap convencional el2e (a menos que você diga lesspara apenas passar o conteúdo de um arquivo usando a opção -rou ), não enviará um arquivo .-Rless\x1b[2K

O mesmo é verdade para more, por exemplo, como noutil-linuxpacote: usa apenas recursos do termcap. Ao contrário less, morenão tem opção de enviar caracteres não imprimíveis diretamente para o terminal.

Se você usar a opção -rou de , deve ter em mente que é-Rlesslimitado: lessnão sabe (ou se importa muito) com o que essas fugas fazem. Depágina de manual:

-rou--raw-control-chars
Causas"cru"caracteres de controle a serem exibidos. O padrão é exibir caracteres de controle usando a notação circunflexa; por exemplo, um controle-A (octal 001) é exibido como "^A". Aviso: quando a -r opção é usada,less não podeacompanhe a aparência real da tela (já que isso depende de como a tela responde a cada tipo de caractere de controle). Assim, podem ocorrer vários problemas de exibição, como linhas longas divididas no lugar errado.

Responder3

O que reage às sequências de escape normalmente é o tty (a menos que o programa em execução o defina para não honrá-las, caso em que o próprio programa pode fazê-lo). more(1)faz uma reescrita de tela bastante primitiva (é realmente suficiente escrever linhas de comprimento de tela e aguardar um pressionamento de tecla), então acho que apenas passa a entrada. less(1)precisa fazer backup, por isso precisa de um controle mais detalhado da tela.

informação relacionada