forked from aniani/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.
This commit is contained in:
@@ -3564,16 +3564,25 @@ get_tty_info(int fd, ttyinfo_T *info)
|
||||
#endif /* VMS */
|
||||
|
||||
#if defined(FEAT_MOUSE_TTY) || defined(PROTO)
|
||||
static int mouse_ison = FALSE;
|
||||
|
||||
/*
|
||||
* Set mouse clicks on or off.
|
||||
*/
|
||||
void
|
||||
mch_setmouse(int on)
|
||||
{
|
||||
static int ison = FALSE;
|
||||
# ifdef FEAT_BEVALTERM
|
||||
static int bevalterm_ison = FALSE;
|
||||
# endif
|
||||
int xterm_mouse_vers;
|
||||
|
||||
if (on == ison) /* return quickly if nothing to do */
|
||||
if (on == mouse_ison
|
||||
# ifdef FEAT_BEVALTERM
|
||||
&& p_bevalterm == bevalterm_ison
|
||||
# endif
|
||||
)
|
||||
/* return quickly if nothing to do */
|
||||
return;
|
||||
|
||||
xterm_mouse_vers = use_xterm_mouse();
|
||||
@@ -3585,18 +3594,30 @@ mch_setmouse(int on)
|
||||
(on
|
||||
? IF_EB("\033[?1015h", ESC_STR "[?1015h")
|
||||
: IF_EB("\033[?1015l", ESC_STR "[?1015l")));
|
||||
ison = on;
|
||||
mouse_ison = on;
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifdef FEAT_MOUSE_SGR
|
||||
if (ttym_flags == TTYM_SGR)
|
||||
{
|
||||
/* SGR mode supports columns above 223 */
|
||||
out_str_nf((char_u *)
|
||||
(on
|
||||
? IF_EB("\033[?1006h", ESC_STR "[?1006h")
|
||||
: IF_EB("\033[?1006l", ESC_STR "[?1006l")));
|
||||
ison = on;
|
||||
mouse_ison = on;
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifdef FEAT_BEVALTERM
|
||||
if (bevalterm_ison != (p_bevalterm && on))
|
||||
{
|
||||
bevalterm_ison = (p_bevalterm && on);
|
||||
if (xterm_mouse_vers > 1 && !bevalterm_ison)
|
||||
/* disable mouse movement events, enabling is below */
|
||||
out_str_nf((char_u *)
|
||||
(IF_EB("\033[?1003l", ESC_STR "[?1003l")));
|
||||
}
|
||||
# endif
|
||||
|
||||
@@ -3605,14 +3626,19 @@ mch_setmouse(int on)
|
||||
if (on) /* enable mouse events, use mouse tracking if available */
|
||||
out_str_nf((char_u *)
|
||||
(xterm_mouse_vers > 1
|
||||
? IF_EB("\033[?1002h", ESC_STR "[?1002h")
|
||||
? (
|
||||
# ifdef FEAT_BEVALTERM
|
||||
bevalterm_ison
|
||||
? IF_EB("\033[?1003h", ESC_STR "[?1003h") :
|
||||
# endif
|
||||
IF_EB("\033[?1002h", ESC_STR "[?1002h"))
|
||||
: IF_EB("\033[?1000h", ESC_STR "[?1000h")));
|
||||
else /* disable mouse events, could probably always send the same */
|
||||
out_str_nf((char_u *)
|
||||
(xterm_mouse_vers > 1
|
||||
? IF_EB("\033[?1002l", ESC_STR "[?1002l")
|
||||
: IF_EB("\033[?1000l", ESC_STR "[?1000l")));
|
||||
ison = on;
|
||||
mouse_ison = on;
|
||||
}
|
||||
|
||||
# ifdef FEAT_MOUSE_DEC
|
||||
@@ -3622,7 +3648,7 @@ mch_setmouse(int on)
|
||||
out_str_nf((char_u *)"\033[1;2'z\033[1;3'{");
|
||||
else /* disable mouse events */
|
||||
out_str_nf((char_u *)"\033['z");
|
||||
ison = on;
|
||||
mouse_ison = on;
|
||||
}
|
||||
# endif
|
||||
|
||||
@@ -3632,12 +3658,12 @@ mch_setmouse(int on)
|
||||
if (on)
|
||||
{
|
||||
if (gpm_open())
|
||||
ison = TRUE;
|
||||
mouse_ison = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
gpm_close();
|
||||
ison = FALSE;
|
||||
mouse_ison = FALSE;
|
||||
}
|
||||
}
|
||||
# endif
|
||||
@@ -3648,12 +3674,12 @@ mch_setmouse(int on)
|
||||
if (on)
|
||||
{
|
||||
if (sysmouse_open() == OK)
|
||||
ison = TRUE;
|
||||
mouse_ison = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
sysmouse_close();
|
||||
ison = FALSE;
|
||||
mouse_ison = FALSE;
|
||||
}
|
||||
}
|
||||
# endif
|
||||
@@ -3686,13 +3712,13 @@ mch_setmouse(int on)
|
||||
out_str_nf((char_u *)IF_EB("\033[0~ZwLMRK+1Q\033\\",
|
||||
ESC_STR "[0~ZwLMRK+1Q" ESC_STR "\\"));
|
||||
# endif
|
||||
ison = TRUE;
|
||||
mouse_ison = TRUE;
|
||||
}
|
||||
else
|
||||
{
|
||||
out_str_nf((char_u *)IF_EB("\033[0~ZwQ\033\\",
|
||||
ESC_STR "[0~ZwQ" ESC_STR "\\"));
|
||||
ison = FALSE;
|
||||
mouse_ison = FALSE;
|
||||
}
|
||||
}
|
||||
# endif
|
||||
@@ -3704,11 +3730,22 @@ mch_setmouse(int on)
|
||||
out_str_nf("\033[>1h\033[>6h\033[>7h\033[>1h\033[>9l");
|
||||
else
|
||||
out_str_nf("\033[>1l\033[>6l\033[>7l\033[>1l\033[>9h");
|
||||
ison = on;
|
||||
mouse_ison = on;
|
||||
}
|
||||
# endif
|
||||
}
|
||||
|
||||
#if defined(FEAT_BEVALTERM) || defined(PROTO)
|
||||
/*
|
||||
* Called when 'balloonevalterm' changed.
|
||||
*/
|
||||
void
|
||||
mch_bevalterm_changed(void)
|
||||
{
|
||||
mch_setmouse(mouse_ison);
|
||||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Set the mouse termcode, depending on the 'term' and 'ttymouse' options.
|
||||
*/
|
||||
|
Reference in New Issue
Block a user