Colorir Globalmente o Terminal por Regex

5

Eu sei que muitos programas usam cores - (vim, ack, color-ls para citar alguns) mas ainda há muitos casos em que você está preso em preto e branco.

Existem scripts que colorem a saída com base em expressões regulares (isto é, "faça qualquer coisa que corresponda ao 'cão' vermelho"), mas elas devem ser chamadas com canais - por exemplo: "> cat myfile | color dog red" é inútil para qualquer coisa interativa.

O que eu estou procurando é algo que conecta o emulador de terminal (ou um terminal que realmente faz isso) e colore qualquer coisa que corresponda a uma determinada regex, independente do shell ou programa que estou usando atualmente. Se isso funciona com ncurses também seria fantástico. Eu tenho muitos programas monocromáticos e seria ótimo se eu pudesse especificar uma lista de palavras-chave para destacar / cor quando eles aparecem ou são digitados.

Eu uso o console do Guake que provavelmente usa o GNOME Terminal, não sei se o GNOME já tem esse recurso.

    
por Jimmy 13.07.2009 / 12:20

5 respostas

5

A versão resumida é: por que, sim, você pode canalizar a saída do shell, como qualquer outro programa.

De lá, você pode usar o que quiser, digamos,

$ bash | sed "$(echo -e "s@dog@\e[31mdog\e[0m@g; s@more here@more here@g;")"

Pensei em adicionar meu 'arco-íris'. Aproveite:

for((b=0;$b<8;b++)); do echo -ne "\e[4${b}m4$b : "; \
  for((f=0;$f<8;f++)); do echo -ne "\e[3${f}m3${f}"; done; echo -e "\e[0m"; done
    
por 04.08.2009 / 18:59
2

Eu ainda estou procurando por um emulador de terminal Linux com esse recurso, mas para aqueles que estão lendo isso no macOS X:

  • Obtenha iTerm2 (você vai querer isso de qualquer maneira, se você está fazendo muito trabalho de linha de comando no sistema operacional X), vá para "Configurações > Perfis > Avançado" e clique em "Editar" em "Triggers". Lá você pode adicionar um gatilho com uma expressão regular como ^.*\[ERROR\].*$ e definir a ação para "Realçar texto" e o parâmetro para algo como "Primeiro plano vermelho".
por 13.11.2015 / 19:59
0

Eu não tenho uma solução, mas pensei em como esse tipo de programa deveria funcionar. O que você está pedindo não é simples.

Por exemplo, suponha que sua expressão regular seja simples "flor". 1. Se a saída do terminal for "f" "inferior", devemos executar a coloração. Ou usando um editor, primeiro digitamos "lower" e então vamos para o início da palavra e digitamos "f". 2. Se a saída do terminal for "flower", devemos cancelar a coloração já executada. 3. Se a saída for lenta, digamos cinco segundos de atraso entre todos os caracteres em "flower", não devemos interromper a saída irritantemente, e devemos executar imediatamente a coloração.

A funcionalidade deve ser muito bem acoplada ao programa terminal (como você sugere), verificando se alguma das expressões regulares especificadas corresponde à linha atual e depois fazer a coloração. Ou para torná-lo mais útil, poderíamos usar um programa (pouco como / usr / bin / script) que age como um dispositivo terminal e mantém o controle da saída da tela, para o qual ele precisa conhecer muito bem o comportamento do terminal; Neste caso, também devemos ser capazes de exibir novamente os caracteres com cores diferentes (executar a coloração e cancelar a coloração já executada).

Você fornece uma boa ideia de programação ...

    
por 24.07.2009 / 18:34
0

Tenho certeza que o KDE Konsole (pelo menos a versão do KDE3) poderia fazer isso, mas não vejo o suporte no KDE4.

Você pode fazer algo com o grep assim:

grep -C 99999 --color <whatever>

Isso deve destacar as correspondências, mas tem muito contexto para ser o arquivo inteiro.

    
por 02.08.2009 / 13:52
0

Provavelmente, existem soluções melhores do que isso, mas você pode conseguir trabalhar com algo simples com a expectativa: link . Existem bibliotecas disponíveis para muitas outras linguagens de programação / script se você preferir evitar o TCL.

Em geral, o TCL é usado para automatizar programas interativos, mas também é possível torná-los interativos.

Eu daria a você algum código para começar, mas eu não o usei por um bom tempo.

    
por 02.08.2009 / 15:27