mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
ops: save and restore clipboard batch status when entering cmdline window
This commit is contained in:
parent
68f3da5f61
commit
4b3e51d4ee
@ -5718,6 +5718,7 @@ static int ex_window(void)
|
|||||||
|
|
||||||
i = RedrawingDisabled;
|
i = RedrawingDisabled;
|
||||||
RedrawingDisabled = 0;
|
RedrawingDisabled = 0;
|
||||||
|
int save_count = save_batch_count();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call the main loop until <CR> or CTRL-C is typed.
|
* Call the main loop until <CR> or CTRL-C is typed.
|
||||||
@ -5726,6 +5727,7 @@ static int ex_window(void)
|
|||||||
normal_enter(true, false);
|
normal_enter(true, false);
|
||||||
|
|
||||||
RedrawingDisabled = i;
|
RedrawingDisabled = i;
|
||||||
|
restore_batch_count(save_count);
|
||||||
|
|
||||||
int save_KeyTyped = KeyTyped;
|
int save_KeyTyped = KeyTyped;
|
||||||
|
|
||||||
|
@ -5755,7 +5755,6 @@ void start_batch_changes(void)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
clipboard_delay_update = true;
|
clipboard_delay_update = true;
|
||||||
clipboard_needs_update = false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Counterpart to start_batch_changes().
|
/// Counterpart to start_batch_changes().
|
||||||
@ -5767,12 +5766,37 @@ void end_batch_changes(void)
|
|||||||
}
|
}
|
||||||
clipboard_delay_update = false;
|
clipboard_delay_update = false;
|
||||||
if (clipboard_needs_update) {
|
if (clipboard_needs_update) {
|
||||||
|
// must be before, as set_clipboard will invoke
|
||||||
|
// start/end_batch_changes recursively
|
||||||
|
clipboard_needs_update = false;
|
||||||
// unnamed ("implicit" clipboard)
|
// unnamed ("implicit" clipboard)
|
||||||
set_clipboard(NUL, y_previous);
|
set_clipboard(NUL, y_previous);
|
||||||
clipboard_needs_update = false;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int save_batch_count(void)
|
||||||
|
{
|
||||||
|
int save_count = batch_change_count;
|
||||||
|
batch_change_count = 0;
|
||||||
|
clipboard_delay_update = false;
|
||||||
|
if (clipboard_needs_update) {
|
||||||
|
clipboard_needs_update = false;
|
||||||
|
// unnamed ("implicit" clipboard)
|
||||||
|
set_clipboard(NUL, y_previous);
|
||||||
|
}
|
||||||
|
return save_count;
|
||||||
|
}
|
||||||
|
|
||||||
|
void restore_batch_count(int save_count)
|
||||||
|
{
|
||||||
|
assert(batch_change_count == 0);
|
||||||
|
batch_change_count = save_count;
|
||||||
|
if (batch_change_count > 0) {
|
||||||
|
clipboard_delay_update = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Check whether register is empty
|
/// Check whether register is empty
|
||||||
static inline bool reg_empty(const yankreg_T *const reg)
|
static inline bool reg_empty(const yankreg_T *const reg)
|
||||||
FUNC_ATTR_PURE
|
FUNC_ATTR_PURE
|
||||||
|
@ -392,6 +392,13 @@ describe('clipboard', function()
|
|||||||
eq('---', eval('getreg("*")'))
|
eq('---', eval('getreg("*")'))
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it('works in the cmdline window', function()
|
||||||
|
feed('q:itext<esc>yy')
|
||||||
|
eq({{'text', ''}, 'V'}, eval("g:test_clip['*']"))
|
||||||
|
command("let g:test_clip['*'] = [['star'], 'c']")
|
||||||
|
feed('p')
|
||||||
|
eq('textstar', meths.get_current_line())
|
||||||
|
end)
|
||||||
end)
|
end)
|
||||||
|
|
||||||
describe('clipboard=unnamedplus', function()
|
describe('clipboard=unnamedplus', function()
|
||||||
|
Loading…
Reference in New Issue
Block a user