zshプロンプト

奥が深い….
各種ページを参考にしつつ、下記のような状態。

## prompt
# 色を名称で指定
setopt prompt_subst
autoload -U colors
colors

load_average_color () {
    case $(uptime | sed 's/.*: \([0-9]\.[0-9]*\).*/\1/') in
    0.[0-4]*)
        echo $fg[green]
        ;;
    0.[5-9]*)
        echo $fg[blue]
        ;;
    1.*)
        echo $fg[yellow]
        ;;
    2.*)
        echo $fg[red]
        ;;
    *)
        echo $fg_bold[red]
        ;;
    esac
}

PROMPT="%{$fg[red]%} %%%{$reset_color%} "
PROMPT2="%{$fg[red]%}%_%%%{$reset_color%} "
SPROMPT="%{$fg_bold[red]%}%r is correct? [n,y,a,e]: %{$reset_color%}"
RPROMPT='%{$(load_average_color)%}%~ `date +"%m%d %H%M"`%{$reset_color%}'

[ -n "${WINDOW}" ] &&
    PROMPT="%{$fg[red]%}[$WINDOW]${PROMPT}"
[ -n "${REMOTEHOST}${SSH_CONNECTION}" ] &&
    PROMPT="%{$fg_bold[blue]%}${HOST%%.*}${PROMPT}"

ちょっと泥臭い部分もあるが、まぁいいかなぁと。
ポイントは、setopt prompt_subst、autoload -U colors、colorsの3行とRPROMPTがシングルクォーテーション。

prompt_substによりRPROMPT中の変数がうまいこと処理される。
autoload -U colors、colorsにより「%{^[[31m%}」のような指定ではなく「%{$fg[red]%}」と比較的わかりやすい指定が可能に。
シングルクォーテーションで囲っていることにより、load_avg_colorとdateが毎回呼び出され動的な値が反映される。
といった感じ。

load_average_color ()は殆ど他の方のコピペ ;-)
ただ、でもでも動くよう若干調整。

参考にさせて頂いたページ

Related posts

Tags: , , ,

Leave a Reply