@@ -423,7 +423,6 @@ function! dispatch#compile_command(bang, args, count) abort
423423 let request = {
424424 \ ' action' : ' make' ,
425425 \ ' background' : a: bang ,
426- \ ' file' : tempname (),
427426 \ ' format' : ' %+I%.%#'
428427 \ }
429428
@@ -458,25 +457,38 @@ function! dispatch#compile_command(bang, args, count) abort
458457 endif
459458 let request.title = get (request, ' compiler' , ' make' )
460459
460+ if a: args == # ' -' && ! empty (s: makes )
461+ let request = copy (s: makes [-1 ])
462+ unlet ! request.pid
463+ unlet ! request.completed
464+ unlet ! request.handler
465+ endif
466+
461467 if &autowrite || &autowriteall
462468 silent ! wall
463469 endif
464470 cclose
471+ let request.file = tempname ()
465472 let &errorfile = request.file
466473
467474 let efm = &l: efm
468475 let makeprg = &l: makeprg
469476 let compiler = get (b: , ' current_compiler' , ' ' )
470477 let modelines = &modelines
471478 let after = ' '
479+ let cd = exists (' *haslocaldir' ) && haslocaldir () ? ' lcd' : ' cd'
472480 try
473481 let &modelines = 0
474482 call s: set_current_compiler (get (request, ' compiler' , ' ' ))
475483 let &l: efm = request.format
476484 let &l: makeprg = request.command
477485 silent doautocmd QuickFixCmdPre dispatch- make
478- let request.directory = getcwd ()
479- let request.expanded = dispatch#expand (request.command )
486+ let request.directory = get (request, ' directory' , getcwd ())
487+ if request.directory !=# getcwd ()
488+ let cwd = getcwd ()
489+ execute cd fnameescape (request.directory )
490+ endif
491+ let request.expanded = get (request, ' expanded' , dispatch#expand (request.command ))
480492 call extend (s: makes , [request])
481493 let request.id = len (s: makes )
482494 let s: files [request.file ] = request
@@ -493,6 +505,9 @@ function! dispatch#compile_command(bang, args, count) abort
493505 let &l: efm = efm
494506 let &l: makeprg = makeprg
495507 call s: set_current_compiler (compiler )
508+ if exists (' cwd' )
509+ execute cd fnameescape (cwd)
510+ endif
496511 endtry
497512 execute after
498513 return ' '
0 commit comments