aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--runtime/autoload/provider/clipboard.vim20
1 files changed, 14 insertions, 6 deletions
diff --git a/runtime/autoload/provider/clipboard.vim b/runtime/autoload/provider/clipboard.vim
index a67681d28e..47f4271091 100644
--- a/runtime/autoload/provider/clipboard.vim
+++ b/runtime/autoload/provider/clipboard.vim
@@ -137,16 +137,24 @@ function! s:clipboard.set(lines, regtype, reg) abort
let argv = split(s:copy[a:reg], " ")
let selection.detach = s:cache_enabled
let selection.cwd = "/"
+ call extend(selection, {
+ \ 'on_stdout': function('s:set_errhandler'),
+ \ 'on_stderr': function('s:set_errhandler'),
+ \ })
let jobid = jobstart(argv, selection)
- if jobid <= 0
+ if jobid > 0
+ call jobsend(jobid, a:lines)
+ call jobclose(jobid, 'stdin')
+ let selection.owner = jobid
+ endif
+endfunction
+
+function! s:set_errhandler(job_id, data, event) abort
+ if a:job_id <= 0
echohl WarningMsg
- echo "clipboard: error when invoking provider"
+ echo 'clipboard: error when invoking provider: ' . join(a:data)
echohl None
- return 0
endif
- call jobsend(jobid, a:lines)
- call jobclose(jobid, 'stdin')
- let selection.owner = jobid
endfunction
function! provider#clipboard#Call(method, args) abort