diff options
author | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2021-05-05 23:09:02 -0400 |
---|---|---|
committer | Jan Edmund Lazo <jan.lazo@mail.utoronto.ca> | 2021-05-06 00:19:10 -0400 |
commit | 51403d6d411ca9bc8b4e8d66003a52781e5c698e (patch) | |
tree | b0ab6a9dc5942cb89b45a80a8b7a2694e2c0ba1b | |
parent | 4910ac9ab8984551391df78dbf2744e6b4f5ef67 (diff) | |
download | rneovim-51403d6d411ca9bc8b4e8d66003a52781e5c698e.tar.gz rneovim-51403d6d411ca9bc8b4e8d66003a52781e5c698e.tar.bz2 rneovim-51403d6d411ca9bc8b4e8d66003a52781e5c698e.zip |
vim-patch:8.0.1309: cannot use 'balloonexpr' in a terminal
Problem: Cannot use 'balloonexpr' in a terminal.
Solution: Add 'balloonevalterm' and add code to handle mouse movements in a
terminal. Initial implementation for Unix with GUI.
https://github.com/vim/vim/commit/51b0f3701ecb440aa72ab6017c1df6940c0e0f6f
-rw-r--r-- | src/nvim/edit.c | 1 | ||||
-rw-r--r-- | src/nvim/ex_getln.c | 1 | ||||
-rw-r--r-- | src/nvim/keymap.c | 7 | ||||
-rw-r--r-- | src/nvim/keymap.h | 3 | ||||
-rw-r--r-- | src/nvim/message.c | 3 | ||||
-rw-r--r-- | src/nvim/misc1.c | 1 | ||||
-rw-r--r-- | src/nvim/normal.c | 8 | ||||
-rw-r--r-- | src/nvim/terminal.c | 2 |
8 files changed, 20 insertions, 6 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 999cc74185..56b563cba0 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -992,6 +992,7 @@ static int insert_handle_key(InsertState *s) case K_LEFTDRAG: case K_LEFTRELEASE: case K_LEFTRELEASE_NM: + case K_MOUSEMOVE: case K_MIDDLEMOUSE: case K_MIDDLEDRAG: case K_MIDDLERELEASE: diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index 7159b27665..53571ec8da 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -1953,6 +1953,7 @@ static int command_line_handle_key(CommandLineState *s) case K_X2MOUSE: case K_X2DRAG: case K_X2RELEASE: + case K_MOUSEMOVE: return command_line_not_changed(s); diff --git a/src/nvim/keymap.c b/src/nvim/keymap.c index 517274a1d3..fbc1bf1122 100644 --- a/src/nvim/keymap.c +++ b/src/nvim/keymap.c @@ -288,6 +288,7 @@ static const struct key_name_entry { { K_LEFTDRAG, "LeftDrag" }, { K_LEFTRELEASE, "LeftRelease" }, { K_LEFTRELEASE_NM, "LeftReleaseNM" }, + { K_MOUSEMOVE, "MouseMove" }, { K_MIDDLEMOUSE, "MiddleMouse" }, { K_MIDDLEDRAG, "MiddleDrag" }, { K_MIDDLERELEASE, "MiddleRelease" }, @@ -338,9 +339,9 @@ static struct mousetable { {(int)KE_X2MOUSE, MOUSE_X2, TRUE, FALSE}, {(int)KE_X2DRAG, MOUSE_X2, FALSE, TRUE}, {(int)KE_X2RELEASE, MOUSE_X2, FALSE, FALSE}, - /* DRAG without CLICK */ - {(int)KE_IGNORE, MOUSE_RELEASE, FALSE, TRUE}, - /* RELEASE without CLICK */ + // DRAG without CLICK + {(int)K_MOUSEMOVE, MOUSE_RELEASE, FALSE, TRUE}, + // RELEASE without CLICK {(int)KE_IGNORE, MOUSE_RELEASE, FALSE, FALSE}, {0, 0, 0, 0}, }; diff --git a/src/nvim/keymap.h b/src/nvim/keymap.h index ada9bc5780..d31196d412 100644 --- a/src/nvim/keymap.h +++ b/src/nvim/keymap.h @@ -242,7 +242,7 @@ enum key_extra { , KE_NOP = 97 // no-op: does nothing // , KE_FOCUSGAINED = 98 // focus gained // , KE_FOCUSLOST = 99 // focus lost - // , KE_MOUSEMOVE = 100 // mouse moved with no button down + , KE_MOUSEMOVE = 100 // mouse moved with no button down // , KE_CANCEL = 101 // return from vgetc , KE_EVENT = 102 // event , KE_COMMAND = 104 // <Cmd> special key @@ -411,6 +411,7 @@ enum key_extra { #define K_LEFTDRAG TERMCAP2KEY(KS_EXTRA, KE_LEFTDRAG) #define K_LEFTRELEASE TERMCAP2KEY(KS_EXTRA, KE_LEFTRELEASE) #define K_LEFTRELEASE_NM TERMCAP2KEY(KS_EXTRA, KE_LEFTRELEASE_NM) +#define K_MOUSEMOVE TERMCAP2KEY(KS_EXTRA, KE_MOUSEMOVE) #define K_MIDDLEMOUSE TERMCAP2KEY(KS_EXTRA, KE_MIDDLEMOUSE) #define K_MIDDLEDRAG TERMCAP2KEY(KS_EXTRA, KE_MIDDLEDRAG) #define K_MIDDLERELEASE TERMCAP2KEY(KS_EXTRA, KE_MIDDLERELEASE) diff --git a/src/nvim/message.c b/src/nvim/message.c index 1783f62247..c3815588a6 100644 --- a/src/nvim/message.c +++ b/src/nvim/message.c @@ -1193,7 +1193,8 @@ void wait_return(int redraw) || c == K_MIDDLEDRAG || c == K_MIDDLERELEASE || c == K_RIGHTDRAG || c == K_RIGHTRELEASE || c == K_MOUSELEFT || c == K_MOUSERIGHT - || c == K_MOUSEDOWN || c == K_MOUSEUP); + || c == K_MOUSEDOWN || c == K_MOUSEUP + || c == K_MOUSEMOVE); os_breakcheck(); /* * Avoid that the mouse-up event causes visual mode to start. diff --git a/src/nvim/misc1.c b/src/nvim/misc1.c index 34c43da0f7..68a1bba78d 100644 --- a/src/nvim/misc1.c +++ b/src/nvim/misc1.c @@ -602,6 +602,7 @@ int is_mouse_key(int c) || c == K_LEFTDRAG || c == K_LEFTRELEASE || c == K_LEFTRELEASE_NM + || c == K_MOUSEMOVE || c == K_MIDDLEMOUSE || c == K_MIDDLEDRAG || c == K_MIDDLERELEASE diff --git a/src/nvim/normal.c b/src/nvim/normal.c index c948881eca..616268fcd1 100644 --- a/src/nvim/normal.c +++ b/src/nvim/normal.c @@ -294,6 +294,7 @@ static const struct nv_cmd { { K_LEFTDRAG, nv_mouse, 0, 0 }, { K_LEFTRELEASE, nv_mouse, 0, 0 }, { K_LEFTRELEASE_NM, nv_mouse, 0, 0 }, + { K_MOUSEMOVE, nv_mouse, 0, 0 }, { K_MIDDLEMOUSE, nv_mouse, 0, 0 }, { K_MIDDLEDRAG, nv_mouse, 0, 0 }, { K_MIDDLERELEASE, nv_mouse, 0, 0 }, @@ -2263,6 +2264,10 @@ do_mouse ( break; } + if (c == K_MOUSEMOVE) { + // Mouse moved without a button pressed. + return false; + } /* * Ignore drag and release events if we didn't get a click. @@ -3390,7 +3395,7 @@ bool add_to_showcmd(int c) static int ignore[] = { K_IGNORE, - K_LEFTMOUSE, K_LEFTDRAG, K_LEFTRELEASE, + K_LEFTMOUSE, K_LEFTDRAG, K_LEFTRELEASE, K_MOUSEMOVE, K_MIDDLEMOUSE, K_MIDDLEDRAG, K_MIDDLERELEASE, K_RIGHTMOUSE, K_RIGHTDRAG, K_RIGHTRELEASE, K_MOUSEDOWN, K_MOUSEUP, K_MOUSELEFT, K_MOUSERIGHT, @@ -7036,6 +7041,7 @@ static void nv_g_cmd(cmdarg_T *cap) case K_LEFTMOUSE: case K_LEFTDRAG: case K_LEFTRELEASE: + case K_MOUSEMOVE: case K_RIGHTMOUSE: case K_RIGHTDRAG: case K_RIGHTRELEASE: diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c index afad20f557..c07a956dde 100644 --- a/src/nvim/terminal.c +++ b/src/nvim/terminal.c @@ -450,6 +450,7 @@ static int terminal_execute(VimState *state, int key) case K_LEFTMOUSE: case K_LEFTDRAG: case K_LEFTRELEASE: + case K_MOUSEMOVE: case K_MIDDLEMOUSE: case K_MIDDLEDRAG: case K_MIDDLERELEASE: @@ -1098,6 +1099,7 @@ static bool send_mouse_event(Terminal *term, int c) switch (c) { case K_LEFTDRAG: drag = true; FALLTHROUGH; case K_LEFTMOUSE: button = 1; break; + case K_MOUSEMOVE: drag = true; button = 0; break; case K_MIDDLEDRAG: drag = true; FALLTHROUGH; case K_MIDDLEMOUSE: button = 2; break; case K_RIGHTDRAG: drag = true; FALLTHROUGH; |