Tenho problemas de visão que estão piorando cada vez mais, e meu trabalho exige que eu use muitos programas baseados em terminal com saídas baseadas em tabelas (veja abaixo). Pode ser muito difícil analisar linhas individuais e acessar as informações de que preciso. Estou procurando uma maneira de fazer o terminal mostrar cada linha [EDIT:] do fundo (ou seja, onde roxo é o padrão) em cores alternadas para guiar melhor meus olhos. Existe uma maneira de fazer isso no terminal Ubuntu ou em outro programa de terminal que ofereça essa opção? Estou realmente lutando para encontrar alguma coisa
[EDITAR:]
A resposta do @kos usando isso funciona com o Xspec:
Em~/.bashrc:
alias colorize="perl -pe '
if( \$. %2) {
s/^/\e[38;5;15m/; s/^/\e[48;5;238m/
}
else {
s/^/\e[38;5;0m/; s/^/\e[48;5;249m/
}
s/\$/\e[K/;
s/\$/\e[0m/
'"
Uso:
<command> | colorize
No entanto, há um problema em que não consigo ver meu prompt ativo (ou seja, "XSPEC12>") ou o que estou digitando no prompt. Depois de pressionar Enter, ele aparece, mas não consigo vê-lo enquanto digito
O Ubuntu usa o Gnome Terminal, que tem a opção de aumentar o espaço entre suas linhas. A opção está no menu hambúrguer > Preferências > Perfil > Texto > Espaçamento entre células > altura:
Definir o espaçamento da altura da célula para 1,4 altera a saída de:
para isso, onde pode ser mais fácil seguir as linhas para você:
Nas mesmas configurações, você também pode aumentar o tamanho da fonte, o que também pode ser útil.
Use uma imagem de fundo
Infelizmente, o gnome-terminal não possui mais o recurso de imagem de fundo , mas por exemplo, o Konsole ainda possui. Para o Konsole, isso é definido nas configurações do perfil, criando um novo esquema de cores.
Crie uma imagem com listras no mesmo espaçamento da fonte do terminal. É mais fácil fazer isso tirando uma captura de tela e desenhando sobre ela:
Defina-o como plano de fundo do terminal e você terá listras em tudo:
A desvantagem é que o espaçamento não será dimensionado se você ampliar a fonte do terminal. Embora seja possível criar vários perfis com diferentes configurações de fonte e imagens de fundo correspondentes.
Experimente isto:
Coloque este texto em
striped.py
:Torne-o executável por
chmod 755 striped.py
E então use-o como por exemplo
maketable | ./striped.py
... que imprimirá todas as outras linhas em cores diferentes.
Para usar
less
com esta saída, adicione sua-R
opção como em... | less -R
.Tentei encontrar um par de cores que fossem distinguíveis, mas contrastantes entre si.
Exemplo para experimentar
Mais
Se desejar, você pode ter linhas numeradas; isso pode ser feito (de maneira sofisticada) adicionando
nas linhas seguintes
c = ...
e depois alterecom
+ f'{rvson}{n:>4}:{rvsoff} '
inserido, como em...Alternativa
Use texto esmaecido em vez de cores; mude a
c = ...
linha paraNotável por isso: Não funciona em Windows/cmd.exe, é simplesmente ignorado.
Ref: código de escape ANSI - Wikipedia
Para usuários do Windows cmd : adicione
por exemplo, em uma linha após
import sys
- isso inicializa magicamente (alguns) suporte ao código de escape ANSI."Esse é o jeito do Windows" - sempre é necessário algum tipo de magia especial.
Editar 12/06/2024:
Alternativa: Faça um fundo listrado , usando o "mesmo" código acima.
Nota:
*
[48;2;80;80;80m
tem a4
cor de fundo para (use3
para primeiro plano) epara
;80;80;80
R, G e B - como são iguais aqui, obtemos um tom de cinza.Quaisquer outros valores RGB também funcionarão, ou seja, crie sua própria versão colorida em rosa;
;255;0;255
é rosa "cheio" (magenta brilhante), reduza os 255 para obter um tom menos colorido. Escolha dois tons ligeiramente diferentes e coloque-os como aeb dentroc = [ a, b ]
E por último mas não menos importante,
+ '\x1b[2K' +
faz com que o fundo apareça em toda a linha, independentemente do tamanho da janela, comprimento ou altura da linha - dependendo apenas dac[n%2]
definição da cor.Nota : estas são boas soluções gerais para colorir a saída de um programa. Mas eles não lidam bem com shells interativos, pois cada vez que você executa um comando no shell interativo, o prompt e o comando serão desenhados na tela somente após pressionar Enter. Para uso com shells interativos, consulte a solução do @jpa .
Abaixo estão duas soluções, ambas semelhantes em conceito à solução de Hannu (mas usando aliases e Perl);
Um irá colorir o texto, o outro irá colorir o texto e o fundo;
Ambos exigem a definição de um alias em
~/.bashrc
;Eu escolhi branco (
\e[37m
) e vermelho (\e[31m
) para a primeira opção e branco em cinza escuro (\e[38;5;15m
/\e[48;5;238m
) e preto em cinza claro (\e[38;5;0m
/\e[48;5;249m
) para a segunda opção, mas você provavelmente deve escolher suas próprias cores com base nas que melhor se adequam à sua visão. .A segunda opção exigirá suporte ANSI mais extenso do terminal (mas vai funcionar bem
gnome-terminal
na maioria dos terminais modernos).Opção nº 1 (abordagem mais leve): colorir o texto
Em
~/.bashrc
:Uso:
Opção nº 2 (abordagem mais pesada): colorir o texto e o fundo
Em
~/.bashrc
:Uso:
A desvantagem de usar códigos de escape para colorir a saída é que a saída ficará poluída com os códigos de escape; na maioria das vezes isso não será um problema, pois o objetivo principal é obviamente executar o alias para colorir a saída para o terminal, porém é importante notar que, por exemplo,
foo | colorize | tee >file
resultará nafile
contenção dos códigos de escape.