diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2015-04-08 21:46:12 +0200 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2015-04-11 11:11:52 +0200 |
commit | 941b02af4cca9fb98c6ee4a8dd4aa800bd337deb (patch) | |
tree | d3a1a5a907bf3c8c1ef3501e3a01afdbee375f1b | |
parent | e584fe00570a522154ce856581006644e766f88f (diff) | |
download | rneovim-941b02af4cca9fb98c6ee4a8dd4aa800bd337deb.tar.gz rneovim-941b02af4cca9fb98c6ee4a8dd4aa800bd337deb.tar.bz2 rneovim-941b02af4cca9fb98c6ee4a8dd4aa800bd337deb.zip |
clipboard: adjust v:register when clipboard=unnamed
Helped-By: Nicolas Hillegeer <nicolas@hillegeer.com>
Helped-By: Michael Reed <m.reed@mykolab.com>
-rw-r--r-- | src/nvim/normal.c | 2 | ||||
-rw-r--r-- | src/nvim/ops.c | 23 | ||||
-rw-r--r-- | test/functional/clipboard/clipboard_provider_spec.lua | 8 |
3 files changed, 31 insertions, 2 deletions
diff --git a/src/nvim/normal.c b/src/nvim/normal.c index be52d6294a..4fcf6f9594 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -914,7 +914,7 @@ getcount: && !oap->op_type && (idx < 0 || !(nv_cmds[idx].cmd_flags & NV_KEEPREG))) { clearop(oap); - set_reg_var(0); + set_reg_var(get_default_register_name()); } /* Get the length of mapped chars again after typing a count, second diff --git a/src/nvim/ops.c b/src/nvim/ops.c index 4c5a002f81..54c2edf4fa 100644 --- a/src/nvim/ops.c +++ b/src/nvim/ops.c @@ -5310,7 +5310,28 @@ static void free_register(struct yankreg *reg) y_current = curr; } -// return target register +/// Check if the default register (used in an unnamed paste) should be a +/// clipboard register. This happens when `clipboard=unnamed[plus]` is set +/// and a provider is available. +/// +/// @returns the name of of a clipboard register that should be used, or `NUL` if none. +int get_default_register_name(void) +{ + int name = NUL; + adjust_clipboard_name(&name, true, false); + return name; +} + +/// Determine if register `*name` should be used as a clipboard. +/// In an unnammed operation, `*name` is `NUL` and will be adjusted to `'*'/'+'` if +/// `clipboard=unnamed[plus]` is set. +/// +/// @param name The name of register, or `NUL` if unnamed. +/// @param quiet Suppress error messages +/// @param writing if we're setting the contents of the clipboard +/// +/// @returns the yankreg that should be used, or `NULL` +/// if the register isn't a clipboard or provider isn't available. static struct yankreg* adjust_clipboard_name(int *name, bool quiet, bool writing) { if (*name == '*' || *name == '+') { if(!eval_has_provider("clipboard")) { diff --git a/test/functional/clipboard/clipboard_provider_spec.lua b/test/functional/clipboard/clipboard_provider_spec.lua index e7ca183a0e..10a346b8ba 100644 --- a/test/functional/clipboard/clipboard_provider_spec.lua +++ b/test/functional/clipboard/clipboard_provider_spec.lua @@ -72,6 +72,7 @@ end describe('the unnamed register', function() before_each(clear) it('works without provider', function() + eq('"', eval('v:register')) basic_register_test() end) end) @@ -227,6 +228,13 @@ describe('clipboard usage', function() a line]]) end) + it('supports v:register and getreg() without parameters', function() + eq('*', eval('v:register')) + execute("let g:test_clip['*'] = [['some block',''], 'b']") + eq('some block', eval('getreg()')) + eq('\02210', eval('getregtype()')) + end) + end) it('supports :put', function() |