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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top