zshでtypoした場合setopt correctを設定しておくと「打ちたかったコマンドこれじゃね?」と諭してくれる。
しかしダイナミックにtypoした場合は普通に「command not found」と表示される。
問題はない。問題はないのだけど何か味気ない。そもそもダイナミックにtypoする場合は意図的に存在しないコマンドを叩いてる事が多い(例:% ababababa)。てかtypoと言わない。また、その場合誰かと一つのターミナル見ながら作業していることもしばしば(ダブルチェック中の悪ふざけとか)。そんな時に「command not found」とマジレスされても困るので変更してみた。細かいとこにもエレガントにネタを仕込んでおくのも大人のマナーである(要出典)。
変更の仕方もなんてことなく、zshのソースの一部を書き換えてmakeし直すだけです。対象ファイルはzshのソースのSrc/exec.cです。
--- exec.c.org 2010-12-16 22:51:53.000000000 +0900 +++ exec.c 2011-04-13 14:49:10.000000000 +0900 @@ -656,7 +656,7 @@ if (!ps) { if (commandnotfound(arg0, args) == 0) _exit(0); - zerr("command not found: %s", arg0); + zerr("command not found m9(^o^): %s", arg0); _exit(127); } @@ -721,7 +721,7 @@ else if (commandnotfound(arg0, args) == 0) _exit(0); else - zerr("command not found: %s", arg0); + zerr("command not found m9(^o^): %s", arg0); _exit((eno == EACCES || eno == ENOEXEC) ? 126 : 127); }
例えば上記のように変更すると
こうなります。
はい、すいませんでした・・・