ダメ人間オンライン

あまり信用しないほうがいい技術メモとか備忘録とかその他雑記

zshの「command not found」表示を変更した

zshtypoした場合setopt correctを設定しておくと「打ちたかったコマンドこれじゃね?」と諭してくれる。

f:id:dameninngenn_owata:20120815033306p:plain:w302

しかしダイナミックにtypoした場合は普通に「command not found」と表示される。

f:id:dameninngenn_owata:20120815033343p:plain:w309

問題はない。問題はないのだけど何か味気ない。そもそもダイナミックに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);
 }

例えば上記のように変更すると

f:id:dameninngenn_owata:20120815033429p:plain:w359

こうなります。

はい、すいませんでした・・・