Question

À l'aide de séquences de terminaux, je peux colorier du texte dans un émulateur de terminal:

$ echo -e '\e[37;41m--this is white on red--\e[0m'

Et cela fonctionne.

Ce qui suit imprime un rectangle rouge, c'est-à-dire que les caractères d'espacement ont un arrière-plan rouge et un avant-plan vide:

$ echo -e '\e[37;41m     \e[0m '

Mais ce qui suit imprime deux rectangles rouges séparés par un onglet:

$ echo -e '\e[37;41m  \t  \e[0m '

C'est-à-dire que le caractère de tabulation ne reçoit pas la surbrillance d'arrière-plan rouge. Il prend la couleur d’arrière-plan du terminal par défaut.

Pourquoi l'onglet n'est-il pas surligné comme un espace? Puis-je forcer cela d'une autre manière?

Était-ce utile?

La solution 2

J'ai trouvé la réponse: non, l'onglet ne peut pas être mis en évidence dans un émulateur de terminal conforme aux normes. Tab n'est pas vraiment un espace dans le terminal; c'est explicitement un caractère de déplacement du curseur pour avancer à la prochaine tabulation. Ainsi, dans les faits, mon exemple indique "imprimer deux espaces sur un fond rouge, avancer au prochain taquet de tabulation, puis imprimer deux autres espaces sur un fond rouge".

La solution de rechange serait la suggestion d’Ankon de convertir les tabulations en espaces avant impression.

Autres conseils

Si vous n'avez pas besoin que les onglets soient des onglets, vous pouvez prétraiter votre texte par expand (1).

Parce que c’était difficile pour moi de trouver une solution intéressante (et que cette page était le premier résultat de la recherche) ... C’est ce que j’ai dans le fichier .bashrc (extrait de http://pastebin.com/Pn1fkkJq avec les modifications):

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/"
}

J'espère que cela aidera également quelqu'un d'autre.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top