[Fix #88] Allow arbitrary git-info formats

The terms 'prompt' and 'rprompt' are not always appropriate.
A multi-line theme may choose 'line-one' and 'line-two' instead.

@ColinHebert contributed to this commit.
This commit is contained in:
Sorin Ionescu 2012-04-04 18:55:15 -04:00
parent 342f6e94a3
commit aa0c1faa19
2 changed files with 24 additions and 29 deletions

View File

@ -46,21 +46,20 @@
# # %S - Indicator to notify of stashed files.
# zstyle ':omz:module:git' stashed 'stashed:%S'
#
# # %U - Indicator tnotify of unmerged files.
# # %U - Indicator to notify of unmerged files.
# zstyle ':omz:module:git' unmerged 'unmerged:%U'
#
# # %u - Indicator to notify of untracked files.
# zstyle ':omz:module:git' untracked 'untracked:%u'
#
# # Left prompt.
# zstyle ':omz:module:git' prompt ' git:(%b %D)'
#
# # Right prompt.
# zstyle ':omz:module:git' rprompt ''
#
# # Ignore submodule when it is 'dirty', 'untracked', 'all', or 'none'.
# zstyle ':omz:module:git:ignore' submodule ''
#
# # Prompts.
# zstyle ':omz:module:git' info \
# 'prompt' ' git:(%b%D)' \
# 'rprompt' ''
#
# Load dependencies.
omodload 'trap'
@ -197,6 +196,8 @@ function git-info {
local dirty_format
local dirty_formatted
local ignore_submodule
local -A info_formats
local info_format
local line_number=0
local modified=0
local modified_format
@ -204,7 +205,6 @@ function git-info {
local position
local position_format
local position_formatted
local prompt_format
local remote
local remote_cmd
local remote_format
@ -212,7 +212,6 @@ function git-info {
local renamed=0
local renamed_format
local renamed_formatted
local rprompt_format
local stashed=0
local stashed_format
local stashed_formatted
@ -223,12 +222,10 @@ function git-info {
local untracked=0
local untracked_format
local untracked_formatted
local -A git_info_vars
local git_info_var
# Clean up previous git-info.
unset git_prompt_info
unset git_rprompt_info
# Clean up previous $git_info.
unset git_info
typeset -gA git_info
# Return if not inside a Git repository work tree.
if ! is-true "$(git rev-parse --is-inside-work-tree 2> /dev/null)"; then
@ -384,17 +381,10 @@ function git-info {
zformat -f dirty_formatted "$dirty_format" "D:$dirty"
fi
# Format prompts.
zstyle -s ':omz:module:git' prompt 'prompt_format'
zstyle -s ':omz:module:git' rprompt 'rprompt_format'
git_info_vars=(
git_prompt_info "$prompt_format"
git_rprompt_info "$rprompt_format"
)
for git_info_var in ${(k)git_info_vars}; do
zformat -f "$git_info_var" "$git_info_vars[$git_info_var]" \
# Format info.
zstyle -a ':omz:module:git' info 'info_formats'
for info_format in ${(k)info_formats}; do
zformat -f REPLY "$info_formats[$info_format]" \
"A:$ahead_formatted" \
"B:$behind_formatted" \
"D:$dirty_formatted" \
@ -410,9 +400,12 @@ function git-info {
"r:$renamed_formatted" \
"s:$action_formatted" \
"u:$untracked_formatted"
git_info[$info_format]="$REPLY"
done
unset REPLY
unset _git_info_executing
return 0
}

View File

@ -41,12 +41,14 @@ function prompt_sorin_setup {
zstyle ':omz:module:git' stashed ' %%B%F{cyan}✭%f%%b'
zstyle ':omz:module:git' unmerged ' %%B%F{yellow}═%f%%b'
zstyle ':omz:module:git' untracked ' %%B%F{white}◼%f%%b'
zstyle ':omz:module:git' prompt ' %F{blue}git%f$(coalesce "%b" "%p" "%c")%s'
zstyle ':omz:module:git' rprompt '%A%B%S%a%d%m%r%U%u'
zstyle ':omz:module:git' info \
'prompt' ' %F{blue}git%f$(coalesce "%b" "%p" "%c")%s' \
'rprompt' '%A%B%S%a%d%m%r%U%u'
PROMPT='%F{cyan}%1~%f${(e)git_prompt_info} %(!.%B%F{red}#%f%b.%B%F{green}%f%b) '
RPROMPT='${editor_keymap_info}%(?:: %F{red}⏎%f)${VIM:+" %B%F{green}V%f%b"}${git_rprompt_info}'
PROMPT='%F{cyan}%1~%f${(e)git_info[prompt]} %(!.%B%F{red}#%f%b.%B%F{green}%f%b) '
RPROMPT='${editor_keymap_info}%(?:: %F{red}⏎%f)${VIM:+" %B%F{green}V%f%b"}${git_info[rprompt]}'
SPROMPT='zsh: correct %F{red}%R%f to %F{green}%r%f [nyae]? '
}
prompt_sorin_setup "$@"