En mi humilde opinión, este resaltado se implementa más fácilmente en el emulador de terminal que en el shell. Y como beneficio, obtienes el resaltado independiente del caparazón, por lo que incluso funciona con less
etc. Dado que está bien cambiar el shell, supongo que también está bien cambiar a URxVt.
Junto con las extensiones de perl urxvt-perls, es posible hacer que se pueda hacer clic en URL, etc. Pero podemos abusar de esta función solo para subrayar los espacios irrompibles.
La configuración se hace en ~/.Xdefaults
:
URxvt.perl-ext: default,matcher
URxvt.matcher.button: 2
URxvt.matcher.pattern.0: (\\240)
URxvt.matcher.launcher.0: /bin/true
- la línea 1 activa la extensión adecuada
- la línea 2 configura el uso del botón central del ratón para hacer clic en el hipervínculo''
- la línea 3 define la expresión regular para que coincida, aquí cada espacio irrompible;
A0 (hex) = 240 (oct)
- la línea 4 define la acción, en su caso no desea abrir un navegador ni ningún programa, así que
/bin/true
debería estar bien
Recargar ~/.Xdefaults
reiniciando el servidor X (esto podría ser excesivo, pero no estoy seguro si un xrdb ~/.Xdefaults
es suficiente...) y obtienes el resultado deseado. Con una lupa, incluso es posible distinguir entre espacios irrompibles y guiones bajos (observe el cambio de 1 píxel) ;)
:
Lo siguiente es una especie de prueba de concepto para una solución de "back-end". Tenga en cuenta que esto romperá muchas cosas, a saber, programas interactivos como man
, less
etc. (vim
se queja pero sigue trabajando). Este enfoque fue publicado por Atom Smasher en el zsh-users
lista de correo el sábado 16 de mayo de 2009 para colorear STDERR
. Lo adopté según sus requisitos:
# ## 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 parte complicada es exec > >(highlight_nbs)
que procesa la salida completa del shell de reemplazo a través del highlight_nbs
función. El precmd
la definición es necesaria para evitar una condición de carrera, de lo contrario, el nuevo aviso se imprime antes de la salida real del comando ejecutado.
Aquí hay una demostración: