2007年12月3日月曜日

zshのプロンプトに色

zsh のプロンプトに色をつけてみる。

いろんなサイトを参考にした結果、次の設定となった。

#local LEFTC=$'%{\e[1;32m%}' #ターミナル.app 用
#local RIGHTC=$'%{\e[1;34m%}' #ターミナル.app 用
local LEFTC=$'%{\e[38;5;30m%}'
local RIGHTC=$'%{\e[38;5;88m%}'
local DEFAULTC=$'%{\e[m%}'
export PROMPT=$LEFTC"%U$USER%%%u "$DEFAULTC
export RPROMPT=$RIGHTC"[%~]"$DEFAULTC

プロンプト文字列の前後の LEFTC, RIGHTC, DEFAULTC で
色をコントロールしている。

iTerm.app ではカラフル表示が可能だが、
デフォルトのターミナル.app は 8 色用の
エスケープシーケンスしか使えない。

8 色の \e[1;30m の形式のエスケープシーケンスでは
黒赤緑黄青紫水白が 30 から 37 に対応する。

\e[38;5;0m の形式では 0 から 255 が使える。
色の確認用に zsh の関数を作ってみた。

function pcolor() {
for ((f = 0; f < 255; f++)); do
printf "\e[38;5;%dm %3d#\e[m" $f $f
if [[ $f%8 -eq 7 ]] then
printf "\n"
fi
done
echo
}

ターミナルで pcolor を実行すると色の一覧が出力される。