プロンプトを Lisp で書きたい 1

とりあえず、こんなのやりたい、というのを書いておきます。


bash のプロンプトは通常

$

だけの簡素なものですが、ここには様々な情報を表示することができます。

hebiyan@localhost.example.com
/home/hebiyan:$

この例ではユーザ名、サーバ名、カレントディレクトリを二行にわたって表示させています。


プロンプトには、更に色をつけることもできます*1

hebiyan@localhost.example.com
/home/hebiyan:$

こんなふうに。


さて、プロンプトの設定は bash の設定ファイルで行います。
上の例のように表示させるには、設定ファイルにこう書きます。

PS1="\[\e[0;31m\]\u\[\e[0m\]@\[\e[1;32m\]\h\[\e[0m\]\n\[\e[1;36m\]\w\[\e[0m\]\$ "

ね、簡単……
……じゃねえ。


こんなの書いてられません。「赤は 31 、水色は 36 ……」なんて憶えるのは無理。


そこで、式の右辺、"\[\e...\$ " の部分をこう書けるようにします。

(prompt (red username) "@" (green hostname :bright t) newline 
        (cyan abs-path :bright t) prompt-char)

まあわかりやすい。
表示したい情報もつけたい色も、名前をそのまま書けば OK、直観的。


でも Lisp で動かすから遅いんでしょ?
そんなあなたも安心。
私の環境*2では 45 ミリ秒、3 フレーム弱で完了します。ほとんど誤差ですね☆


……というスクリプトLisp でどう書いたか、という話を小出しにしながら、ちまちま書いていこうと思っています。
よろしくお願いします。次いつ書くかは未定です。

*1:bash を動かすターミナルエミュレータが色の表示に対応している必要があります。たいていのものでできる、はず?

*2:MacBookPro (Late 2013)