mirror of
https://github.com/neovim/neovim.git
synced 2024-12-19 18:55:14 -07:00
provider/clipboard.vim: Handle missing g:clipboard keys
This commit is contained in:
parent
6016ac270f
commit
f0dafa89c2
@ -8,7 +8,7 @@ let s:paste = {}
|
||||
" ownership of the selection, so we know how long the cache is valid.
|
||||
let s:selection = { 'owner': 0, 'data': [] }
|
||||
|
||||
function! s:selection.on_exit(jobid, data, event)
|
||||
function! s:selection.on_exit(jobid, data, event) abort
|
||||
" At this point this nvim instance might already have launched
|
||||
" a new provider instance. Don't drop ownership in this case.
|
||||
if self.owner == a:jobid
|
||||
@ -18,7 +18,7 @@ endfunction
|
||||
|
||||
let s:selections = { '*': s:selection, '+': copy(s:selection)}
|
||||
|
||||
function! s:try_cmd(cmd, ...)
|
||||
function! s:try_cmd(cmd, ...) abort
|
||||
let argv = split(a:cmd, " ")
|
||||
let out = a:0 ? systemlist(argv, a:1, 1) : systemlist(argv, [''], 1)
|
||||
if v:shell_error
|
||||
@ -34,7 +34,7 @@ function! s:try_cmd(cmd, ...)
|
||||
endfunction
|
||||
|
||||
" Returns TRUE if `cmd` exits with success, else FALSE.
|
||||
function! s:cmd_ok(cmd)
|
||||
function! s:cmd_ok(cmd) abort
|
||||
call system(a:cmd)
|
||||
return v:shell_error == 0
|
||||
endfunction
|
||||
@ -48,10 +48,10 @@ endfunction
|
||||
|
||||
function! provider#clipboard#Executable() abort
|
||||
if exists('g:clipboard')
|
||||
let s:copy = g:clipboard.copy
|
||||
let s:paste = g:clipboard.paste
|
||||
let s:cache_enabled = g:clipboard.cache_enabled
|
||||
return g:clipboard.name
|
||||
let s:copy = get(g:clipboard, 'copy', { '+': v:null, '*': v:null })
|
||||
let s:paste = get(g:clipboard, 'paste', { '+': v:null, '*': v:null })
|
||||
let s:cache_enabled = get(g:clipboard, 'cache_enabled', 1)
|
||||
return get(g:clipboard, 'name', 'g:clipboard')
|
||||
elseif has('mac') && executable('pbcopy')
|
||||
let s:copy['+'] = 'pbcopy'
|
||||
let s:paste['+'] = 'pbpaste'
|
||||
@ -107,14 +107,14 @@ endif
|
||||
|
||||
let s:clipboard = {}
|
||||
|
||||
function! s:clipboard.get(reg)
|
||||
function! s:clipboard.get(reg) abort
|
||||
if s:selections[a:reg].owner > 0
|
||||
return s:selections[a:reg].data
|
||||
end
|
||||
return s:try_cmd(s:paste[a:reg])
|
||||
endfunction
|
||||
|
||||
function! s:clipboard.set(lines, regtype, reg)
|
||||
function! s:clipboard.set(lines, regtype, reg) abort
|
||||
if a:reg == '"'
|
||||
call s:clipboard.set(a:lines,a:regtype,'+')
|
||||
if s:copy['*'] != s:copy['+']
|
||||
@ -149,6 +149,6 @@ function! s:clipboard.set(lines, regtype, reg)
|
||||
let selection.owner = jobid
|
||||
endfunction
|
||||
|
||||
function! provider#clipboard#Call(method, args)
|
||||
function! provider#clipboard#Call(method, args) abort
|
||||
return call(s:clipboard[a:method],a:args,s:clipboard)
|
||||
endfunction
|
||||
|
@ -116,48 +116,48 @@ To use the RVM "system" Ruby installation: >
|
||||
==============================================================================
|
||||
Clipboard integration *provider-clipboard* *clipboard*
|
||||
|
||||
Nvim has no direct connection to the system clipboard. Instead it is
|
||||
accessible through a |provider| which transparently uses shell commands for
|
||||
communicating with the clipboard.
|
||||
Nvim has no direct connection to the system clipboard. Instead it depends on
|
||||
a |provider| which transparently uses shell commands to communicate with the
|
||||
system clipboard or any other clipboard "backend".
|
||||
|
||||
Clipboard access is implicitly enabled if any of the following clipboard tools
|
||||
are found in your `$PATH`.
|
||||
To ALWAYS use the clipboard for ALL operations (instead of interacting with
|
||||
the '+' and/or '*' registers explicitly): >
|
||||
|
||||
set clipboard+=unnamedplus
|
||||
<
|
||||
See 'clipboard' for details and options.
|
||||
|
||||
*clipboard-tool*
|
||||
The presence of a working clipboard tool implicitly enables the '+' and '*'
|
||||
registers. Nvim looks for these clipboard tools, in order of priority:
|
||||
|
||||
- |g:clipboard|
|
||||
- pbcopy/pbpaste (macOS)
|
||||
- xclip
|
||||
- xsel (newer alternative to xclip)
|
||||
- pbcopy/pbpaste (macOS)
|
||||
- lemonade (for SSH) https://github.com/pocke/lemonade
|
||||
- doitclient (for SSH) http://www.chiark.greenend.org.uk/~sgtatham/doit/
|
||||
- win32yank (Windows)
|
||||
- tmux (if $TMUX is set)
|
||||
|
||||
If you would like to configure the provider: >
|
||||
*g:clipboard*
|
||||
To configure a custom clipboard tool, set `g:clipboard` to a dictionary: >
|
||||
let g:clipboard = {
|
||||
\ 'name': 'myClipboard',
|
||||
\ 'copy': {
|
||||
\ '+': 'copyCommand',
|
||||
\ '*': 'copyCommand',
|
||||
\ '+': 'tmux load-buffer -',
|
||||
\ '*': 'tmux load-buffer -',
|
||||
\ },
|
||||
\ 'paste': {
|
||||
\ '+': 'pasteCommand',
|
||||
\ '*': 'pasteCommand',
|
||||
\ '+': 'tmux save-buffer -',
|
||||
\ '*': 'tmux save-buffer -',
|
||||
\ },
|
||||
\ 'cache_enabled': 1,
|
||||
\ }
|
||||
|
||||
If the cache is enabled, then when a selection is copied and the copy command
|
||||
is executed, neovim will cache this selection until the copy command process
|
||||
dies. Then, when pasting, if the copy command process has not died, the cached
|
||||
selection is returned instead of executing the paste command.
|
||||
|
||||
The presence of a suitable clipboard tool implicitly enables the '+' and '*'
|
||||
registers.
|
||||
|
||||
If you want to ALWAYS use the clipboard for ALL operations (as opposed
|
||||
to interacting with the '+' and/or '*' registers explicitly), set the
|
||||
following option:
|
||||
>
|
||||
set clipboard+=unnamedplus
|
||||
<
|
||||
See 'clipboard' for details and more options.
|
||||
If `cache_enabled` is |TRUE| then when a selection is copied, Nvim will cache
|
||||
the selection until the copy command process dies. When pasting, if the copy
|
||||
process has not died, the cached selection is applied.
|
||||
|
||||
==============================================================================
|
||||
X11 selection mechanism *clipboard-x11* *x11-selection*
|
||||
|
Loading…
Reference in New Issue
Block a user