« とある研修医の証言 | メイン | EclipseでAndroidプロジェクトをMavenで管理するための環境構築 + Emacsキーバインドの設定 »

zshのプロンプトにgit statusの情報(の一部)を表示する

これまでzshの右プロンプト(RPROMPT)にはgitのリポジトリ名を表示するようにしていた。
表示内容を決定する関数はこれ。
function get-git-branch(){
    typeset +g rtn
    typeset +g branch
    branch=$(git branch -a 2>/dev/null | grep "^*" | tr -d '\* ')
    if [[ -z $branch ]] then
    else
        if [[ $branch == "master" ]] then
            rtn="%{${fg[red]}%}(${branch})%{${reset_color}%}"
        else
            rtn="%{${fg[green]}%}(${branch})%{${reset_color}%}"
        fi
    fi
    echo $rtn
}
リポジトリがmasterの時は赤、それ以外は緑になるようにしていた。
で、git statusの内容も表示させたいなと思い関数を書き換えた。
function get-git-status(){

    typeset +g rtn
    typeset +g gitstatus
    typeset +g branch
    typeset +g staging
    typeset +g unstage
    typeset +g untrack
    typeset +g color

    gitstatus=$(git status 2>/dev/null)

    if [[ -z $gitstatus ]] then
    else

        branch=$(echo ${gitstatus} | grep "^# On branch " | sed s/^#\ On\ branch\ //)

        if [[ -z $branch ]] then
        else

            staging=$(echo ${gitstatus} | grep "^# Changes to be committed:$" | wc -l|sed s/\ //g)
            unstage=$(echo ${gitstatus} | grep "^# Changes not staged for commit:$" | wc -l|sed s/\ //g)
            untrack=$(echo ${gitstatus} | grep "^# Untracked files:$" | wc -l|sed s/\ //g)

            if [[ $staging == "1" ]] then
                staging=":^"
            else
                staging=""
            fi
            if [[ $unstage == "1" ]] then
                unstage=":*"
            else
                unstage=""
            fi
            if [[ $untrack == "1" ]] then
                untrack=":?"
            else
                untrack=""
            fi
            if [[ $branch == "master" ]] then
                color="${fg[red]}"
            else
                color="${fg[green]}"
            fi

            rtn="%{${color}%}(${branch}${staging}${unstage}${untrack})%{${reset_color}%}"

        fi

    fi

    echo $rtn

}
これで、stagingされているファイルがある時には「^」、git管理下のファイルに変更がある時には「*」、git管理下ではないファイルがある時には「?」が表示されるようになる。

便利便利!

贅沢をいうとファイル数も表示されるともっと便利なんだろうけど、この課題は先送り。

実際のprecmdはリンク先を参照のこと。

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)

Google

タグ クラウド