右プロンプト

zshには右プロンプトというものがある。 何に使うの?と思ってたけど、パスとかを表示させておくと便利(左に表示させるのと比べてカラムがずれないとか)なようなので試してみた。 ついでに、うっかりmasterをいじり回してしまう事故を防ぐために、gitのブランチも表示させてみる。

基本的にこちらの記事を参考、というかコピペ。 パスが長い時に省略するように最後だけ変えてみた。

autoload -Uz VCS_INFO_get_data_git; VCS_INFO_get_data_git 2> /dev/null
function rprompt-git-current-branch {
        local name st color gitdir action
        if [[ "$PWD" =~ '/\.git(/.*)?$' ]]; then
                return
        fi
        name=`git branch 2> /dev/null | grep '^\*' | cut -b 3-`
        if [[ -z $name ]]; then
                return
        fi
        gitdir=`git rev-parse --git-dir 2> /dev/null`
        action=`VCS_INFO_git_getaction "$gitdir"` && action="($action)"
        st=`git status 2> /dev/null`
        if [[ -n `echo "$st" | grep "^nothing to"` ]]; then
                color=%F{green}
        elif [[ -n `echo "$st" | grep "^nothing added"` ]]; then
                color=%F{yellow}
        elif [[ -n `echo "$st" | grep "^# Untracked"` ]]; then
                color=%B%F{red}
        else
                 color=%F{red}
         fi
        echo "$color$name$action%f%b "
}
setopt prompt_subst
RPROMPT='[`rprompt-git-current-branch`%20<..<%~]'

プロンプト描画するたびにgitが走るのでちょっと重い気もするけど、便利だからいいか。

ついでに左プロンプトに表示されていたパスをなくし、リモートの時はホスト名が出るようにしてみる。

case ${UID} in
0)
    PROMPT="# "
    PROMPT2="%_# "
    SPROMPT="%r is correct? [n,y,a,e]: " 
;;
*)
    PROMPT="%% "
    PROMPT2="%_%% "
    SPROMPT="%r is correct? [n,y,a,e]: " 
;;
esac

[ -n "${REMOTEHOST}${SSH_CONNECTION}" ] && 
PROMPT="%${HOST%%.*} ${PROMPT}"

もっと毛むくじゃらにもできるけど、まぁこのへんにしておこう。