patch 8.2.0356: MS-Windows: feedkeys() with VIMDLL cannot handle CSI

Problem:    MS-Windows: feedkeys() with VIMDLL cannot handle CSI correctly.
Solution:   Modify mch_inchar() to encode CSI bytes. (Ozaki Kiichi, Ken
            Takata, closes #5726)
This commit is contained in:
Bram Moolenaar
2020-03-04 23:21:35 +01:00
parent a471eeae75
commit 8f027fe470
4 changed files with 49 additions and 31 deletions
+13 -21
View File
@@ -1623,7 +1623,7 @@ vgetc(void)
// Get two extra bytes for special keys
if (c == K_SPECIAL
#ifdef FEAT_GUI
|| (gui.in_use && c == CSI)
|| (c == CSI)
#endif
)
{
@@ -1678,23 +1678,19 @@ vgetc(void)
}
#endif
#ifdef FEAT_GUI
if (gui.in_use)
// Handle focus event here, so that the caller doesn't need to
// know about it. Return K_IGNORE so that we loop once (needed
// if 'lazyredraw' is set).
if (c == K_FOCUSGAINED || c == K_FOCUSLOST)
{
// Handle focus event here, so that the caller doesn't
// need to know about it. Return K_IGNORE so that we loop
// once (needed if 'lazyredraw' is set).
if (c == K_FOCUSGAINED || c == K_FOCUSLOST)
{
ui_focus_change(c == K_FOCUSGAINED);
c = K_IGNORE;
}
// Translate K_CSI to CSI. The special key is only used
// to avoid it being recognized as the start of a special
// key.
if (c == K_CSI)
c = CSI;
ui_focus_change(c == K_FOCUSGAINED);
c = K_IGNORE;
}
// Translate K_CSI to CSI. The special key is only used to
// avoid it being recognized as the start of a special key.
if (c == K_CSI)
c = CSI;
#endif
}
// a keypad or special function key was not mapped, use it like
@@ -1772,11 +1768,7 @@ vgetc(void)
buf[i] = vgetorpeek(TRUE);
if (buf[i] == K_SPECIAL
#ifdef FEAT_GUI
|| (
# ifdef VIMDLL
gui.in_use &&
# endif
buf[i] == CSI)
|| (buf[i] == CSI)
#endif
)
{