Pode caracteres um guia destaque no terminal?
-
06-07-2019 - |
Pergunta
Usando sequências de terminal, I pode colorir o texto em um emulador de terminal:
$ echo -e '\e[37;41m--this is white on red--\e[0m'
e isso funciona.
O seguinte imprime um rectângulo vermelho, isto é, os caracteres de espaço tem um fundo vermelho e um primeiro plano vazio:
$ echo -e '\e[37;41m \e[0m '
Mas as seguintes impressões dois retângulos vermelhos separados por uma guia:
$ echo -e '\e[37;41m \t \e[0m '
Isto é, o caractere de tabulação não recebe o destaque fundo vermelho. Leva a cor de fundo de terminal padrão.
Por que não guia destacado como o espaço? Eu posso forçar este alguma outra forma?
Solução 2
Eu encontrei a resposta: não, guia não pode ser destacado em um compatível com as normas emulador de terminal. Tab não é realmente um espaço em branco no terminal; é explicitamente um personagem movimento do cursor para avançar para a próxima parada de tabulação. Então, na verdade o meu exemplo, diz "imprimir dois espaços no fundo vermelho, avançar para a próxima parada de tabulação, em seguida, imprimir mais dois espaços no fundo vermelho".
A solução seria do Ankon sugestão para guias converter para espaços antes de imprimir.
Outras dicas
Se você não precisa as guias para ser guias, você pode pré-processar o texto através de expandir (1).
Porque era difícil para mim encontrar uma solução agradável (e esta página foi resultado primeira pesquisa) ... Isto é o que eu tenho em arquivo .bashrc (de http://pastebin.com/Pn1fkkJq com modificações):
catt() { # Highlight whitespace on the terminal -- rolfwr
local C=`printf '\033[0;36m'` R=`printf '\033[0m'`
#cat "$@" | sed -e "s/ /${C}▹▹▹▹▹▹▹▹$R/g" -e "s/ /${C}·$R/g" -e "s/$/${C}⁋$R/"
#cat "$@" | sed -e "s/ /${C}·$R/g" -e "s/\t/${C} ▹▹ $R/g" -e "s/$/${C}⁋$R/"
cat "$@" | sed -e "s/ /${C}·$R/g" | expand | sed -e "s/ \( *\)/${C}▹\1$R/g" -e "s/$/${C}⁋$R/"
#cat "$@" | sed -e "s/ /${C}.$R/g" | expand | sed -e "s/ \( *\)/${C}>\1$R/g" -e "s/$/${C}P$R/"
}
Esperamos que isso ajude alguém também.