summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--autoload/ale/command.vim2
-rw-r--r--autoload/ale/job.vim18
-rw-r--r--autoload/ale/lsp.vim7
3 files changed, 26 insertions, 1 deletions
diff --git a/autoload/ale/command.vim b/autoload/ale/command.vim
index ceb642f0..89734685 100644
--- a/autoload/ale/command.vim
+++ b/autoload/ale/command.vim
@@ -293,6 +293,8 @@ function! ale#command#Run(buffer, command, Callback, options) abort
let s:fake_job_id = get(s:, 'fake_job_id', 0) + 1
let l:job_id = s:fake_job_id
endif
+ elseif has('win32')
+ let l:job_id = ale#job#StartWithCmd(l:command, l:job_options)
else
let l:job_id = ale#job#Start(l:command, l:job_options)
endif
diff --git a/autoload/ale/job.vim b/autoload/ale/job.vim
index d4cda489..841a6379 100644
--- a/autoload/ale/job.vim
+++ b/autoload/ale/job.vim
@@ -276,6 +276,24 @@ function! ale#job#Start(command, options) abort
return l:job_id
endfunction
+" Force running commands in a Windows CMD command line.
+" This means the same command syntax works everywhere.
+function! ale#job#StartWithCmd(command, options) abort
+ let l:shell = &l:shell
+ let l:shellcmdflag = &l:shellcmdflag
+ let &l:shell = 'cmd'
+ let &l:shellcmdflag = '/c'
+
+ try
+ let l:job_id = ale#job#Start(a:command, a:options)
+ finally
+ let &l:shell = l:shell
+ let &l:shellcmdflag = l:shellcmdflag
+ endtry
+
+ return l:job_id
+endfunction
+
" Send raw data to the job.
function! ale#job#SendRaw(job_id, string) abort
if has('nvim')
diff --git a/autoload/ale/lsp.vim b/autoload/ale/lsp.vim
index 95ab83cf..5667b2e0 100644
--- a/autoload/ale/lsp.vim
+++ b/autoload/ale/lsp.vim
@@ -331,7 +331,12 @@ function! ale#lsp#StartProgram(conn_id, executable, command) abort
\ 'mode': 'raw',
\ 'out_cb': {_, message -> ale#lsp#HandleMessage(a:conn_id, message)},
\}
- let l:job_id = ale#job#Start(a:command, l:options)
+
+ if has('win32')
+ let l:job_id = ale#job#StartWithCmd(a:command, l:options)
+ else
+ let l:job_id = ale#job#Start(a:command, l:options)
+ endif
else
let l:job_id = l:conn.job_id
endif