(zsh版)pushし忘れないようにプロンプトに表示するようにした
今日はPython-hack-a-thonなんだけど結局行けなかったため、一人発火村イェーー……。
ってことで pushし忘れないようにプロンプトに表示するようにした - ぱせらんメモを参考に、zshのRPROMPTにremoteにpushしているかを表示するようにしてみた。
今.zshrcに設定してる内容は、zsh で Git の作業コピーに変更があるかどうかをプロンプトに表示する方法 - ess supを参考にさせてもらいました。そこに、上記のエントリの内容を追加してます。
autoload -Uz add-zsh-hook autoload -Uz vcs_info zstyle ':vcs_info:*' enable git svn hg bzr zstyle ':vcs_info:*' formats '(%s)-[%b]' zstyle ':vcs_info:*' actionformats '(%s)-[%b|%a]' zstyle ':vcs_info:(svn|bzr):*' branchformat '%b:r%r' zstyle ':vcs_info:bzr:*' use-simple true autoload -Uz is-at-least if is-at-least 4.3.10; then # この check-for-changes が今回の設定するところ zstyle ':vcs_info:git:*' check-for-changes true zstyle ':vcs_info:git:*' stagedstr "+" # 適当な文字列に変更する zstyle ':vcs_info:git:*' unstagedstr "-" # 適当の文字列に変更する zstyle ':vcs_info:git:*' formats '(%s)-[%c%u%b]' zstyle ':vcs_info:git:*' actionformats '(%s)-[%c%u%b|%a]' fi function _update_vcs_info_msg() { psvar=() LANG=en_US.UTF-8 vcs_info psvar[2]=$(_git_not_pushed) [[ -n "$vcs_info_msg_0_" ]] && psvar[1]="$vcs_info_msg_0_" } add-zsh-hook precmd _update_vcs_info_msg function _git_not_pushed() { if [ "$(git rev-parse --is-inside-work-tree 2>/dev/null)" = "true" ]; then head="$(git rev-parse HEAD)" for x in $(git rev-parse --remotes) do if [ "$head" = "$x" ]; then return 0 fi done echo "{?}" fi return 0 } RPROMPT="%1(v|%F${CYAN}%1v%2v%f|)${vcs_info_git_pushed}${RESET}${WHITE}[${BLUE}%(5~,%-2~/.../%2~,%~)% ${WHITE}]${WINDOW:+"[$WINDOW]"} ${RESET}"
自分は、必ずしもremoteにpushするbranchばかりな訳ではなく、ローカルのtopic brachで作業することも多いので、表示は控えめに"{?}"にしておいた。
RPROMPTに出す文字列は、psvar[2]を経由して出しているのだけど、もっとスマートな方法ないかしらん?
zshのvcs_info周りはzsh: 26. User Contributionsを読むとよいです。俺はよく理解してませんが。
あと、俺の.zshrcなどdotfiles関連です。