mirror of
https://github.com/neovim/neovim.git
synced 2024-12-29 14:41:06 -07:00
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.
51b0f3701e
This commit is contained in:
parent
4910ac9ab8
commit
51403d6d41
@ -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:
|
||||
|
@ -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);
|
||||
|
||||
|
||||
|
@ -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},
|
||||
};
|
||||
|
@ -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)
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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:
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user