Hatena::ブログ(Diary)

ヤルキデナイズドだった

Yarukidenized

2009-10-17

[][] git のブランチ名を zsh の右プロンプトに表示+ status に応じて色もつけてみた 02:06  git のブランチ名を zsh の右プロンプトに表示+ status に応じて色もつけてみたを含むブックマーク

Update

改良しました→ git のブランチ名 *と作業状態* を zsh の右プロンプトに表示+ status に応じて色もつけてみた - ヤルキデナイズドだった

以下古い情報

こんなんなります。

f:id:uasi:20091018064622p:image

  • 作業ディレクトリがクリーンなら緑
  • 追跡されていないファイルがあるときは黄色
  • 追跡されているファイルに変更があるときは赤
  • 変更あり+未追跡ファイルありで太字の赤

そんな感じで。

コード

# ${fg[...]} や $reset_color をロード
autoload -U colors; colors

function rprompt-git-current-branch {
        local name st color

        if [[ "$PWD" =~ '/\.git(/.*)?$' ]]; then
                return
        fi
        name=$(basename "`git symbolic-ref HEAD 2> /dev/null`")
        if [[ -z $name ]]; then
                return
        fi
        st=`git status 2> /dev/null`
        if [[ -n `echo "$st" | grep "^nothing to"` ]]; then
                color=${fg[green]}
        elif [[ -n `echo "$st" | grep "^nothing added"` ]]; then
                color=${fg[yellow]}
        elif [[ -n `echo "$st" | grep "^# Untracked"` ]]; then
                color=${fg_bold[red]}
        else
                color=${fg[red]}
        fi

        # %{...%} は囲まれた文字列がエスケープシーケンスであることを明示する
        # これをしないと右プロンプトの位置がずれる
        echo "%{$color%}$name%{$reset_color%} "
}

# プロンプトが表示されるたびにプロンプト文字列を評価、置換する
setopt prompt_subst

RPROMPT='[`rprompt-git-current-branch`%~]'

gist に貼っておきました:http://gist.github.com/214109

補足

みぞみぞ 2009/12/17 13:39 basename `git symbolic-ref HEAD`
とかどうですか?

uasiuasi 2009/12/28 16:48 いいですね、 git symbolic-ref を使うように変更しました。
ありがとうございます。