Zsh: Ausgeführten Befehl automatisch ändern

9

Ich habe kürzlich grc (generischer Colorizer) über MacPorts auf meinem System installiert, sodass ich für viele Befehle, die dies standardmäßig nicht unterstützen, eine kolorierte Ausgabe erhalten kann (siehe Abbildung unten). Beispiel für grc mit Traceroute.
Ich möchte die Verwendung von grc automatisch machen, jedoch nicht für bestimmte Befehle, sondern für jeden Befehl. Ich benutze zsh als meine Shell.

Grundsätzlich command -parameter 1 2 3möchte ich, dass es bei jeder Ausführung automatisch als ausgeführt wird grc command -parameter 1 2 3.
Ich möchte keine Aliase verwenden, zum Beispiel tracerouteAlias ​​für grc traceroute, da ich immer mehr Befehle hinzufüge, damit grc koloriert.

Ich habe mich mit preexec- und precmd-Konfigurationen für .zshrc befasst, aber ich habe keinen Weg gefunden, um das zu erreichen, wonach ich suche.

Nit
quelle

Antworten:

6

Sie können dies tun, indem Sie das Widget "Akzeptanzzeile" neu definieren:

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

Es kann jedoch zu Problemen bei Befehlen wie "for i (..)", "var = x", "f () {" ...

Stéphane Chazelas
quelle
Guter Punkt. Ich konnte mir keine Probleme vorstellen, die diese Lösung selbst verursachen könnte, aber Sie haben in diesem Namen Recht. Vielen Dank für Ihre Zeit.
Nit
Ein Nachteil dieser Methode ist, dass grcder Verlauf zu Beginn jedes Befehls angezeigt wird.
Joeytwiddle
6

Andere Alternative. Gleiche Art von möglichen Problemen:

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

Ich würde einen "Alias" für jeden Befehl verwenden, der "grc" benötigt, anstatt zu versuchen, Ausnahmen für die hier veröffentlichten Lösungen herauszufinden.

Stéphane Chazelas
quelle