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.

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


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.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.