1
0
mirror of https://github.com/danbee/dotfiles-local synced 2025-03-04 08:49:07 +00:00
dotfiles-local/zsh/configs/prompt.zsh.local

88 lines
1.8 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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