Zsh
Linux

コマンドを間違えるたびに美少女に罵られたい!

コマンドを間違えるたびに美少女に罵られてみたい、と誰しも思ったことはありませんか?
そんな長年の夢を叶えましょう!!!

結果

k.png

罵ってくれました。

方法

jp2aを導入する

任意のJPEG画像をアスキーアートにして表示してくれるパッケージです。
たぶん以下でインストールできます。

$ sudo apt install jp2a # for Debian,Ubuntu
$ brew install jp2a     # for MacOSX,Linuxbrew

画像を用意する

可愛い女の子の画像を用意しましょう。また、グレースケールにしておくと表示が綺麗になります。

シェルにフックを登録する

コマンドを間違えたときに呼ばれる関数があるので、それを使いましょう。
jp2aを使い画像を表示し、その後にメッセージを表示します。

Bashの場合

bashrc
function command_not_found_handle(){
  if [ -e /usr/bin/jp2a ];then
    if [ -e ~/kirino.jpg ];then
      jp2a ~/kirino.jpg -i
    fi
  fi
  echo "ハァ…?$1とか何言ってんの?\nコマンドもろくに覚えられないなんて、アンタどうしようもないクズね。"
}

ZSHの場合

zshrc
function command_not_found_handler(){
  if [ -e /usr/bin/jp2a ];then
    if [ -e ~/kirino.jpg ];then
      jp2a ~/kirino.jpg -i
    fi
  fi
  echo "ハァ…?$1とか何言ってんの?\nコマンドもろくに覚えられないなんて、アンタどうしようもないクズね。"
}

fishの場合

@QUANON さんから、以下のようなコメントを頂きました!ありがとうございます!!

僕は fish を使っているのですが、このシェルでも次の function を定義することで実現できました。

function command_not_found_handler --on-event fish_command_not_found
    if type -q jp2a; and test -e ~/kirino.jpg
        jp2a ~/kirino.jpg -i
    end

    echo ハァ…?$argv[1]とか何言ってんの?
    echo コマンドもろくに覚えられないなんて、アンタどうしようもないクズね。
end

bashとzshで'handle'と'handler'の違いがあるので注意です。また画像のパスは適宜変更してください。
また、jp2a自体のオプションを弄ることで、表示するときの行や列を指定することができます。
デフォルトでは、白に近い部分を表示させますが、ぼくの場合白黒にしてほとんど白となってしまい、見づらかったので、あえて黒の部分を表示させるために-iを付けています。

$ jp2a hoge.jpg --width=100 # 横幅を100列固定で表示
$ jp2a hoge.jpg --height=100 # 横幅を100列固定で表示
$ jp2a hoge.jpg -i # 白黒反転で表示

これで一通りの手順は完了です。

k.png

もっと高解像度で罵られたい。というかもう動画がいい。

そう思った方、とても良い考え方だと思います。同士です。
次は、アスキーアートだけではなく、本当の画像やgifアニメを表示させたいと思います。

iTerm2.appの場合

コメント欄にて、@kuzukuzu1gou さんがiTerm2でimgcatを使う方法を教えてくれました。

k.png

jp2aの部分を、そのままimgcatというコマンドに置き換えれば表示できます。

$ imgcat hoge.jpg

xterm mltermの場合

img2sixelというパッケージを使えば、画像の表示や、gitアニメの再生ができます。

$ img2sixel hoge.jpg
$ img2sixel hoge.gif -l disable # -l disableを付けないとアニメがループしてプロンプトが帰ってこない

また、任意のyoutubeや動画ファイルをgitアニメにするには以下を参考にしてください。
Linuxで、コマンドだけでyoutubeから動画をダウンロードして任意の時間を切り出してgitアニ化する

k.png

demo.gif

ゾクゾクしちゃいますね。
これで楽しいシェルライフを送りましょう!