mirror of
https://github.com/danbee/dotfiles-local
synced 2025-03-04 08:49:07 +00:00
88 lines
1.8 KiB
Plaintext
88 lines
1.8 KiB
Plaintext
source "$HOME/.zsh/lib/async.zsh"
|
||
|
||
async_init
|
||
|
||
async_register_callback git_prompt_worker git_prompt_callback
|
||
|
||
export PROMPT_GIT_BRANCH=""
|
||
export PROMPT_GIT_DIRTY=""
|
||
|
||
git_prompt_callback() {
|
||
case $1 in
|
||
git_branch)
|
||
PROMPT_GIT_BRANCH=$3
|
||
;;
|
||
git_dirty)
|
||
PROMPT_GIT_DIRTY=$3
|
||
;;
|
||
esac
|
||
|
||
zle reset-prompt
|
||
}
|
||
|
||
# gets whether git is currently dirty
|
||
git_dirty() {
|
||
git diff --ignore-submodules --quiet
|
||
if [[ $? == 1 ]]; then
|
||
echo "✱"
|
||
else
|
||
git diff --staged --ignore-submodules --quiet
|
||
[[ $? == 1 ]] && echo "✱"
|
||
fi
|
||
}
|
||
|
||
# gets the current git branch
|
||
git_branch() {
|
||
git rev-parse --abbrev-ref HEAD 2>/dev/null
|
||
}
|
||
|
||
# adds the current branch name in green
|
||
git_prompt_info() {
|
||
if [[ -n $PROMPT_GIT_BRANCH ]]; then
|
||
echo "%{$fg_bold[green]%}${PROMPT_GIT_BRANCH}%{$reset_color%}%{$fg_bold[red]%}${PROMPT_GIT_DIRTY}%{$reset_color%} "
|
||
fi
|
||
}
|
||
|
||
git_branch_async() {
|
||
async_job git_prompt_worker git_branch
|
||
}
|
||
|
||
git_status_async() {
|
||
async_job git_prompt_worker git_dirty
|
||
}
|
||
|
||
worker_change_directory() {
|
||
PROMPT_GIT_BRANCH=""
|
||
PROMPT_GIT_DIRTY=""
|
||
async_worker_eval git_prompt_worker builtin cd -q "$PWD"
|
||
}
|
||
|
||
async_start_worker git_prompt_worker
|
||
|
||
autoload -Uz add-zsh-hook
|
||
|
||
add-zsh-hook chpwd worker_change_directory
|
||
add-zsh-hook precmd git_branch_async
|
||
add-zsh-hook precmd git_status_async
|
||
|
||
# makes color constants available
|
||
autoload -U colors
|
||
colors
|
||
|
||
# enable colored output from ls, etc
|
||
export CLICOLOR=1
|
||
|
||
# expand functions in the prompt
|
||
setopt promptsubst
|
||
|
||
# prompt
|
||
export PROMPT='$(git_prompt_info)${SSH_CONNECTION+"%{$fg[yellow]%}%n@%m%{$reset_color%}:"}%{$fg_bold[blue]%}%2c%{$reset_color%} %{$fg_bold[cyan]%}❯%{$reset_color%} '
|
||
export RPROMPT='%D{%K:%M:%S}'
|
||
|
||
# update the prompt on carriage return
|
||
function _reset-prompt-and-accept-line() {
|
||
zle reset-prompt
|
||
zle .accept-line
|
||
}
|
||
zle -N accept-line _reset-prompt-and-accept-line
|