Hi Bram and list,

How to repro.:
- Start vanilla Vim with :terminal. (--enable-terminal is required for 
configure.)
  $ vim --clean +term
- Left mouse click on terminal window.

Expected behavior:
- Nothing happens.

Actual behavior:
- Dust is output.


I wrote a patch.
The implementation of this part is TODO, but I want to avoid garbage output.
--
Best regards,
Hirohito Higashi (h_east)

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/d/optout.
diff --git a/src/terminal.c b/src/terminal.c
index 3972bcc..90a4067 100644
--- a/src/terminal.c
+++ b/src/terminal.c
@@ -386,6 +386,7 @@ write_to_term(buf_T *buffer, char_u *msg, channel_T *channel)
     static int
 term_convert_key(int c, char *buf)
 {
+    int		    do_convert = TRUE;
     VTerm	    *vterm = curbuf->b_term->tl_vterm;
     VTermKey	    key = VTERM_KEY_NONE;
     VTermModifier   mod = VTERM_MOD_NONE;
@@ -442,44 +443,47 @@ term_convert_key(int c, char *buf)
 	case K_UP:		key = VTERM_KEY_UP; break;
 	case TAB:		key = VTERM_KEY_TAB; break;
 
-	case K_MOUSEUP:		/* TODO */ break;
-	case K_MOUSEDOWN:	/* TODO */ break;
-	case K_MOUSELEFT:	/* TODO */ break;
-	case K_MOUSERIGHT:	/* TODO */ break;
-
-	case K_LEFTMOUSE:	/* TODO */ break;
-	case K_LEFTMOUSE_NM:	/* TODO */ break;
-	case K_LEFTDRAG:	/* TODO */ break;
-	case K_LEFTRELEASE:	/* TODO */ break;
-	case K_LEFTRELEASE_NM:	/* TODO */ break;
-	case K_MIDDLEMOUSE:	/* TODO */ break;
-	case K_MIDDLEDRAG:	/* TODO */ break;
-	case K_MIDDLERELEASE:	/* TODO */ break;
-	case K_RIGHTMOUSE:	/* TODO */ break;
-	case K_RIGHTDRAG:	/* TODO */ break;
-	case K_RIGHTRELEASE:	/* TODO */ break;
-	case K_X1MOUSE:		/* TODO */ break;
-	case K_X1DRAG:		/* TODO */ break;
-	case K_X1RELEASE:	/* TODO */ break;
-	case K_X2MOUSE:		/* TODO */ break;
-	case K_X2DRAG:		/* TODO */ break;
-	case K_X2RELEASE:	/* TODO */ break;
+	case K_MOUSEUP:		/* TODO */ do_convert = FALSE; break;
+	case K_MOUSEDOWN:	/* TODO */ do_convert = FALSE; break;
+	case K_MOUSELEFT:	/* TODO */ do_convert = FALSE; break;
+	case K_MOUSERIGHT:	/* TODO */ do_convert = FALSE; break;
+
+	case K_LEFTMOUSE:	/* TODO */ do_convert = FALSE; break;
+	case K_LEFTMOUSE_NM:	/* TODO */ do_convert = FALSE; break;
+	case K_LEFTDRAG:	/* TODO */ do_convert = FALSE; break;
+	case K_LEFTRELEASE:	/* TODO */ do_convert = FALSE; break;
+	case K_LEFTRELEASE_NM:	/* TODO */ do_convert = FALSE; break;
+	case K_MIDDLEMOUSE:	/* TODO */ do_convert = FALSE; break;
+	case K_MIDDLEDRAG:	/* TODO */ do_convert = FALSE; break;
+	case K_MIDDLERELEASE:	/* TODO */ do_convert = FALSE; break;
+	case K_RIGHTMOUSE:	/* TODO */ do_convert = FALSE; break;
+	case K_RIGHTDRAG:	/* TODO */ do_convert = FALSE; break;
+	case K_RIGHTRELEASE:	/* TODO */ do_convert = FALSE; break;
+	case K_X1MOUSE:		/* TODO */ do_convert = FALSE; break;
+	case K_X1DRAG:		/* TODO */ do_convert = FALSE; break;
+	case K_X1RELEASE:	/* TODO */ do_convert = FALSE; break;
+	case K_X2MOUSE:		/* TODO */ do_convert = FALSE; break;
+	case K_X2DRAG:		/* TODO */ do_convert = FALSE; break;
+	case K_X2RELEASE:	/* TODO */ do_convert = FALSE; break;
 
         /* TODO: handle all special keys and modifiers that terminal_loop()
 	 * does not handle. */
     }
 
-    /*
-     * Convert special keys to vterm keys:
-     * - Write keys to vterm: vterm_keyboard_key()
-     * - Write output to channel.
-     */
-    if (key != VTERM_KEY_NONE)
-	/* Special key, let vterm convert it. */
-	vterm_keyboard_key(vterm, key, mod);
-    else
-	/* Normal character, let vterm convert it. */
-	vterm_keyboard_unichar(vterm, c, mod);
+    if (do_convert)
+    {
+	/*
+	* Convert special keys to vterm keys:
+	* - Write keys to vterm: vterm_keyboard_key()
+	* - Write output to channel.
+	*/
+	if (key != VTERM_KEY_NONE)
+	    /* Special key, let vterm convert it. */
+	    vterm_keyboard_key(vterm, key, mod);
+	else
+	    /* Normal character, let vterm convert it. */
+	    vterm_keyboard_unichar(vterm, c, mod);
+    }
 
     /* Read back the converted escape sequence. */
     return (int)vterm_output_read(vterm, buf, KEY_BUF_LEN);

Raspunde prin e-mail lui