aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2021-05-05 23:09:02 -0400
committerJan Edmund Lazo <jan.lazo@mail.utoronto.ca>2021-05-06 00:19:10 -0400
commit51403d6d411ca9bc8b4e8d66003a52781e5c698e (patch)
treeb0ab6a9dc5942cb89b45a80a8b7a2694e2c0ba1b
parent4910ac9ab8984551391df78dbf2744e6b4f5ef67 (diff)
downloadrneovim-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.c1
-rw-r--r--src/nvim/ex_getln.c1
-rw-r--r--src/nvim/keymap.c7
-rw-r--r--src/nvim/keymap.h3
-rw-r--r--src/nvim/message.c3
-rw-r--r--src/nvim/misc1.c1
-rw-r--r--src/nvim/normal.c8
-rw-r--r--src/nvim/terminal.c2
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;