Zsh: modifica automáticamente el comando ejecutado

9

Recientemente instalé grc (colorizador genérico) en mi sistema a través de MacPorts, lo que me permite obtener resultados coloreados para muchos comandos que, por defecto, no lo admiten (vea la captura de pantalla a continuación). Ejemplo de grc con traceroute.
Me gustaría hacer que usar grc sea automático, sin embargo, no para comandos específicos, sino para cada comando. Yo uso zsh como mi caparazón.

Esencialmente, cada vez que ejecuto command -parameter 1 2 3me gustaría que se ejecute automáticamente como grc command -parameter 1 2 3.
No estoy buscando usar alias, por ejemplo, traceroutealias grc traceroute, ya que estoy agregando más y más comandos para que grc se coloree.

He buscado configuraciones preexec y precmd para .zshrc, pero no he encontrado la manera de lograr lo que estoy buscando.

Liendre
fuente

Respuestas:

6

Puede hacerlo redefiniendo el widget de aceptar línea:

add-grc() { [[ $BUFFER = grc* ]] || BUFFER="grc $BUFFER"; zle .$WIDGET "$@"; }
zle -N accept-line add-grc

Sin embargo, podría causar problemas para comandos como "for i (..)", "var = x", "f () {" ...

Stéphane Chazelas
fuente
Buen punto. No puedo pensar en ningún problema que esta solución pueda crearme, pero tiene razón en este sentido. Gracias por tu tiempo.
Nit
Un inconveniente de este método es que la historia se mostrará grcal comienzo de cada comando.
joeytwiddle 01 de
6

Otra alternativa El mismo tipo de problemas potenciales:

TRAPDEBUG() { eval "grc $ZSH_DEBUG_CMD"; setopt errexit; }

Usaría un "alias" para cada comando que necesita "grc" en lugar de tratar de encontrar excepciones para las soluciones publicadas aquí.

Stéphane Chazelas
fuente