Zsh: Secara otomatis memodifikasi perintah yang dieksekusi

9

Saya baru saja menginstal grc (generic colorizer) ke sistem saya melalui MacPorts, memberi saya kemampuan untuk mendapatkan output berwarna untuk banyak perintah yang secara default tidak mendukungnya (lihat screenshot di bawah). Contoh grc dengan traceroute.
Saya ingin menggunakan grc otomatis, namun tidak untuk perintah tertentu, tetapi untuk setiap perintah. Saya menggunakan zsh sebagai shell saya.

Intinya setiap kali saya mengeksekusi command -parameter 1 2 3saya ingin secara otomatis dieksekusi sebagai grc command -parameter 1 2 3.
Saya tidak mencari untuk menggunakan alias, misalnya traceroutealias untuk grc traceroute, karena saya menambahkan semakin banyak perintah untuk grc untuk mewarnai.

Saya telah melihat konfigurasi preexec dan precmd untuk .zshrc, tetapi saya belum menemukan cara untuk mencapai apa yang saya cari.

Nit
sumber

Jawaban:

6

Anda bisa melakukannya dengan mendefinisikan ulang widget accept-line:

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

Namun, ini dapat menyebabkan masalah untuk perintah seperti "untuk saya (..)", "var = x", "f () {" ...

Stéphane Chazelas
sumber
Poin yang bagus. Saya tidak dapat memikirkan masalah apa pun yang dapat dihasilkan solusi ini sendiri, tetapi Anda benar atas nama ini. Terima kasih atas waktu Anda.
Nit
Satu kekurangan dengan metode ini adalah bahwa sejarah akan ditampilkan grcdi awal setiap perintah.
joeytwiddle
6

Alternatif lain. Jenis masalah yang sama:

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

Saya akan menggunakan "alias" untuk setiap perintah yang membutuhkan "grc" alih-alih mencoba mencari pengecualian untuk solusi yang diposting di sini.

Stéphane Chazelas
sumber
3

Pertimbangkan untuk menggunakan grc.zshbagian grcyang dapat ditemukan di sini . Ini memiliki alias untuk semua perintah yang didukung.
Lihat jawaban Stackoverflow ini

Amr
sumber