GNU/Linux >> Tutoriales Linux >  >> Linux

¿Es posible resaltar el espacio irrompible en zsh/terminal?

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:


Linux
  1. Qué terminal es mejor:Bash vs Zsh

  2. ¿Qué pasó con el espacio libre?

  3. Linux:¿es posible acceder al Framebuffer para poner un píxel en la pantalla desde la línea de comandos?

  4. ¿Cómo verificar HZ en la terminal?

  5. ¿Línea de comando para volver a la GUI después de Ctrl-Alt-F1?

La línea de comandos de Linux puede traer diversión desde lejos

Poderes de dos, poderes de Linux:2048 en la línea de comando

Domina la línea de comandos de Linux

Personalizar la línea de comandos de Debian

¿Encontrar la línea de comando?

Cuatro navegadores web para la línea de comandos de Linux