Zsh: modifier automatiquement la commande exécutée

9

J'ai récemment installé grc (colorizer générique) sur mon système via MacPorts, me donnant la possibilité d'obtenir une sortie colorisée pour de nombreuses commandes qui par défaut ne le prennent pas en charge (voir capture d'écran ci-dessous). Exemple de grc avec traceroute.
Je voudrais rendre l'utilisation de grc automatique, mais pas pour des commandes spécifiques, mais pour chaque commande. J'utilise zsh comme shell.

Essentiellement, chaque fois que j'exécute, command -parameter 1 2 3je voudrais qu'il soit automatiquement exécuté en tant que grc command -parameter 1 2 3.
Je ne cherche pas à utiliser des alias, par exemple traceroutealias à grc traceroute, car j'ajoute de plus en plus de commandes pour que grc colorise.

J'ai étudié les configurations preexec et precmd pour .zshrc, mais je n'ai pas trouvé de moyen d'atteindre ce que je recherche.

Lente
la source

Réponses:

6

Vous pouvez le faire en redéfinissant le widget accept-line:

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

Cependant, cela pourrait poser problème pour des commandes comme "for i (..)", "var = x", "f () {" ...

Stéphane Chazelas
la source
Bon point. Je ne pouvais penser à aucun problème que cette solution pourrait créer moi-même, mais vous avez raison en ce nom. Merci pour votre temps.
Nit
Un inconvénient de cette méthode est que l'historique s'affichera grcau début de chaque commande.
joeytwiddle
6

Autre alternative. Même type de problèmes potentiels:

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

J'utiliserais un "alias" pour chaque commande qui a besoin de "grc" au lieu d'essayer de trouver des exceptions pour les solutions publiées ici.

Stéphane Chazelas
la source
3

Pensez à en utiliser grc.zshune partie grcqui peut être trouvée ici . Il a des alias pour toutes les commandes prises en charge.
Voir cette réponse Stackoverflow

Amr
la source