@@ -149,7 +149,18 @@ function! dispatch#autowrite() abort
149149 endif
150150endfunction
151151
152+ function ! dispatch#status_var () abort
153+ if &shellxquote == # ' "'
154+ return ' %ERRORLEVEL%'
155+ elseif &shell = ~# ' csh'
156+ return ' $status'
157+ else
158+ return ' $?'
159+ endif
160+ endfunction
161+
152162function ! dispatch#prepare_start (request, ... ) abort
163+ let status = dispatch#status_var ()
153164 let exec = ' echo $$ > ' . a: request .file . ' .pid; '
154165 if executable (' perl' )
155166 let exec .= ' perl -e "select(undef,undef,undef,0.1)" 2>/dev/null; '
@@ -158,11 +169,11 @@ function! dispatch#prepare_start(request, ...) abort
158169 endif
159170 let exec .= a: 0 ? a: 1 : a: request .expanded
160171 let wait = a: 0 > 1 ? a: 1 : get (a: request , ' wait' , ' error' )
161- let pause = " (printf '\e [1m--- Press ENTER to continue ---\e [0m\\ n' $? ; exec head -1)"
172+ let pause = " (printf '\e [1m--- Press ENTER to continue ---\e [0m\\ n'; exec head -1)"
162173 if wait == ' always'
163174 let exec .= ' ; ' . pause
164175 elseif wait !=# ' never'
165- let exec .= " ; test $? = 0 -o $? = 130 || " . pause
176+ let exec .= " ; test " .status. " = 0 -o " .status. " = 130 || " . pause
166177 endif
167178 let callback = dispatch#callback (a: request )
168179 let after = ' rm -f ' . a: request .file . ' .pid' .
@@ -171,8 +182,9 @@ function! dispatch#prepare_start(request, ...) abort
171182endfunction
172183
173184function ! dispatch#prepare_make (request, ... ) abort
174- let exec = a: 0 ? a: 1 : (' (' . a: request .expanded . ' ; echo $? > ' .
175- \ a: request .file . ' .complete)' . dispatch#shellpipe (a: request .file ))
185+ let exec = a: 0 ? a: 1 : (' (' . a: request .expanded . ' ; echo ' .
186+ \ dispatch#status_var () . ' > ' . a: request .file . ' .complete)' .
187+ \ dispatch#shellpipe (a: request .file ))
176188 return dispatch#prepare_start (a: request , exec , ' never' )
177189endfunction
178190
@@ -609,7 +621,8 @@ function! dispatch#compile_command(bang, args, count) abort
609621 if &shellxquote == # ' "'
610622 silent execute ' !' . request.command sp ' & echo \%ERRORLEVEL\% >' dest
611623 else
612- silent execute ' !(' . request.command . ' ; echo $? > ' . dest . ' )' sp
624+ silent execute ' !(' . request.command . ' ; echo'
625+ \ dispatch#status_var () ' > ' . dest . ' )' sp
613626 endif
614627 redraw !
615628 endif
0 commit comments