blob: 8a51156aad612b345b334bc15fbedc658e74f458 (
plain)
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
|
# https://github.com/acomagu/fish-async-prompt/blob/master/conf.d/__async_prompt.fish
status is-interactive
or exit 0
set -g __async_prompt_tmpdir (command mktemp -d)
# Setup after the user defined prompt functions are loaded.
function __async_prompt_setup_on_startup --on-event fish_prompt
functions -e (status current-function)
for func in (__async_prompt_config_functions)
function $func -V func
test -e $__async_prompt_tmpdir'/'$fish_pid'_'$func
and cat $__async_prompt_tmpdir'/'$fish_pid'_'$func
end
end
end
not set -q async_prompt_on_variable
and set async_prompt_on_variable fish_bind_mode
function __async_prompt_fire --on-event fish_prompt (for var in $async_prompt_on_variable; printf '%s\n' --on-variable $var; end)
set st $status
for func in (__async_prompt_config_functions)
set -l tmpfile $__async_prompt_tmpdir'/'$fish_pid'_'$func
if functions -q $func'_loading_indicator' && test -e $tmpfile
read -zl last_prompt <$tmpfile
eval (string escape -- $func'_loading_indicator' "$last_prompt") >$tmpfile
end
__async_prompt_config_inherit_variables | __async_prompt_spawn $st \
$func' | read -z prompt
echo -n $prompt >'$tmpfile
end
end
function __async_prompt_spawn
set -l envs
begin
set st $argv[1]
while read line
switch "$line"
case 'fish_bind_mode'
echo fish_bind_mode $fish_bind_mode
case FISH_VERSION PWD _ history 'fish_*' hostname version
case status
echo status $st
case SHLVL
set envs $envs SHLVL=(math $SHLVL - 1)
case '*'
echo $line (string escape -- $$line)
end
end
end | read -lz vars
echo $vars | env $envs fish -c '
function __async_prompt_set_status
return $argv
end
function __async_prompt_signal
kill -s "'(__async_prompt_config_internal_signal)'" '$fish_pid'
end
while read -a line
test -z "$line"
and continue
if test "$line[1]" = status
set st $line[2]
else
eval set "$line"
end
end
not set -q st
and true
or __async_prompt_set_status $st
'$argv[2]'
__async_prompt_signal
sleep 0.3
__async_prompt_signal
sleep 0.3
__async_prompt_signal' &
disown
end
function __async_prompt_config_inherit_variables
if set -q async_prompt_inherit_variables
if test "$async_prompt_inherit_variables" = all
set -ng
else
for item in $async_prompt_inherit_variables
echo $item
end
end
else
echo status
echo SHLVL
echo CMD_DURATION
echo fish_bind_mode
end
end
function __async_prompt_config_functions
set -l funcs (
if set -q async_prompt_functions
string join \n $async_prompt_functions
else
echo fish_prompt
echo fish_right_prompt
end
)
for func in $funcs
functions -q "$func"
or continue
echo $func
end
end
function __async_prompt_config_internal_signal
if test -z "$async_prompt_signal_number"
echo SIGUSR1
else
echo "$async_prompt_signal_number"
end
end
function __async_prompt_repaint_prompt --on-signal (__async_prompt_config_internal_signal)
commandline -f repaint >/dev/null 2>/dev/null
end
|