mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
clipboard: fix "" register not updated when clipboard=unnamed
Helped-By: Scott Prager <splinterofchaos@gmail.com>
This commit is contained in:
parent
941b02af4c
commit
9978a01faa
@ -775,9 +775,12 @@ void get_yank_register(int regname, int mode)
|
|||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
if (mode == YREG_PASTE && get_clipboard(regname, &y_current, false)) {
|
||||||
|
// y_current is set to clipboard contents.
|
||||||
|
return;
|
||||||
|
}
|
||||||
y_append = FALSE;
|
y_append = FALSE;
|
||||||
int unnamedclip = cb_flags & CB_UNNAMEDMASK;
|
if ((regname == 0 || regname == '"') && mode != YREG_YANK && y_previous != NULL) {
|
||||||
if ((regname == 0 || regname == '"') && !unnamedclip && mode != YREG_YANK && y_previous != NULL) {
|
|
||||||
y_current = y_previous;
|
y_current = y_previous;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@ -801,8 +804,6 @@ void get_yank_register(int regname, int mode)
|
|||||||
if (mode == YREG_YANK) {
|
if (mode == YREG_YANK) {
|
||||||
// remember the written register for unnamed paste
|
// remember the written register for unnamed paste
|
||||||
y_previous = y_current;
|
y_previous = y_current;
|
||||||
} else if (mode == YREG_PASTE) {
|
|
||||||
get_clipboard(regname, &y_current, false);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -5366,11 +5367,11 @@ static struct yankreg* adjust_clipboard_name(int *name, bool quiet, bool writing
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void get_clipboard(int name, struct yankreg** target, bool quiet)
|
static bool get_clipboard(int name, struct yankreg** target, bool quiet)
|
||||||
{
|
{
|
||||||
struct yankreg* reg = adjust_clipboard_name(&name, quiet, false);
|
struct yankreg* reg = adjust_clipboard_name(&name, quiet, false);
|
||||||
if (reg == NULL) {
|
if (reg == NULL) {
|
||||||
return;
|
return false;
|
||||||
}
|
}
|
||||||
free_register(reg);
|
free_register(reg);
|
||||||
|
|
||||||
@ -5455,7 +5456,7 @@ static void get_clipboard(int name, struct yankreg** target, bool quiet)
|
|||||||
}
|
}
|
||||||
|
|
||||||
*target = reg;
|
*target = reg;
|
||||||
return;
|
return true;
|
||||||
|
|
||||||
err:
|
err:
|
||||||
if (reg->y_array) {
|
if (reg->y_array) {
|
||||||
@ -5467,6 +5468,8 @@ err:
|
|||||||
reg->y_array = NULL;
|
reg->y_array = NULL;
|
||||||
reg->y_size = 0;
|
reg->y_size = 0;
|
||||||
EMSG("clipboard: provider returned invalid data");
|
EMSG("clipboard: provider returned invalid data");
|
||||||
|
*target = reg;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void set_clipboard(int name)
|
static void set_clipboard(int name)
|
||||||
|
@ -55,6 +55,12 @@ local function basic_register_test(noblock)
|
|||||||
, stuff and some more
|
, stuff and some more
|
||||||
some textsome some text, stuff and some more]])
|
some textsome some text, stuff and some more]])
|
||||||
|
|
||||||
|
-- deleting a line does update ""
|
||||||
|
feed('ggdd""P')
|
||||||
|
expect([[
|
||||||
|
, stuff and some more
|
||||||
|
some textsome some text, stuff and some more]])
|
||||||
|
|
||||||
feed('ggw<c-v>jwyggP')
|
feed('ggw<c-v>jwyggP')
|
||||||
if noblock then
|
if noblock then
|
||||||
expect([[
|
expect([[
|
||||||
|
Loading…
Reference in New Issue
Block a user