[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:
parent
342f6e94a3
commit
aa0c1faa19
2 changed files with 24 additions and 29 deletions
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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 "$@"
|
||||
|
||||
|
|
Loading…
Reference in a new issue