Zsh: modifica automatica del comando eseguito


9

Di recente ho installato grc (colorizer generico) sul mio sistema tramite MacPorts, dandomi la possibilità di ottenere un output colorato per molti comandi che di default non lo supportano (vedi screenshot sotto). Esempio di grc con traceroute.
Vorrei rendere automatico l'utilizzo di grc, tuttavia non per comandi specifici, ma per ogni comando. Uso zsh come shell.

Essenzialmente ogni volta che eseguo command -parameter 1 2 3vorrei che venisse eseguito automaticamente come grc command -parameter 1 2 3.
Non sto cercando di usare gli alias, ad esempio gli traceroutealias grc traceroute, poiché sto aggiungendo sempre più comandi da colorare per grc.

Ho esaminato le configurazioni preexec e precmd per .zshrc, ma non ho trovato il modo di ottenere ciò che sto cercando.

Risposte:


6

Puoi farlo ridefinendo il widget di linea di accettazione:

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

Tuttavia, potrebbe causare problemi per comandi come "for i (..)", "var = x", "f () {" ...


Buon punto. Non riuscivo a pensare a problemi che questa soluzione potesse creare da sola, ma hai ragione per questo. Grazie per il tuo tempo.
Nit

Uno svantaggio di questo metodo è che la cronologia mostrerà grcall'inizio di ogni comando.
joeytwiddle,

6

Altra alternativa Stesso tipo di potenziali problemi:

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

Vorrei usare un "alias" per ogni comando che necessita di "grc" invece di cercare di scoprire eccezioni per le soluzioni pubblicate qui.


3

Prendi in considerazione l'utilizzo di grc.zshquesta parte di grcquesta può essere trovata qui . Ha alias per tutti i comandi supportati.
Vedi questa risposta StackOverflow

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.