mirror of
https://github.com/ohmyzsh/ohmyzsh.git
synced 2024-12-18 10:22:00 +00:00
444e715766
The git_prompt_info() function in lib/git.zsh ignores git repos which contains a specific config key, allowing to effectively "hide" them from the prompt. Unfortunately, the bureau theme doesn't use the library function to build its prompt. This commit modifies the specific prompt generation function in the bureau theme in order to achieve the same behaviour.
132 lines
3.5 KiB
Bash
132 lines
3.5 KiB
Bash
# oh-my-zsh Bureau Theme
|
|
|
|
### NVM
|
|
|
|
ZSH_THEME_NVM_PROMPT_PREFIX="%B⬡%b "
|
|
ZSH_THEME_NVM_PROMPT_SUFFIX=""
|
|
|
|
### Git [±master ▾●]
|
|
|
|
ZSH_THEME_GIT_PROMPT_PREFIX="[%{$fg_bold[green]%}±%{$reset_color%}%{$fg_bold[white]%}"
|
|
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}]"
|
|
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg_bold[green]%}✓%{$reset_color%}"
|
|
ZSH_THEME_GIT_PROMPT_AHEAD="%{$fg[cyan]%}▴%{$reset_color%}"
|
|
ZSH_THEME_GIT_PROMPT_BEHIND="%{$fg[magenta]%}▾%{$reset_color%}"
|
|
ZSH_THEME_GIT_PROMPT_STAGED="%{$fg_bold[green]%}●%{$reset_color%}"
|
|
ZSH_THEME_GIT_PROMPT_UNSTAGED="%{$fg_bold[yellow]%}●%{$reset_color%}"
|
|
ZSH_THEME_GIT_PROMPT_UNTRACKED="%{$fg_bold[red]%}●%{$reset_color%}"
|
|
|
|
bureau_git_info () {
|
|
local ref
|
|
ref=$(command git symbolic-ref HEAD 2> /dev/null) || \
|
|
ref=$(command git rev-parse --short HEAD 2> /dev/null) || return
|
|
echo "${ref#refs/heads/}"
|
|
}
|
|
|
|
bureau_git_status() {
|
|
local result gitstatus
|
|
gitstatus="$(command git status --porcelain -b 2>/dev/null)"
|
|
|
|
# check status of files
|
|
local gitfiles="$(tail -n +2 <<< "$gitstatus")"
|
|
if [[ -n "$gitfiles" ]]; then
|
|
if [[ "$gitfiles" =~ $'(^|\n)[AMRD]. ' ]]; then
|
|
result+="$ZSH_THEME_GIT_PROMPT_STAGED"
|
|
fi
|
|
if [[ "$gitfiles" =~ $'(^|\n).[MTD] ' ]]; then
|
|
result+="$ZSH_THEME_GIT_PROMPT_UNSTAGED"
|
|
fi
|
|
if [[ "$gitfiles" =~ $'(^|\n)\\?\\? ' ]]; then
|
|
result+="$ZSH_THEME_GIT_PROMPT_UNTRACKED"
|
|
fi
|
|
if [[ "$gitfiles" =~ $'(^|\n)UU ' ]]; then
|
|
result+="$ZSH_THEME_GIT_PROMPT_UNMERGED"
|
|
fi
|
|
else
|
|
result+="$ZSH_THEME_GIT_PROMPT_CLEAN"
|
|
fi
|
|
|
|
# check status of local repository
|
|
local gitbranch="$(head -n 1 <<< "$gitstatus")"
|
|
if [[ "$gitbranch" =~ '^## .*ahead' ]]; then
|
|
result+="$ZSH_THEME_GIT_PROMPT_AHEAD"
|
|
fi
|
|
if [[ "$gitbranch" =~ '^## .*behind' ]]; then
|
|
result+="$ZSH_THEME_GIT_PROMPT_BEHIND"
|
|
fi
|
|
if [[ "$gitbranch" =~ '^## .*diverged' ]]; then
|
|
result+="$ZSH_THEME_GIT_PROMPT_DIVERGED"
|
|
fi
|
|
|
|
# check if there are stashed changes
|
|
if command git rev-parse --verify refs/stash &> /dev/null; then
|
|
result+="$ZSH_THEME_GIT_PROMPT_STASHED"
|
|
fi
|
|
|
|
echo $result
|
|
}
|
|
|
|
bureau_git_prompt() {
|
|
# ignore non git folders and hidden repos (adapted from lib/git.zsh)
|
|
if ! command git rev-parse --git-dir &> /dev/null \
|
|
|| [[ "$(command git config --get oh-my-zsh.hide-info 2>/dev/null)" == 1 ]]; then
|
|
return
|
|
fi
|
|
|
|
# check git information
|
|
local gitinfo=$(bureau_git_info)
|
|
if [[ -z "$gitinfo" ]]; then
|
|
return
|
|
fi
|
|
|
|
# quote % in git information
|
|
local output="${gitinfo:gs/%/%%}"
|
|
|
|
# check git status
|
|
local gitstatus=$(bureau_git_status)
|
|
if [[ -n "$gitstatus" ]]; then
|
|
output+=" $gitstatus"
|
|
fi
|
|
|
|
echo "${ZSH_THEME_GIT_PROMPT_PREFIX}${output}${ZSH_THEME_GIT_PROMPT_SUFFIX}"
|
|
}
|
|
|
|
|
|
_PATH="%{$fg_bold[white]%}%~%{$reset_color%}"
|
|
|
|
if [[ $EUID -eq 0 ]]; then
|
|
_USERNAME="%{$fg_bold[red]%}%n"
|
|
_LIBERTY="%{$fg[red]%}#"
|
|
else
|
|
_USERNAME="%{$fg_bold[white]%}%n"
|
|
_LIBERTY="%{$fg[green]%}$"
|
|
fi
|
|
_USERNAME="$_USERNAME%{$reset_color%}@%m"
|
|
_LIBERTY="$_LIBERTY%{$reset_color%}"
|
|
|
|
|
|
get_space () {
|
|
local STR=$1$2
|
|
local zero='%([BSUbfksu]|([FB]|){*})'
|
|
local LENGTH=${#${(S%%)STR//$~zero/}}
|
|
local SPACES=$(( COLUMNS - LENGTH - ${ZLE_RPROMPT_INDENT:-1} ))
|
|
|
|
(( SPACES > 0 )) || return
|
|
printf ' %.0s' {1..$SPACES}
|
|
}
|
|
|
|
_1LEFT="$_USERNAME $_PATH"
|
|
_1RIGHT="[%*]"
|
|
|
|
bureau_precmd () {
|
|
_1SPACES=`get_space $_1LEFT $_1RIGHT`
|
|
print
|
|
print -rP "$_1LEFT$_1SPACES$_1RIGHT"
|
|
}
|
|
|
|
setopt prompt_subst
|
|
PROMPT='> $_LIBERTY '
|
|
RPROMPT='$(nvm_prompt_info) $(bureau_git_prompt)'
|
|
|
|
autoload -U add-zsh-hook
|
|
add-zsh-hook precmd bureau_precmd
|