Skip to content

Commit 9b819d2

Browse files
committed
Fix status capture on csh
1 parent 5160fdb commit 9b819d2

File tree

2 files changed

+20
-6
lines changed

2 files changed

+20
-6
lines changed

autoload/dispatch.vim

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -149,7 +149,18 @@ function! dispatch#autowrite() abort
149149
endif
150150
endfunction
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+
152162
function! 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
171182
endfunction
172183

173184
function! 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')
177189
endfunction
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

autoload/dispatch/tmux.vim

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ function! dispatch#tmux#make(request) abort
4444
let session = get(g:, 'tmux_session', '')
4545
let script = dispatch#isolate(['TMUX', 'TMUX_PANE'],
4646
\ call('dispatch#prepare_make', [a:request] +
47-
\ (pipepane ? [a:request.expanded . '; echo $? > ' . a:request.file . '.complete'] : [])))
47+
\ (pipepane ? [a:request.expanded . '; echo ' . dispatch#status_var()
48+
\ . ' > ' . a:request.file . '.complete'] : [])))
4849

4950
let title = shellescape(get(a:request, 'title', get(a:request, 'compiler', 'make')))
5051
let height = get(g:, 'dispatch_tmux_height', 10)

0 commit comments

Comments
 (0)