1
1
# In a file `prompt_asynczle_setup` available on `fpath`
2
2
emulate -L zsh
3
3
4
- typeset -g C_PROMPT_NEWLINE=$' \n %{\r %}'
5
-
6
- typeset -g G_LAST_STATUS=0
7
- typeset -g G_PREEXEC_TS=0
8
- typeset -g G_ASYNC_DONE=0
9
-
10
- typeset -g G_PROMPT_DATA=" "
11
-
12
- typeset -g G_LAST_PROMPT=" "
4
+ typeset -g ZSH_ASYNC_PROMPT_TIMEOUT=${ZSH_ASYNC_PROMPT_TIMEOUT:- 5s}
5
+ typeset -g ZSH_ASYNC_PROMPT_EXEC=${GOPROMPT}
13
6
14
- declare -gA ZLE_ASYNC_FDS=()
7
+ typeset -g ZSH_ASYNC_PROMPT_DATA=" "
8
+ typeset -g ZSH_ASYNC_PROMPT_LAST=" "
15
9
16
- typeset -g ZSH_ASYNC_PROMPT_TIMEOUT=${ZSH_ASYNC_PROMPT_TIMEOUT:- 5s}
10
+ typeset -g ZSH_ASYNC_PROMPT_LAST_STATUS=0
11
+ typeset -g ZSH_ASYNC_PROMPT_PREEXEC_TS=0
12
+ typeset -g ZSH_ASYNC_PROMPT_QUERY_DONE=0
17
13
18
- typeset -g G_GOPROMPT=${GOPROMPT}
14
+ declare -gA __ZLE_ASYNC_FDS=()
15
+ typeset -g __ZSH_ASYNC_PROMPT_NEWLINE=$' \n %{\r %}'
19
16
20
17
# -------------------------------------------------------------------------------
21
18
@@ -31,20 +28,20 @@ __async_check_exec() {
31
28
}
32
29
33
30
__async_prompt_query () {
34
- if ! __async_check_exec " ${G_GOPROMPT } " ; then
31
+ if ! __async_check_exec " ${ZSH_ASYNC_PROMPT_EXEC } " ; then
35
32
echo -n " "
36
33
return
37
34
fi
38
35
39
- ${G_GOPROMPT } query \
40
- --cmd-status " $G_LAST_STATUS " \
41
- --preexec-ts " $G_PREEXEC_TS " \
36
+ ${ZSH_ASYNC_PROMPT_EXEC } query \
37
+ --cmd-status " ${ZSH_ASYNC_PROMPT_LAST_STATUS :- 0} " \
38
+ --preexec-ts " ${ZSH_ASYNC_PROMPT_PREEXEC_TS :- 0} " \
42
39
--pid-parent-skip 1 \
43
- --timeout " $ZSH_ASYNC_PROMPT_TIMEOUT "
40
+ --timeout " ${ ZSH_ASYNC_PROMPT_TIMEOUT:- 5s} "
44
41
}
45
42
46
43
__async_prompt_render () {
47
- if ! __async_check_exec " ${G_GOPROMPT } " ; then
44
+ if ! __async_check_exec " ${ZSH_ASYNC_PROMPT_EXEC } " ; then
48
45
echo -n " ?>"
49
46
return
50
47
fi
@@ -55,11 +52,11 @@ __async_prompt_render() {
55
52
fi
56
53
57
54
local LOADING=1
58
- if [[ $G_ASYNC_DONE -eq 1 ]]; then
55
+ if [[ $ZSH_ASYNC_PROMPT_QUERY_DONE -eq 1 ]]; then
59
56
LOADING=0
60
57
fi
61
58
62
- ${G_GOPROMPT } render \
59
+ ${ZSH_ASYNC_PROMPT_EXEC } render \
63
60
--prompt-mode " $MODE " \
64
61
--prompt-loading=" $LOADING " \
65
62
--color-mode " zsh"
@@ -68,34 +65,34 @@ __async_prompt_render() {
68
65
# -------------------------------------------------------------------------------
69
66
70
67
__prompt_rerender () {
71
- local BR=$C_PROMPT_NEWLINE
68
+ local BR=$__ZSH_ASYNC_PROMPT_NEWLINE
72
69
73
- PROMPT=" $( printf " %s\n" " $G_PROMPT_DATA " | __async_prompt_render) "
70
+ PROMPT=" $( printf " %s\n" " $ZSH_ASYNC_PROMPT_DATA " | __async_prompt_render) "
74
71
75
- if [[ $PROMPT != $G_LAST_PROMPT ]]; then
72
+ if [[ $PROMPT != $ZSH_ASYNC_PROMPT_LAST ]]; then
76
73
zle && zle reset-prompt
77
74
fi
78
75
79
- G_LAST_PROMPT =" $PROMPT "
76
+ ZSH_ASYNC_PROMPT_LAST =" $PROMPT "
80
77
}
81
78
82
79
# -------------------------------------------------------------------------------
83
80
# Command Handlers + Async Comm
84
81
# -------------------------------------------------------------------------------
85
82
86
83
__prompt_preexec () {
87
- typeset -g G_PREEXEC_TS =$EPOCHSECONDS
84
+ typeset -g ZSH_ASYNC_PROMPT_PREEXEC_TS =$EPOCHSECONDS
88
85
}
89
86
90
87
__prompt_precmd () {
91
88
# save the status of last command.
92
- G_LAST_STATUS =$?
89
+ ZSH_ASYNC_PROMPT_LAST_STATUS =$?
93
90
94
91
# reset prompt state
95
- G_PROMPT_DATA =" "
92
+ ZSH_ASYNC_PROMPT_DATA =" "
96
93
97
94
# set prompt status to rendering
98
- G_ASYNC_DONE =0
95
+ ZSH_ASYNC_PROMPT_QUERY_DONE =0
99
96
100
97
__zle_async_dispatch __zle_async_fd_handler __async_prompt_query
101
98
@@ -116,15 +113,15 @@ __zle_async_fd_handler() {
116
113
# select marks this fd if we reach EOF,
117
114
# so handle this specially.
118
115
__zle_async_detach " $ZLE_FD "
119
- G_ASYNC_DONE =1
116
+ ZSH_ASYNC_PROMPT_QUERY_DONE =1
120
117
121
- G_PROMPT_DATA =" ${G_PROMPT_DATA } " $' \n ' " ${ASYNC_RESULT} "
118
+ ZSH_ASYNC_PROMPT_DATA =" ${ZSH_ASYNC_PROMPT_DATA } " $' \n ' " ${ASYNC_RESULT} "
122
119
__prompt_rerender
123
120
124
121
return 1
125
122
fi
126
123
127
- G_PROMPT_DATA =" ${G_PROMPT_DATA } " $' \n ' " ${ASYNC_RESULT} "
124
+ ZSH_ASYNC_PROMPT_DATA =" ${ZSH_ASYNC_PROMPT_DATA } " $' \n ' " ${ASYNC_RESULT} "
128
125
if [[ $ASYNC_RESULT == " " ]]; then
129
126
__prompt_rerender
130
127
fi
@@ -135,7 +132,7 @@ __zle_async_dispatch() {
135
132
local command=( " $@ " )
136
133
137
134
# Close existing file descriptor for this handler.
138
- local OLD_ZLE_FD=${ZLE_ASYNC_FDS ["${dispatch_handler}"]}
135
+ local OLD_ZLE_FD=${__ZLE_ASYNC_FDS ["${dispatch_handler}"]}
139
136
if [[ -n $OLD_ZLE_FD ]]; then
140
137
__zle_async_detach " $OLD_ZLE_FD " 2> /dev/null
141
138
fi
@@ -147,7 +144,7 @@ __zle_async_dispatch() {
147
144
148
145
# Attach file a ZLE handler to file descriptor.
149
146
zle -F $ZLE_FD " ${dispatch_handler} "
150
- ZLE_ASYNC_FDS [" ${dispatch_handler} " ]=" $ZLE_FD "
147
+ __ZLE_ASYNC_FDS [" ${dispatch_handler} " ]=" $ZLE_FD "
151
148
}
152
149
153
150
__zle_async_detach () {
@@ -162,6 +159,8 @@ __zle_async_detach() {
162
159
# -------------------------------------------------------------------------------
163
160
164
161
prompt_asynczle_setup () {
162
+ zmodload zsh/datetime || :
163
+
165
164
autoload -Uz +X add-zsh-hook 2> /dev/null
166
165
autoload -Uz +X add-zle-hook-widget 2> /dev/null
167
166
0 commit comments