-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathprompt_ssfprompt_setup
More file actions
159 lines (137 loc) · 3.73 KB
/
prompt_ssfprompt_setup
File metadata and controls
159 lines (137 loc) · 3.73 KB
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
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
# vim:ft=zsh
prompt_ssfprompt_help() {
print "Slim, simple, fast prompt -- https://gitlab.com/hugoh/zsh-ssfprompt"
# shellcheck disable=SC2028
print "\nCurrent status:"
prompt_ssfprompt_help_status
}
prompt_ssfprompt_setup() {
# Prompt options for promptinit
# shellcheck disable=SC2034
prompt_opts=(cr percent subst)
# Setup
prompt_ssfprompt_setup_PROMPT
prompt_ssfprompt_setup_RPROMPT
# zstyle ':prompt:ssfprompt' vi-mode off
if prompt_ssfprompt_vimode_is_enabled; then
prompt_ssfprompt_setup_vimode
fi
}
prompt_ssfprompt_setup_PROMPT() {
# Simple, lean PROMPT
# shellcheck disable=SC2016,SC2034
PROMPT='%B${SSH_CONNECTION:+"%F{blue}%n%F{yellow}@%F{red}%m "}%F{cyan}%(!.%1~.%~)%F{yellow} %F{yellow}%#%f%b '
}
prompt_ssfprompt_setup_RPROMPT() {
_ssfprompt_BASE_RPROMPT=''
RPROMPT=$_ssfprompt_BASE_RPROMPT
# VCS info on RPROMPT
# Set asynchronously by default
autoload -Uz add-zsh-hook
if async 2>/dev/null; then
add-zsh-hook precmd prompt_ssfprompt_async_precmd
else
# shellcheck disable=SC2016
RPROMPT+='$(prompt_ssfprompt_vcs_status)'
fi
}
prompt_ssfprompt_vimode_is_enabled() {
local _ssfprompt_vimode
if ! zstyle -s ':prompt:ssfprompt' vi-mode _ssfprompt_vimode || [[ "$_ssfprompt_vimode" != (off|false|no|0) ]]; then
return 0
else
return 1
fi
}
prompt_ssfprompt_setup_vimode() {
autoload -Uz add-zsh-hook
add-zsh-hook precmd prompt_ssfprompt_vi_keymap_select_cursor
function zle-keymap-select() { prompt_ssfprompt_vi_keymap_select }
zle -N zle-keymap-select
}
prompt_ssfprompt_help_status() {
# shellcheck disable=SC2154
if [[ ${prompt_theme[1]} != "ssfprompt" ]]; then
print "ssfprompt not loaded"
return 1
else
print "ssfprompt loaded"
# shellcheck disable=SC2154
if [[ ${precmd_functions[(I)prompt_ssfprompt_async_precmd]} -gt 0 ]]; then
print " async"
else
print " sync"
fi
if prompt_ssfprompt_vimode_is_enabled; then
print " vi-mode on"
else
print " vi-mode off"
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_BASE_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"
}
#
# Vim mode indicator
#
prompt_ssfprompt_vi_keymap_select_rprompt() {
local INDICATOR="%F{blue}[N]%f "
if [[ $KEYMAP == vicmd ]]; then
if [[ $RPROMPT != "$INDICATOR"* ]]; then
RPROMPT="$INDICATOR$RPROMPT"
fi
else
if [[ $RPROMPT == "$INDICATOR"* ]]; then
RPROMPT="${RPROMPT#$INDICATOR}"
fi
fi
}
prompt_ssfprompt_vi_keymap_select_cursor() {
local -A _ssfprompt_cursor_seq=(
[block]=$'\e[1 q'
[caret]=$'\e[5 q'
)
case $KEYMAP in
viins|emacs|main|)
print -n "${_ssfprompt_cursor_seq[caret]}"
;;
vicmd|visual)
print -n "${_ssfprompt_cursor_seq[block]}"
;;
esac
}
prompt_ssfprompt_vi_keymap_select() {
prompt_ssfprompt_vi_keymap_select_cursor
prompt_ssfprompt_vi_keymap_select_rprompt
zle reset-prompt
}
prompt_ssfprompt_setup "$@"