aboutsummaryrefslogtreecommitdiff
path: root/runtime/autoload/provider/clipboard.vim
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/autoload/provider/clipboard.vim')
-rw-r--r--runtime/autoload/provider/clipboard.vim40
1 files changed, 40 insertions, 0 deletions
diff --git a/runtime/autoload/provider/clipboard.vim b/runtime/autoload/provider/clipboard.vim
new file mode 100644
index 0000000000..615a80ca6d
--- /dev/null
+++ b/runtime/autoload/provider/clipboard.vim
@@ -0,0 +1,40 @@
+" The clipboard provider uses shell commands to communicate with the clipboard.
+" The provider function will only be registered if one of the supported
+" commands are available.
+let s:copy = ''
+let s:paste = ''
+
+if executable('pbcopy')
+ let s:copy = 'pbcopy'
+ let s:paste = 'pbpaste'
+elseif executable('xsel')
+ let s:copy = 'xsel -i -b'
+ let s:paste = 'xsel -o -b'
+elseif executable('xclip')
+ let s:copy = 'xclip -i -selection clipboard'
+ let s:paste = 'xclip -o -selection clipboard'
+endif
+
+if s:copy == ''
+ echom 'No shell command for communicating with the clipboard found.'
+ finish
+endif
+
+let s:methods = {}
+
+function! s:ClipboardGet(...)
+ return systemlist(s:paste)
+endfunction
+
+function! s:ClipboardSet(...)
+ call systemlist(s:copy, a:1)
+endfunction
+
+let s:methods = {
+ \ 'get': function('s:ClipboardGet'),
+ \ 'set': function('s:ClipboardSet')
+ \ }
+
+function! provider#clipboard#Call(method, args)
+ return s:methods[a:method](a:args)
+endfunction