[PATCH] Cygwin: console: Disable xterm mode for non cygwin process only.
Takashi Yano
takashi.yano@nifty.ne.jp
Wed Jan 1 06:52:00 GMT 2020
- Special function keys such as arrow keys or function keys do not
work in ConEmu with cygwin-connector after commit
6a06c6bc8f8492ea09aa3ae180fe94e4ac265611. This patch fixes the
issue.
---
winsup/cygwin/fhandler_console.cc | 8 --------
winsup/cygwin/spawn.cc | 29 ++++++++++++++++++++++++++++-
2 files changed, 28 insertions(+), 9 deletions(-)
diff --git a/winsup/cygwin/fhandler_console.cc b/winsup/cygwin/fhandler_console.cc
index b3095bbe3..e4e21e65e 100644
--- a/winsup/cygwin/fhandler_console.cc
+++ b/winsup/cygwin/fhandler_console.cc
@@ -2973,14 +2973,6 @@ fhandler_console::fixup_after_fork_exec (bool execing)
{
set_unit ();
setup_io_mutex ();
- if (wincap.has_con_24bit_colors () && !con_is_legacy)
- {
- DWORD dwMode;
- /* Disable xterm compatible mode in input */
- GetConsoleMode (get_handle (), &dwMode);
- dwMode &= ~ENABLE_VIRTUAL_TERMINAL_INPUT;
- SetConsoleMode (get_handle (), dwMode);
- }
}
// #define WINSTA_ACCESS (WINSTA_READATTRIBUTES | STANDARD_RIGHTS_READ | STANDARD_RIGHTS_WRITE | WINSTA_CREATEDESKTOP | WINSTA_EXITWINDOWS)
diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc
index cea79e326..efd82c3c2 100644
--- a/winsup/cygwin/spawn.cc
+++ b/winsup/cygwin/spawn.cc
@@ -29,6 +29,14 @@ details. */
#include "winf.h"
#include "ntdll.h"
+/* Not yet defined in Mingw-w64 */
+#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
+#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
+#endif /* ENABLE_VIRTUAL_TERMINAL_PROCESSING */
+#ifndef ENABLE_VIRTUAL_TERMINAL_INPUT
+#define ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200
+#endif /* ENABLE_VIRTUAL_TERMINAL_INPUT */
+
static const suffix_info exe_suffixes[] =
{
suffix_info ("", 1),
@@ -610,7 +618,26 @@ child_info_spawn::worker (const char *prog_arg, const char *const *argv,
}
}
else if (fh && fh->get_major () == DEV_CONS_MAJOR)
- attach_to_console = true;
+ {
+ attach_to_console = true;
+ if (wincap.has_con_24bit_colors () && !iscygwin ())
+ {
+ DWORD dwMode;
+ if (fd == 0)
+ {
+ /* Disable xterm compatible mode in input */
+ GetConsoleMode (fh->get_handle (), &dwMode);
+ dwMode &= ~ENABLE_VIRTUAL_TERMINAL_INPUT;
+ SetConsoleMode (fh->get_handle (), dwMode);
+ }
+ else
+ {
+ GetConsoleMode (fh->get_output_handle (), &dwMode);
+ dwMode &= ~ENABLE_VIRTUAL_TERMINAL_PROCESSING;
+ SetConsoleMode (fh->get_output_handle (), dwMode);
+ }
+ }
+ }
}
/* Set up needed handles for stdio */
--
2.21.0
More information about the Cygwin-patches
mailing list