Cygwin: console: Make cursor keys work in vim under ConEmu.

- After commit 774b8996d1, cursor
  keys do not work in vim under ConEmu without cygwin-connector.
  This patch fixes the issue.
This commit is contained in:
Takashi Yano via Cygwin-patches 2020-05-30 18:25:03 +09:00 committed by Corinna Vinschen
parent 41ae84e6dc
commit 0c5aab9c99
2 changed files with 15 additions and 6 deletions

View File

@ -2040,6 +2040,7 @@ class dev_console
char *cons_rapoi;
LONG xterm_mode_input;
LONG xterm_mode_output;
bool cursor_key_app_mode;
inline UINT get_console_cp ();
DWORD con_to_str (char *d, int dlen, WCHAR w);

View File

@ -243,6 +243,7 @@ fhandler_console::setup ()
con.backspace_keycode = CERASE;
con.cons_rapoi = NULL;
shared_console_info->tty_min_state.is_console = true;
con.cursor_key_app_mode = false;
}
}
@ -289,6 +290,8 @@ fhandler_console::request_xterm_mode_input (bool req)
GetConsoleMode (get_handle (), &dwMode);
dwMode |= ENABLE_VIRTUAL_TERMINAL_INPUT;
SetConsoleMode (get_handle (), dwMode);
if (con.cursor_key_app_mode) /* Restore DECCKM */
WriteConsoleA (get_output_handle (), "\033[?1h", 5, NULL, 0);
}
}
else
@ -2150,10 +2153,6 @@ fhandler_console::char_command (char c)
break;
case 'h': /* DECSET */
case 'l': /* DECRST */
if (c == 'h')
con.screen_alternated = true;
else
con.screen_alternated = false;
wpbuf.put (c);
/* Just send the sequence */
wpbuf.send (get_output_handle ());
@ -2161,8 +2160,15 @@ fhandler_console::char_command (char c)
{
bool need_fix_tab_position = false;
for (int i = 0; i < con.nargs; i++)
if (con.args[i] == 1049)
need_fix_tab_position = true;
{
if (con.args[i] == 1049)
{
con.screen_alternated = (c == 'h');
need_fix_tab_position = true;
}
if (con.args[i] == 1) /* DECCKM */
con.cursor_key_app_mode = (c == 'h');
}
/* Call fix_tab_position() if screen has been alternated. */
if (need_fix_tab_position)
fix_tab_position ();
@ -2174,6 +2180,7 @@ fhandler_console::char_command (char c)
con.scroll_region.Top = 0;
con.scroll_region.Bottom = -1;
con.savex = con.savey = -1;
con.cursor_key_app_mode = false;
}
wpbuf.put (c);
/* Just send the sequence */
@ -3077,6 +3084,7 @@ fhandler_console::write (const void *vsrc, size_t len)
con.scroll_region.Top = 0;
con.scroll_region.Bottom = -1;
con.savex = con.savey = -1;
con.cursor_key_app_mode = false;
}
/* ESC sequences below (e.g. OSC, etc) are left to xterm
emulation in xterm compatible mode, therefore, are not