From 8910f5decaaae1dd6de157b93833bcf872f95b4f Mon Sep 17 00:00:00 2001 From: Jan Gosmann Date: Sat, 25 Feb 2012 22:37:01 +0100 Subject: [PATCH 1/4] Display detached head state in git prompt. --- lib/git.zsh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/git.zsh b/lib/git.zsh index fb4ad8ca6..534c1072c 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -1,6 +1,7 @@ # get the name of the branch we are on function git_prompt_info() { - ref=$(git symbolic-ref HEAD 2> /dev/null) || return + git rev-parse 2> /dev/null || return + ref=$(git symbolic-ref HEAD 2> /dev/null || print '(no branch)') echo "$ZSH_THEME_GIT_PROMPT_PREFIX${ref#refs/heads/}$(parse_git_dirty)$ZSH_THEME_GIT_PROMPT_SUFFIX" } From 303fb7286ca5151d5454d435a193024650d3bdf2 Mon Sep 17 00:00:00 2001 From: Jan Gosmann Date: Sat, 25 Feb 2012 22:43:40 +0100 Subject: [PATCH 2/4] More detailed git prompt information. Possibility to also display if a branch is behind, has diverged or is up-to-date. Also changed the implementation to use git-rev-list which is a bit easier than git-log. --- lib/git.zsh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/git.zsh b/lib/git.zsh index 534c1072c..844a31d16 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -22,8 +22,16 @@ parse_git_dirty() { # Checks if there are commits ahead from remote function git_prompt_ahead() { - if $(echo "$(git log origin/$(current_branch)..HEAD 2> /dev/null)" | grep '^commit' &> /dev/null); then - echo "$ZSH_THEME_GIT_PROMPT_AHEAD" + ahead=$(git rev-list origin/$(current_branch)..HEAD -- 2> /dev/null) + behind=$(git rev-list HEAD..origin/$(current_branch) -- 2> /dev/null) + if [[ -n $ahead && -n $behind ]]; then + echo "$ZSH_THEME_GIT_PROMPT_DIVERGED" + elif [[ -n $ahead ]]; then + echo "$ZSH_THEME_GIT_PROMPT_AHEAD" + elif [[ -n $behind ]]; then + echo "$ZSH_THEME_GIT_PROMPT_BEHIND" + else + echo "$ZSH_THEME_GIT_PROMPT_UPTODATE" fi } From 667bcf3bbf7133b76552e64e818b8749cafeee26 Mon Sep 17 00:00:00 2001 From: Jan Gosmann Date: Sat, 25 Feb 2012 22:52:36 +0100 Subject: [PATCH 3/4] Allow "staged" as result of parse_git_dirty(). If the corresponding parameter is not set "dirty" will be used as before. --- lib/git.zsh | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/lib/git.zsh b/lib/git.zsh index 844a31d16..360fa9086 100644 --- a/lib/git.zsh +++ b/lib/git.zsh @@ -8,12 +8,13 @@ function git_prompt_info() { # Checks if working tree is dirty parse_git_dirty() { - local SUBMODULE_SYNTAX='' - if [[ $POST_1_7_2_GIT -gt 0 ]]; then - SUBMODULE_SYNTAX="--ignore-submodules=dirty" - fi - if [[ -n $(git status -s ${SUBMODULE_SYNTAX} 2> /dev/null) ]]; then - echo "$ZSH_THEME_GIT_PROMPT_DIRTY" + gitstatus=$(git status --porcelain ${SUBMODULE_SYNTAX} 2> /dev/null) + if [[ -n "$gitstatus" ]]; then + if [[ "$gitstatus" =~ '^[MADRCU].*$' ]] && (($+ZSH_THEME_GIT_PROMPT_STAGED)); then + echo "$ZSH_THEME_GIT_PROMPT_STAGED" + else + echo "$ZSH_THEME_GIT_PROMPT_DIRTY" + fi else echo "$ZSH_THEME_GIT_PROMPT_CLEAN" fi From 6daa2f1a4f61af57f81e7d4d5ec7b3a220e85e12 Mon Sep 17 00:00:00 2001 From: Jan Gosmann Date: Sat, 25 Feb 2012 23:37:46 +0100 Subject: [PATCH 4/4] My theme, initial commit. --- themes/jgosmann.zsh-theme | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 themes/jgosmann.zsh-theme diff --git a/themes/jgosmann.zsh-theme b/themes/jgosmann.zsh-theme new file mode 100644 index 000000000..0933b104b --- /dev/null +++ b/themes/jgosmann.zsh-theme @@ -0,0 +1,18 @@ +MODE_INDICATOR='%U' + +ZSH_THEME_GIT_PROMPT_STAGED='%F{yellow}' +ZSH_THEME_GIT_PROMPT_DIRTY='%F{red}' +ZSH_THEME_GIT_PROMPT_CLEAN='%F{green}' +ZSH_THEME_GIT_PROMPT_DIVERGED='↕' +ZSH_THEME_GIT_PROMPT_AHEAD='↑' +ZSH_THEME_GIT_PROMPT_BEHIND='↓' +ZSH_THEME_GIT_PROMPT_UPTODATE='|' + +function git_prompt_info() { + git rev-parse 2> /dev/null || return + ref=$(git symbolic-ref HEAD 2> /dev/null || print '(no branch)') + echo "$(git_prompt_ahead)$(parse_git_dirty)${ref#refs/heads/}" +} + +PROMPT='$(vi_mode_prompt_info 2> /dev/null)%m:%F{blue}%1~%f$(git_prompt_info)%{%(?.%F{green}.%F{red})%}%(!.#.>)%f%u ' +RPS1='%(?..%F{red}%? )%F{yellow}$(git_prompt_short_sha)%f'