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);