Cette mise en évidence est IMHO plus facilement implémentée dans l'émulateur de terminal que dans le shell. Et comme avantage, vous obtenez la mise en surbrillance indépendante du shell - donc cela fonctionne même avec less
etc.Puisque vous êtes d'accord pour changer de shell, je suppose que vous pouvez aussi passer à URxVt.
En conjonction avec les extensions perl urxvt-perls, il est possible de rendre les URL etc. cliquables. Mais on peut abuser de cette fonctionnalité juste pour souligner les espaces insécables.
La configuration se fait en ~/.Xdefaults
:
URxvt.perl-ext: default,matcher
URxvt.matcher.button: 2
URxvt.matcher.pattern.0: (\\240)
URxvt.matcher.launcher.0: /bin/true
- la ligne 1 active l'extension appropriée
- la ligne 2 configure l'utilisation du bouton central de la souris pour cliquer sur le ,,hyperlien''
- la ligne 3 définit la regex à faire correspondre, ici chaque espace insécable ;
A0 (hex) = 240 (oct)
- la ligne 4 définit l'action, dans votre cas, vous ne voulez pas ouvrir un navigateur ou un programme, donc
/bin/true
ça devrait aller
Recharger ~/.Xdefaults
en redémarrant le serveur X (c'est peut-être exagéré, mais je ne sais pas si un xrdb ~/.Xdefaults
est suffisant...) et vous obtenez le résultat souhaité. Avec une loupe, il est même possible de distinguer les espaces insécables des traits de soulignement (remarquez le décalage de 1 pixel) ;)
:
Ce qui suit est une sorte de preuve de concept pour une solution "back-end". Soyez conscient que cela va casser beaucoup de choses, à savoir des programmes interactifs comme man
, less
etc. (vim
se plaint mais fonctionne toujours). Cette approche a été publiée par Atom Smasher sur le zsh-users
mailinglist du samedi 16 mai 2009 pour coloriser STDERR
. Je l'ai adapté à vos exigences :
# ## highlight_nbs.zsh ##
zmodload zsh/terminfo zsh/system
autoload colors is-at-least
if [[ "${terminfo[colors]}" -ge 8 ]] { colors }
highlight_nbs() {
while sysread line
do
syswrite "${line//$'\xC2\xA0'/${bg[red]} ${terminfo[sgr0]}}"
done
}
precmd() { sleep 0 }
## i'm not sure exactly how far back it's safe to go with this
## 4.3.4 works; 4.2.1 hangs.
is-at-least 4.3.4 && exec > >(highlight_nbs)
La partie délicate est exec > >(highlight_nbs)
qui traite la sortie complète du shell de remplacement via le highlight_nbs
fonction. Le precmd
la définition est nécessaire pour éviter une condition de concurrence, sinon la nouvelle invite est imprimée avant la sortie réelle de la commande exécutée.
Voici une démo :