mirror of
https://github.com/neovim/neovim.git
synced 2025-02-25 18:55:25 -06:00
paste: tickle cursor
HACK: The cursor does not get repositioned after the paste completes. Scheduling a dummy event seems to fix it. Test case: 0. Revert this commit. 1. Paste some text in Normal-mode. 2. Notice the cursor is still in the cmdline area.
This commit is contained in:
parent
5b41070c63
commit
4344ac1111
@ -1252,11 +1252,15 @@ Boolean nvim_paste(String data, Integer phase, Error *err)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
api_free_object(rv);
|
||||||
|
api_free_array(args);
|
||||||
if (!(State & CMDLINE) && !(State & INSERT) && (phase == -1 || phase == 3)) {
|
if (!(State & CMDLINE) && !(State & INSERT) && (phase == -1 || phase == 3)) {
|
||||||
AppendCharToRedobuff(ESC); // Dot-repeat.
|
AppendCharToRedobuff(ESC); // Dot-repeat.
|
||||||
}
|
}
|
||||||
api_free_object(rv);
|
if (phase == -1 || phase == 3) {
|
||||||
api_free_array(args);
|
// XXX: Tickle main loop to ensure cursor is updated.
|
||||||
|
loop_schedule_deferred(&main_loop, event_create(loop_dummy_event, 0));
|
||||||
|
}
|
||||||
|
|
||||||
return ok;
|
return ok;
|
||||||
}
|
}
|
||||||
|
@ -162,6 +162,10 @@ size_t loop_size(Loop *loop)
|
|||||||
return rv;
|
return rv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void loop_dummy_event(void **argv)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
static void async_cb(uv_async_t *handle)
|
static void async_cb(uv_async_t *handle)
|
||||||
{
|
{
|
||||||
Loop *l = handle->loop->data;
|
Loop *l = handle->loop->data;
|
||||||
|
@ -430,7 +430,7 @@ static void tui_main(UIBridgeData *bridge, UI *ui)
|
|||||||
tui_terminal_after_startup(ui);
|
tui_terminal_after_startup(ui);
|
||||||
// Tickle `main_loop` with a dummy event, else the initial "focus-gained"
|
// Tickle `main_loop` with a dummy event, else the initial "focus-gained"
|
||||||
// terminal response may not get processed until user hits a key.
|
// terminal response may not get processed until user hits a key.
|
||||||
loop_schedule_deferred(&main_loop, event_create(tui_dummy_event, 0));
|
loop_schedule_deferred(&main_loop, event_create(loop_dummy_event, 0));
|
||||||
}
|
}
|
||||||
// "Passive" (I/O-driven) loop: TUI thread "main loop".
|
// "Passive" (I/O-driven) loop: TUI thread "main loop".
|
||||||
while (!tui_is_stopped(ui)) {
|
while (!tui_is_stopped(ui)) {
|
||||||
@ -449,10 +449,6 @@ static void tui_main(UIBridgeData *bridge, UI *ui)
|
|||||||
xfree(data);
|
xfree(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void tui_dummy_event(void **argv)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Handoff point between the main (ui_bridge) thread and the TUI thread.
|
/// Handoff point between the main (ui_bridge) thread and the TUI thread.
|
||||||
static void tui_scheduler(Event event, void *d)
|
static void tui_scheduler(Event event, void *d)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user