-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprompt_ssfprompt_setup
90 lines (76 loc) · 2.26 KB
/
prompt_ssfprompt_setup
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# vim:ft=zsh
prompt_ssfprompt_help() {
echo "Slim, simple, fast prompt -- https://gitlab.com/hugoh/zsh-ssfprompt"
echo "\nCurrent status:"
prompt_ssfprompt_help_status
}
prompt_ssfprompt_setup() {
# Prompt options for promptinit
prompt_opts=(bang cr percent subst)
# Setup
prompt_ssfprompt_setup_PROMPT
prompt_ssfprompt_setup_RPROMPT
}
prompt_ssfprompt_setup_PROMPT() {
# Simple, lean PROMPT
local VIRTUAL_ENV_prefix="" # Requires a Nerd font for the Python glyph
PROMPT='${SSH_CONNECTION:+"%F{blue}%(!.%B.)%n%F{yellow}@%b%F{red}%m "}%F{cyan}%(!.%1~.%~)%F{yellow}${VIRTUAL_ENV:+ '"${VIRTUAL_ENV_prefix}"'${VIRTUAL_ENV:t}} %F{yellow}%#%f '
VIRTUAL_ENV_DISABLE_PROMPT=1
}
prompt_ssfprompt_setup_RPROMPT() {
# VCS info on RPROMPT
_ssfprompt_RPROMPT='%(?..%F{red}%?↵%f)'
RPROMPT=$_ssfprompt_RPROMPT
# Set asynchronously by default
autoload -Uz add-zsh-hook
if async_init 2>/dev/null; then
add-zsh-hook precmd prompt_ssfprompt_async_precmd
else
RPROMPT+='$(prompt_ssfprompt_vcs_status)'
fi
}
prompt_ssfprompt_help_status() {
if [[ $prompt_theme[1] != "ssfprompt" ]]; then
echo "ssfprompt not loaded"
return 1
else
echo "ssfprompt loaded"
if [[ ${precmd_functions[(I)prompt_ssfprompt_async_precmd]} > 0 ]]; then
echo " async"
else
echo " sync"
fi
fi
}
#
# VCS status function (using posh-git-sh; can be overriden)
#
prompt_ssfprompt_vcs_status() {
__posh_git_echo
}
#
# Asynchronous vcs_info thanks to mafredri/zsh-async
#
prompt_ssfprompt_async_precmd() {
RPROMPT=$_ssfprompt_RPROMPT
# Get vcs_info using the worker; will be updated via the callback
async_start_worker "prompt_ssfprompt_worker"
async_register_callback "prompt_ssfprompt_worker" prompt_ssfprompt_async_rprompt_render
async_job "prompt_ssfprompt_worker" prompt_ssfprompt_async_vcs_info "$PWD"
}
prompt_ssfprompt_async_vcs_info() {
# Return VCS information for current directory
cd "$1" || return 1
prompt_ssfprompt_vcs_status
}
prompt_ssfprompt_async_rprompt_render() {
# Update RPROMPT with the VCS info just received
local output="$3"
if [[ -n "$output" ]]; then
RPROMPT+="$output"
# Refresh prompt
zle && zle reset-prompt
fi
async_stop_worker "prompt_ssfprompt_worker"
}
prompt_ssfprompt_setup "$@"