all repos — nixfiles @ d5bde98df481dbbd7407e8d968f985da32220c64

System and user configuration, managed by nix and home-manager

Update pure prompt

Alan Pearce
commit

d5bde98df481dbbd7407e8d968f985da32220c64

parent

5437177559b02eab5348f19b716bf425bff9848c

1 file changed, 28 insertions(+), 7 deletions(-)

jump to
M zsh/functions/pure/prompt_pure_setupzsh/functions/pure/prompt_pure_setup
@@ -18,8 +18,8 @@ # %(?..) => prompt conditional - %(condition.true.false)
# 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 @@ }
# 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 @@
# 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 @@ # show username@host if logged in through SSH
[[ "$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 "$@"