22
33
44# Values
5- XDG_CONFIG_HOME=" ${XDG_CONFIG_HOME:- $HOME / .config} "
6- DIYSHIP_COMMAND_LEFT=" ${DIYSHIP_COMMAND_LEFT:- $XDG_CONFIG_HOME / diyship/ left} "
7- DIYSHIP_COMMAND_RIGHT=" ${DIYSHIP_COMMAND_RIGHT:- $XDG_CONFIG_HOME / diyship/ right} "
5+ XDG_CONFIG_HOME=" ${XDG_CONFIG_HOME:- ${ HOME} / .config} "
6+ DIYSHIP_COMMAND_LEFT=" ${DIYSHIP_COMMAND_LEFT:- ${ XDG_CONFIG_HOME} / diyship/ left} "
7+ DIYSHIP_COMMAND_RIGHT=" ${DIYSHIP_COMMAND_RIGHT:- ${ XDG_CONFIG_HOME} / diyship/ right} "
88
9- BASH_INIT="
9+ TIMING_COMMAND=" date +%s%N | cut -c '-13'"
10+ JOB_COUNT_COMMAND=" wc -l"
11+ RETURN_WORKAROUND_COMMAND=" cat"
12+
13+ init_bash="
1014diyship_preexec() {
11- local PREV_LAST_ARG=\$ 1
15+ local PREV_LAST_ARG=\$ {1}
1216
13- if [ \"\$ DIYSHIP_PREEXEC_READY\" = \" true\" ]; then
17+ if [ \"\$ { DIYSHIP_PREEXEC_READY} \" = \" true\" ]; then
1418 DIYSHIP_PREEXEC_READY=false
15- DIYSHIP_START_TIME=\$ (date +%s%N )
19+ DIYSHIP_START_TIME=\$ (${TIMING_COMMAND} )
1620 fi
1721
18- : \"\$ PREV_LAST_ARG\"
22+ : \"\$ { PREV_LAST_ARG} \"
1923}
2024
2125diyship_precmd() {
2226 export DIYSHIP_STATUS=\$ ?
2327
24- DIYSHIP_PIPESTATUS =(\$ {PIPESTATUS[@]})
28+ DIYSHIP_PIPESTATUS_TEMPORARY =(\$ {PIPESTATUS[@]})
2529 if [[ \"\$ {#BP_PIPESTATUS[@]}\" -gt \"\$ {#DIYSHIP_PIPESTATUS[@]}\" ]]; then
26- DIYSHIP_PIPESTATUS =(\$ {BP_PIPESTATUS[@]})
30+ DIYSHIP_PIPESTATUS_TEMPORARY =(\$ {BP_PIPESTATUS[@]})
2731 fi
28- export DIYSHIP_PIPESTATUS=\"\$ {DIYSHIP_PIPESTATUS [@]}\"
32+ export DIYSHIP_PIPESTATUS=\$ {DIYSHIP_PIPESTATUS_TEMPORARY [@]}
2933
3034 DIYSHIP_JOBS=0
3135 for job in \$ (jobs -p); do
32- [[ \$ job ]] && ((DIYSHIP_JOBS++))
36+ [[ \$ { job} ]] && ((DIYSHIP_JOBS++))
3337 done
34- export DIYSHIP_JOBS=\"\$ DIYSHIP_JOBS\"
38+ export DIYSHIP_JOBS=\"\$ { DIYSHIP_JOBS} \"
3539
3640 \"\$ {diyship_precmd_user_func-:}\"
3741
38- eval \"\$ _PRESERVED_PROMPT_COMMAND\"
42+ eval \"\$ { _PRESERVED_PROMPT_COMMAND} \"
3943
40- if [[ \$ DIYSHIP_START_TIME ]]; then
41- DIYSHIP_END_TIME=\$ (date +%s%N )
44+ if [[ \$ { DIYSHIP_START_TIME} ]]; then
45+ DIYSHIP_END_TIME=\$ (${TIMING_COMMAND} )
4246 export DIYSHIP_DURATION=\$ ((DIYSHIP_END_TIME - DIYSHIP_START_TIME))
4347 fi
4448
45- PS1=\"\ $ ($DIYSHIP_COMMAND_LEFT ) \"
49+ PS1=' \ $ (${ DIYSHIP_COMMAND_LEFT} )'
4650
4751 unset DIYSHIP_START_TIME
4852 DIYSHIP_PREEXEC_READY=true
4953}
5054
51- if [[ \"\$ {__bp_imported:-}\" == \" defined\" || \$ preexec_functions || \$ precmd_functions ]]; then
55+ if [[ \"\$ {__bp_imported:-}\" == \" defined\" || \$ { preexec_functions} || \$ { precmd_functions} ]]; then
5256 diyship_preexec_all(){ diyship_preexec \"\$ _\" ; }
5357 preexec_functions+=(diyship_preexec_all)
5458 precmd_functions+=(diyship_precmd)
5559else
5660 dbg_trap=\"\$ (trap -p DEBUG | cut -d' ' -f3 | tr -d \')\"
57- if [[ -z \"\$ dbg_trap\" ]]; then
61+ if [[ -z \"\$ { dbg_trap} \" ]]; then
5862 trap 'diyship_preexec \"\$ _\" ' DEBUG
59- elif [[ \"\$ dbg_trap\" != 'diyship_preexec \"\$ _\" ' && \"\$ dbg_trap\" != 'diyship_preexec_all \"\$ _\" ' ]]; then
63+ elif [[ \"\$ { dbg_trap} \" != 'diyship_preexec \"\$ _\" ' && \"\$ { dbg_trap} \" != 'diyship_preexec_all \"\$ _\" ' ]]; then
6064 diyship_preexec_all() {
61- local PREV_LAST_ARG=\$ 1 ; \$ dbg_trap; diyship_preexec; : \"\$ PREV_LAST_ARG\" ;
65+ local PREV_LAST_ARG=\$ {1} ; \$ { dbg_trap} ; diyship_preexec; : \"\$ { PREV_LAST_ARG} \" ;
6266 }
6367 trap 'diyship_preexec_all \"\$ _\" ' DEBUG
6468 fi
6569
66- if [[ -z \"\$ PROMPT_COMMAND\" ]]; then
70+ if [[ -z \"\$ { PROMPT_COMMAND} \" ]]; then
6771 PROMPT_COMMAND=\" diyship_precmd\"
68- elif [[ \"\$ PROMPT_COMMAND\" != *\" diyship_precmd\" * ]]; then
69- _PRESERVED_PROMPT_COMMAND=\"\$ PROMPT_COMMAND\"
72+ elif [[ \"\$ { PROMPT_COMMAND} \" != *\" diyship_precmd\" * ]]; then
73+ _PRESERVED_PROMPT_COMMAND=\"\$ { PROMPT_COMMAND} \"
7074 PROMPT_COMMAND=\" diyship_precmd\"
7175 fi
7276fi
7377
74- DIYSHIP_START_TIME=\$ (date +%s%N )
78+ DIYSHIP_START_TIME=\$ (${TIMING_COMMAND} )
7579
7680export DIYSHIP_SHELL=\" bash\"
7781"
7882
79- ZSH_INIT ="
83+ init_zsh ="
8084zmodload zsh/parameter
8185
8286if [[ \$ ZSH_VERSION == ([1-4]*) ]]; then
8387 __diyship_get_time() {
84- DIYSHIP_CAPTURED_TIME=\$ (date +%s%N )
88+ DIYSHIP_CAPTURED_TIME=\$ (${TIMING_COMMAND} )
8589 }
8690else
8791 zmodload zsh/datetime
9397
9498diyship_precmd() {
9599 export DIYSHIP_STATUS=\$ ?
96- export DIYSHIP_PIPESTATUS=\"\$ {pipestatus[@]}\"
100+
101+ DIYSHIP_PIPESTATUS_TEMPORARY=(\$ {pipestatus[@]})
102+ export DIYSHIP_PIPESTATUS=\$ {DIYSHIP_PIPESTATUS_TEMPORARY[@]}
97103
98104 if (( \$ {+DIYSHIP_START_TIME} )); then
99105 __diyship_get_time && (( DIYSHIP_DURATION = DIYSHIP_CAPTURED_TIME - DIYSHIP_START_TIME )) && export DIYSHIP_DURATION=\"\$ DIYSHIP_DURATION\"
@@ -120,6 +126,8 @@ if [[ -z \${preexec_functions[(re)diyship_preexec]} ]]; then
120126fi
121127
122128diyship_zle-keymap-select() {
129+ export DIYSHIP_KEYMAP=\"\$ KEYMAP\"
130+
123131 zle reset-prompt
124132}
125133
@@ -141,11 +149,11 @@ export DIYSHIP_SHELL=\"zsh\"
141149VIRTUAL_ENV_DISABLE_PROMPT=1
142150
143151setopt promptsubst
144- PROMPT='\$ ($DIYSHIP_COMMAND_LEFT )'
145- RPROMPT='\$ ($DIYSHIP_COMMAND_RIGHT )'
152+ PROMPT='\$ (${ DIYSHIP_COMMAND_LEFT} )'
153+ RPROMPT='\$ (${ DIYSHIP_COMMAND_RIGHT} )'
146154"
147155
148- FISH_INIT ="
156+ init_fish ="
149157function fish_prompt
150158 set -gx DIYSHIP_STATUS \$ status
151159 set -gx DIYSHIP_PIPESTATUS \$ pipestatus
@@ -159,11 +167,11 @@ function fish_prompt
159167 set -gx DIYSHIP_KEYMAP insert
160168 end
161169
162- $DIYSHIP_COMMAND_LEFT
170+ ${ DIYSHIP_COMMAND_LEFT}
163171end
164172
165173function fish_right_prompt
166- $DIYSHIP_COMMAND_RIGHT
174+ ${ DIYSHIP_COMMAND_RIGHT}
167175end
168176
169177set -g VIRTUAL_ENV_DISABLE_PROMPT 1
@@ -173,7 +181,7 @@ builtin functions -e fish_mode_prompt
173181set -gx DIYSHIP_SHELL \" fish\"
174182"
175183
176- POWERSHELL_INIT ="
184+ init_powershell ="
177185#!/usr/bin/env pwsh
178186
179187function global:prompt {
@@ -224,7 +232,7 @@ function global:prompt {
224232 \$ ENV:DIYSHIP_DURATION = [math]::Round((\$ lastCmd.EndExecutionTime - \$ lastCmd.StartExecutionTime).TotalMilliseconds)
225233 }
226234
227- Invoke-Native -Executable '$DIYSHIP_COMMAND_LEFT '
235+ Invoke-Native -Executable '${ DIYSHIP_COMMAND_LEFT} '
228236
229237 \$ global:LASTEXITCODE = \$ origLastExitCode
230238
@@ -243,20 +251,20 @@ function global:prompt {
243251\$ ENV:DIYSHIP_SHELL = \" powershell\"
244252"
245253
246- ION_INIT ="
254+ init_ion ="
247255fn PROMPT
248256 export DIYSHIP_STATUS = \$ ?
249257 export DIYSHIP_DURATION = \$ or(\$ CMD_DURATION \$ ION_CMD_DURATION)
250258 export DIYSHIP_DURATION = \$ ((DIYSHIP_DURATION * 1000))
251- export DIYSHIP_JOBS = \$ (jobs ^| wc -l )
259+ export DIYSHIP_JOBS = \$ (jobs ^| ${JOB_COUNT_COMMAND} )
252260
253- $DIYSHIP_COMMAND_LEFT
261+ ${ DIYSHIP_COMMAND_LEFT}
254262end
255263
256264export DIYSHIP_SHELL=\" ion\"
257265"
258266
259- ELVISH_INIT ="
267+ init_elvish ="
260268set-env DIYSHIP_SHELL \" elvish\"
261269
262270# Define Hooks
@@ -265,88 +273,81 @@ local:cmd-end-time = 0
265273local:cmd-duration = 0
266274
267275fn diyship-after-readline-hook [line]{
268- cmd-start-time = (date +%s%N )
276+ cmd-start-time = (${TIMING_COMMAND} )
269277}
270278
271279fn diyship-before-readline-hook {
272- cmd-end-time = (date +%s%N )
280+ cmd-end-time = (${TIMING_COMMAND} )
273281 cmd-duration = (- \$ cmd-end-time \$ cmd-start-time)
274282}
275283
276284edit:after-readline = [ \$ @edit:after-readline \$ diyship-after-readline-hook~ ]
277285edit:before-readline = [ \$ @edit:before-readline \$ diyship-before-readline-hook~ ]
278286
279287edit:prompt = {
280- set-env DIYSHIP_DURATION \$ cmd-duration
288+ set-env DIYSHIP_DURATION (to-string \$ cmd-duration)
281289 set-env DIYSHIP_JOBS \$ num-bg-jobs
282290
283- $DIYSHIP_COMMAND_LEFT
291+ ${ DIYSHIP_COMMAND_LEFT}
284292}
285293
286294edit:rprompt = {
287- set-env DIYSHIP_DURATION \$ cmd-duration
295+ set-env DIYSHIP_DURATION (to-string \$ cmd-duration)
288296 set-env DIYSHIP_JOBS \$ num-bg-jobs
289297
290- $DIYSHIP_COMMAND_RIGHT
298+ ${ DIYSHIP_COMMAND_RIGHT}
291299}"
292300
293- TCSH_INIT ="
301+ init_tcsh ="
294302setenv DIYSHIP_SHELL tcsh;
295303
296304set USER_PRECMD = \"\` alias precmd\`\" ;
297305set USER_POSTCMD = \"\` alias postcmd\`\" ;
298306
299- set DIYSHIP_PRECMD = 'set DIYSHIP_STATUS = \$ status;set DIYSHIP_PATH = \" $DIYSHIP_COMMAND_LEFT \" ;set DIYSHIP_END_TIME = \` date +%s%N \` ;set DIYSHIP_DURATION = 0;if ( \$ DIYSHIP_START_TIME != -1 ) @ DIYSHIP_DURATION = \$ DIYSHIP_END_TIME - \$ DIYSHIP_START_TIME;set prompt = \"\`\$ DIYSHIP_COMMAND_LEFT\`\" ;set DIYSHIP_START_TIME = -1';
300- set DIYSHIP_POSTCMD = 'set DIYSHIP_START_TIME = \` date +%s%N \` ';
307+ set DIYSHIP_PRECMD = 'setenv DIYSHIP_STATUS \$ status; set DIYSHIP_PATH = \" ${ DIYSHIP_COMMAND_LEFT} \" ; set DIYSHIP_END_TIME = \` ${TIMING_COMMAND} \` ; set DIYSHIP_DURATION_TEMPORARY = 0; if ( \$ DIYSHIP_START_TIME != -1 ) @ DIYSHIP_DURATION_TEMPORARY = \$ DIYSHIP_END_TIME - \$ DIYSHIP_START_TIME; setenv DIYSHIP_DURATION \$ DIYSHIP_DURATION_TEMPORARY; set prompt = \"\` ${ DIYSHIP_COMMAND_LEFT} \`\" ; set DIYSHIP_START_TIME = -1';
308+ set DIYSHIP_POSTCMD = 'set DIYSHIP_START_TIME = \` ${TIMING_COMMAND} \` ';
301309
302310alias precmd \"\$ DIYSHIP_PRECMD;\$ USER_PRECMD\" ;
303311alias postcmd \"\$ DIYSHIP_POSTCMD;\$ USER_POSTCMD\" ;
304312
305- set DIYSHIP_START_TIME = \` date +%s%N \` ;
313+ set DIYSHIP_START_TIME = \` ${TIMING_COMMAND} \` ;
306314"
307315
308- NUSHELL_INIT ="
316+ init_nushell ="
309317let-env DIYSHIP_SHELL = \" nushell\"
310318
311319def diyship_prompt [] {
312320 let-env DIYSHIP_DURATION = \$ nu.env.CMD_DURATION_MS
313321
314- ^$DIYSHIP_COMMAND_LEFT
322+ ^${ DIYSHIP_COMMAND_LEFT}
315323}
316324"
317325
318- XONSH_INIT ="
326+ init_xonsh ="
319327def diyship_prompt():
320328 last_cmd = __xonsh__.history[-1] if __xonsh__.history else None
321329
322330 \$ DIYSHIP_STATUS = last_cmd.rtn if last_cmd else 0
323331 \$ DIYSHIP_DURATION = round((last_cmd.ts[1] - last_cmd.ts[0]) * 1000) if last_cmd else 0
324332 \$ DIYSHIP_JOBS = sum(1 for job in __xonsh__.all_jobs.values() if job['obj'] and job['obj'].poll() is None)
325333
326- return \$ ($DIYSHIP_COMMAND_LEFT | cat )
334+ return \$ (${ DIYSHIP_COMMAND_LEFT} | ${RETURN_WORKAROUND_COMMAND} )
327335
328336\$ PROMPT = diyship_prompt
329337
330338\$ DIYSHIP_SHELL = \" xonsh\"
331339"
332340
333341# Start
334- case " $1 " in
335- ' bash' ) printf ' %s' " $BASH_INIT " ;;
336- ' zsh' ) printf ' %s' " $ZSH_INIT " ;;
337- ' fish' ) printf ' %s' " $FISH_INIT " ;;
338- ' powershell' ) printf ' %s' " $POWERSHELL_INIT " ;;
339- ' ion' ) printf ' %s' " $ION_INIT " ;;
340- ' elvish' ) printf ' %s' " $ELVISH_INIT " ;;
341- ' tcsh' ) printf ' %s' " $TCSH_INIT " ;;
342- ' nushell' ) printf ' %s' " $NUSHELL_INIT " ;;
343- ' xonsh' ) printf ' %s' " $XONSH_INIT " ;;
344- * )
345- printf ' %s\n' " diyship: invalid shell -- '$SUBCOMMAND '" >&2
346-
347- exit 1
348- ;;
349- esac
342+ eval " init=\$ init_${1} "
343+
344+ if [ -n " ${init} " ]; then
345+ printf ' %s' " ${init} "
346+ else
347+ printf ' %s\n' " diyship: invalid shell '${1} '." >&2
348+
349+ exit 1
350+ fi
350351
351352
352353exit 0
0 commit comments