aboutsummaryrefslogtreecommitdiff
path: root/runtime/autoload/provider
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/autoload/provider')
-rw-r--r--runtime/autoload/provider/clipboard.vim13
-rw-r--r--runtime/autoload/provider/node.vim3
-rw-r--r--runtime/autoload/provider/perl.vim69
-rw-r--r--runtime/autoload/provider/pythonx.vim13
4 files changed, 90 insertions, 8 deletions
diff --git a/runtime/autoload/provider/clipboard.vim b/runtime/autoload/provider/clipboard.vim
index e33dc31f6d..a96a0a61b7 100644
--- a/runtime/autoload/provider/clipboard.vim
+++ b/runtime/autoload/provider/clipboard.vim
@@ -113,8 +113,13 @@ function! provider#clipboard#Executable() abort
let s:paste['*'] = s:paste['+']
return 'doitclient'
elseif executable('win32yank.exe')
- let s:copy['+'] = 'win32yank.exe -i --crlf'
- let s:paste['+'] = 'win32yank.exe -o --lf'
+ if has('wsl') && getftype(exepath('win32yank.exe')) == 'link'
+ let win32yank = resolve(exepath('win32yank.exe'))
+ else
+ let win32yank = 'win32yank.exe'
+ endif
+ let s:copy['+'] = win32yank.' -i --crlf'
+ let s:paste['+'] = win32yank.' -o --lf'
let s:copy['*'] = s:copy['+']
let s:paste['*'] = s:paste['+']
return 'win32yank'
@@ -172,6 +177,10 @@ function! s:clipboard.set(lines, regtype, reg) abort
if jobid > 0
call jobsend(jobid, a:lines)
call jobclose(jobid, 'stdin')
+ " xclip does not close stdout when receiving input via stdin
+ if argv[0] ==# 'xclip'
+ call jobclose(jobid, 'stdout')
+ endif
let selection.owner = jobid
let ret = 1
else
diff --git a/runtime/autoload/provider/node.vim b/runtime/autoload/provider/node.vim
index b2a3b3ee08..c5d5e87729 100644
--- a/runtime/autoload/provider/node.vim
+++ b/runtime/autoload/provider/node.vim
@@ -51,6 +51,9 @@ function! provider#node#Detect() abort
if exists('g:node_host_prog')
return expand(g:node_host_prog)
endif
+ if !executable('node')
+ return ''
+ endif
if !s:is_minimum_version(v:null, 6, 0)
return ''
endif
diff --git a/runtime/autoload/provider/perl.vim b/runtime/autoload/provider/perl.vim
new file mode 100644
index 0000000000..36ca2bbf14
--- /dev/null
+++ b/runtime/autoload/provider/perl.vim
@@ -0,0 +1,69 @@
+if exists('s:loaded_perl_provider')
+ finish
+endif
+
+let s:loaded_perl_provider = 1
+
+function! provider#perl#Detect() abort
+ " use g:perl_host_prof if set or check if perl is on the path
+ let prog = exepath(get(g:, 'perl_host_prog', 'perl'))
+ if empty(prog)
+ return ''
+ endif
+
+ " if perl is available, make sure the required module is available
+ call system([prog, '-W', '-MNeovim::Ext', '-e', ''])
+ return v:shell_error ? '' : prog
+endfunction
+
+function! provider#perl#Prog() abort
+ return s:prog
+endfunction
+
+function! provider#perl#Require(host) abort
+ if s:err != ''
+ echoerr s:err
+ return
+ endif
+
+ let prog = provider#perl#Prog()
+ let args = [s:prog, '-e', 'use Neovim::Ext; start_host();']
+
+ " Collect registered perl plugins into args
+ let perl_plugins = remote#host#PluginsForHost(a:host.name)
+ for plugin in perl_plugins
+ call add(args, plugin.path)
+ endfor
+
+ return provider#Poll(args, a:host.orig_name, '$NVIM_PERL_LOG_FILE')
+endfunction
+
+function! provider#perl#Call(method, args) abort
+ if s:err != ''
+ echoerr s:err
+ return
+ endif
+
+ if !exists('s:host')
+ try
+ let s:host = remote#host#Require('perl')
+ catch
+ let s:err = v:exception
+ echohl WarningMsg
+ echomsg v:exception
+ echohl None
+ return
+ endtry
+ endif
+ return call('rpcrequest', insert(insert(a:args, 'perl_'.a:method), s:host))
+endfunction
+
+let s:err = ''
+let s:prog = provider#perl#Detect()
+let g:loaded_perl_provider = empty(s:prog) ? 1 : 2
+
+if g:loaded_perl_provider != 2
+ let s:err = 'Cannot find perl or the required perl module'
+endif
+
+call remote#host#RegisterPlugin('perl-provider', 'perl', [])
diff --git a/runtime/autoload/provider/pythonx.vim b/runtime/autoload/provider/pythonx.vim
index 59b1c27b72..e89d519790 100644
--- a/runtime/autoload/provider/pythonx.vim
+++ b/runtime/autoload/provider/pythonx.vim
@@ -10,7 +10,8 @@ function! provider#pythonx#Require(host) abort
" Python host arguments
let prog = (ver == '2' ? provider#python#Prog() : provider#python3#Prog())
- let args = [prog, '-c', 'import sys; sys.path.remove(""); import neovim; neovim.start_host()']
+ let args = [prog, '-c', 'import sys; sys.path = list(filter(lambda x: x != "", sys.path)); import neovim; neovim.start_host()']
+
" Collect registered Python plugins into args
let python_plugins = remote#host#PluginsForHost(a:host.name)
@@ -18,7 +19,7 @@ function! provider#pythonx#Require(host) abort
call add(args, plugin.path)
endfor
- return provider#Poll(args, a:host.orig_name, '$NVIM_PYTHON_LOG_FILE')
+ return provider#Poll(args, a:host.orig_name, '$NVIM_PYTHON_LOG_FILE', {'overlapped': v:true})
endfunction
function! s:get_python_executable_from_host_var(major_version) abort
@@ -28,8 +29,8 @@ endfunction
function! s:get_python_candidates(major_version) abort
return {
\ 2: ['python2', 'python2.7', 'python2.6', 'python'],
- \ 3: ['python3', 'python3.7', 'python3.6', 'python3.5', 'python3.4', 'python3.3',
- \ 'python']
+ \ 3: ['python3', 'python3.9', 'python3.8', 'python3.7', 'python3.6', 'python3.5',
+ \ 'python3.4', 'python3.3', 'python']
\ }[a:major_version]
endfunction
@@ -43,7 +44,7 @@ function! provider#pythonx#DetectByModule(module, major_version) abort
let python_exe = s:get_python_executable_from_host_var(a:major_version)
if !empty(python_exe)
- return [python_exe, '']
+ return [exepath(expand(python_exe)), '']
endif
let candidates = s:get_python_candidates(a:major_version)
@@ -66,7 +67,7 @@ endfunction
function! s:import_module(prog, module) abort
let prog_version = system([a:prog, '-c' , printf(
\ 'import sys; ' .
- \ 'sys.path.remove(""); ' .
+ \ 'sys.path = list(filter(lambda x: x != "", sys.path)); ' .
\ 'sys.stdout.write(str(sys.version_info[0]) + "." + str(sys.version_info[1])); ' .
\ 'import pkgutil; ' .
\ 'exit(2*int(pkgutil.get_loader("%s") is None))',