これまで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
}
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の内容も表示させたいなと思い関数を書き換えた。
で、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
}
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はリンク先を参照のこと。
便利便利!
贅沢をいうとファイル数も表示されるともっと便利なんだろうけど、この課題は先送り。
実際のprecmdはリンク先を参照のこと。