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.

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 () {" ...


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.


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.