mirror of
https://github.com/vim/vim.git
synced 2025-09-24 03:44:06 -04:00
patch 8.0.0872: no mouse scroll with a terminal window
Problem: Using mouse scroll while a terminal window has focus and the mouse pointer is on another window does not work. Same for focus in a non-terminal window ahd the mouse pointer is over a terminal window. Solution: Send the scroll action to the right window.
This commit is contained in:
@@ -4638,6 +4638,11 @@ nv_mousescroll(cmdarg_T *cap)
|
|||||||
|
|
||||||
if (cap->arg == MSCR_UP || cap->arg == MSCR_DOWN)
|
if (cap->arg == MSCR_UP || cap->arg == MSCR_DOWN)
|
||||||
{
|
{
|
||||||
|
# ifdef FEAT_TERMINAL
|
||||||
|
if (term_use_loop())
|
||||||
|
send_keys_to_term(curbuf->b_term, cap->cmdchar, TRUE);
|
||||||
|
else
|
||||||
|
# endif
|
||||||
if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
|
if (mod_mask & (MOD_MASK_SHIFT | MOD_MASK_CTRL))
|
||||||
{
|
{
|
||||||
(void)onepage(cap->arg ? FORWARD : BACKWARD, 1L);
|
(void)onepage(cap->arg ? FORWARD : BACKWARD, 1L);
|
||||||
|
@@ -5,6 +5,7 @@ void write_to_term(buf_T *buffer, char_u *msg, channel_T *channel);
|
|||||||
int term_job_running(term_T *term);
|
int term_job_running(term_T *term);
|
||||||
int term_in_terminal_mode(void);
|
int term_in_terminal_mode(void);
|
||||||
void term_leave_terminal_mode(void);
|
void term_leave_terminal_mode(void);
|
||||||
|
int send_keys_to_term(term_T *term, int c, int typed);
|
||||||
int term_use_loop(void);
|
int term_use_loop(void);
|
||||||
int terminal_loop(void);
|
int terminal_loop(void);
|
||||||
void term_job_ended(job_T *job);
|
void term_job_ended(job_T *job);
|
||||||
|
@@ -37,7 +37,6 @@
|
|||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
* - MS-Windows: no redraw for 'updatetime' #1915
|
* - MS-Windows: no redraw for 'updatetime' #1915
|
||||||
* - mouse scroll: when over other window, scroll that window.
|
|
||||||
* - add argument to term_wait() for waiting time.
|
* - add argument to term_wait() for waiting time.
|
||||||
* - For the scrollback buffer store lines in the buffer, only attributes in
|
* - For the scrollback buffer store lines in the buffer, only attributes in
|
||||||
* tl_scrollback.
|
* tl_scrollback.
|
||||||
@@ -909,7 +908,7 @@ term_vgetc()
|
|||||||
* Return FAIL when the key needs to be handled in Normal mode.
|
* Return FAIL when the key needs to be handled in Normal mode.
|
||||||
* Return OK when the key was dropped or sent to the terminal.
|
* Return OK when the key was dropped or sent to the terminal.
|
||||||
*/
|
*/
|
||||||
static int
|
int
|
||||||
send_keys_to_term(term_T *term, int c, int typed)
|
send_keys_to_term(term_T *term, int c, int typed)
|
||||||
{
|
{
|
||||||
char msg[KEY_BUF_LEN];
|
char msg[KEY_BUF_LEN];
|
||||||
@@ -948,13 +947,18 @@ send_keys_to_term(term_T *term, int c, int typed)
|
|||||||
case K_X1RELEASE:
|
case K_X1RELEASE:
|
||||||
case K_X2MOUSE:
|
case K_X2MOUSE:
|
||||||
case K_X2RELEASE:
|
case K_X2RELEASE:
|
||||||
|
|
||||||
|
case K_MOUSEUP:
|
||||||
|
case K_MOUSEDOWN:
|
||||||
|
case K_MOUSELEFT:
|
||||||
|
case K_MOUSERIGHT:
|
||||||
if (mouse_row < W_WINROW(curwin)
|
if (mouse_row < W_WINROW(curwin)
|
||||||
|| mouse_row >= (W_WINROW(curwin) + curwin->w_height)
|
|| mouse_row >= (W_WINROW(curwin) + curwin->w_height)
|
||||||
|| mouse_col < W_WINCOL(curwin)
|
|| mouse_col < W_WINCOL(curwin)
|
||||||
|| mouse_col >= W_ENDCOL(curwin)
|
|| mouse_col >= W_ENDCOL(curwin)
|
||||||
|| dragging_outside)
|
|| dragging_outside)
|
||||||
{
|
{
|
||||||
/* click outside the current window */
|
/* click or scroll outside the current window */
|
||||||
if (typed)
|
if (typed)
|
||||||
{
|
{
|
||||||
stuffcharReadbuff(c);
|
stuffcharReadbuff(c);
|
||||||
|
@@ -769,6 +769,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
872,
|
||||||
/**/
|
/**/
|
||||||
871,
|
871,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user