右プロンプト
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}"
もっと毛むくじゃらにもできるけど、まぁこのへんにしておこう。