diff options
-rw-r--r-- | zsh/functions/pure/prompt_pure_setup | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/zsh/functions/pure/prompt_pure_setup b/zsh/functions/pure/prompt_pure_setup index 1bbe2673..275224ad 100644 --- a/zsh/functions/pure/prompt_pure_setup +++ b/zsh/functions/pure/prompt_pure_setup @@ -18,8 +18,8 @@ # fastest possible way to check if repo is dirty prompt_pure_git_dirty() { - # check if we're at the top level of a git repo - [[ -d .git ]] || return + # check if we're in a git repo + command git rev-parse --is-inside-work-tree &>/dev/null || return # check if it's dirty command git diff --quiet --ignore-submodules HEAD &>/dev/null @@ -28,17 +28,24 @@ prompt_pure_git_dirty() { # displays the exec time of the last command if set threshold was exceeded prompt_pure_cmd_exec_time() { - local stop=`date +%s` + local stop=$(date +%s) local start=${cmd_timestamp:-$stop} integer elapsed=$stop-$start (($elapsed > ${PURE_CMD_MAX_EXEC_TIME:=5})) && echo ${elapsed}s } prompt_pure_preexec() { - cmd_timestamp=`date +%s` + cmd_timestamp=$(date +%s) # shows the current dir and executed command in the title when a process is active - print -Pn "\e]0;$PWD:t: $2\a" + print -Pn "\e]0;" + echo -nE "$PWD:t: $2" + print -Pn "\a" +} + +# string length ignoring ansi escapes +prompt_pure_string_length() { + echo ${#${(S%%)1//(\%([KF1]|)\{*\}|\%[Bbkf])}} } prompt_pure_precmd() { @@ -48,7 +55,21 @@ prompt_pure_precmd() { # git info vcs_info - print -P '%F{blue}%~%F{11}$vcs_info_msg_0_`prompt_pure_git_dirty` $prompt_pure_username%f %F{yellow}`prompt_pure_cmd_exec_time`%f' + local prompt_pure_preprompt='\n%F{blue}%~%F{242}$vcs_info_msg_0_`prompt_pure_git_dirty` $prompt_pure_username%f %F{yellow}`prompt_pure_cmd_exec_time`%f' + print -P $prompt_pure_preprompt + + # check async if there is anything to pull + { + # check if we're in a git repo + command git rev-parse --is-inside-work-tree &>/dev/null && + # check check if there is anything to pull + command git fetch &>/dev/null && + # check if there is an upstream configured for this branch + command git rev-parse --abbrev-ref @'{u}' &>/dev/null && + (( $(command git rev-list --count HEAD...@'{u}' 2>/dev/null) > 0 )) && + # some crazy ansi magic to inject the symbol into the previous line + print -Pn "\e7\e[A\e[1G\e[`prompt_pure_string_length $prompt_pure_preprompt`C%F{cyan}⇣%f\e8" + } &! # reset value since `preexec` isn't always triggered unset cmd_timestamp @@ -72,7 +93,7 @@ prompt_pure_setup() { [[ "$SSH_CONNECTION" != '' ]] && prompt_pure_username='%n@%m ' # prompt turns red if the previous command didn't exit with 0 - PROMPT='%(?.%F{14}.%F{magenta})❯%f ' + PROMPT='%(?.%F{magenta}.%F{red})❯%f ' } prompt_pure_setup "$@" |