Zsh: modificar automaticamente o comando executado

9

Eu instalei recentemente o grc (colorizador genérico) no meu sistema via MacPorts, dando-me a capacidade de obter uma saída colorida para muitos comandos que, por padrão, não o suportam (veja a captura de tela abaixo). Exemplo de grc com traceroute.
Eu gostaria de tornar o uso do grc automático, no entanto, não para comandos específicos, mas para todos os comandos. Eu uso o zsh como meu shell.

Essencialmente, sempre que executo command -parameter 1 2 3, gostaria que fosse executado automaticamente como grc command -parameter 1 2 3.
Eu não estou olhando para usar aliases, por exemplo , traceroutepara grc traceroute, pois estou adicionando mais e mais comandos para o grc colorir.

Examinei as configurações preexec e precmd para .zshrc, mas não encontrei uma maneira de conseguir o que estou procurando.

Nit
fonte

Respostas:

6

Você pode fazer isso redefinindo o widget de linha de aceitação:

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

No entanto, isso pode causar problemas para comandos como "for i (..)", "var = x", "f () {" ...

Stéphane Chazelas
fonte
Bom ponto. Não consegui pensar em nenhum problema que essa solução pudesse me criar, mas você está certo nesse nome. Obrigado pelo seu tempo.
Nit
Uma desvantagem desse método é que o histórico será exibido grcno início de cada comando.
Joeytwiddle
6

Outra alternativa. Mesmo tipo de problemas em potencial:

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

Eu usaria um "alias" para cada comando que precisa de "grc" em vez de tentar descobrir exceções para as soluções postadas aqui.

Stéphane Chazelas
fonte
3

Considere usar grc.zshparte disso grcque pode ser encontrada aqui . Possui aliases para todos os comandos suportados.
Veja esta resposta Stackoverflow

Amr
fonte