Cygwin: console: Disable xterm mode for non cygwin process only.

- Special function keys such as arrow keys or function keys do not
  work in ConEmu with cygwin-connector after commit
  6a06c6bc8f. This patch fixes the
  issue.
This commit is contained in:
Takashi Yano 2020-01-14 11:09:42 +09:00 committed by Corinna Vinschen
parent bb30582a99
commit d7478090d6
4 changed files with 32 additions and 30 deletions

View File

@ -33,17 +33,6 @@ details. */
#include "child_info.h"
#include "cygwait.h"
/* Not yet defined in Mingw-w64 */
#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#endif /* ENABLE_VIRTUAL_TERMINAL_PROCESSING */
#ifndef DISABLE_NEWLINE_AUTO_RETURN
#define DISABLE_NEWLINE_AUTO_RETURN 0x0008
#endif /* DISABLE_NEWLINE_AUTO_RETURN */
#ifndef ENABLE_VIRTUAL_TERMINAL_INPUT
#define ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200
#endif /* ENABLE_VIRTUAL_TERMINAL_INPUT */
/* Don't make this bigger than NT_MAX_PATH as long as the temporary buffer
is allocated using tmp_pathbuf!!! */
#define CONVERT_LIMIT NT_MAX_PATH
@ -2975,14 +2964,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)

View File

@ -31,19 +31,9 @@ details. */
#define ALWAYS_USE_PCON false
#define USE_API_HOOK true
/* Not yet defined in Mingw-w64 */
#ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING
#define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x0004
#endif /* ENABLE_VIRTUAL_TERMINAL_PROCESSING */
#ifndef DISABLE_NEWLINE_AUTO_RETURN
#define DISABLE_NEWLINE_AUTO_RETURN 0x0008
#endif /* DISABLE_NEWLINE_AUTO_RETURN */
#ifndef PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE
#define PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE 0x00020016
#endif /* PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE */
#ifndef ENABLE_VIRTUAL_TERMINAL_INPUT
#define ENABLE_VIRTUAL_TERMINAL_INPUT 0x0200
#endif /* ENABLE_VIRTUAL_TERMINAL_INPUT */
extern "C" int sscanf (const char *, const char *, ...);
extern "C" int ttyname_r (int, char*, size_t);

View File

@ -610,7 +610,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 */

View File

@ -93,4 +93,16 @@ details. */
use this function. Use GetSystemWindowsDirectoryW. */
#define GetWindowsDirectoryW dont_use_GetWindowsDirectory
#define GetWindowsDirectoryA dont_use_GetWindowsDirectory
/* For console with xterm compatible mode */
/* 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 */
#ifndef DISABLE_NEWLINE_AUTO_RETURN
#define DISABLE_NEWLINE_AUTO_RETURN 0x0008
#endif /* DISABLE_NEWLINE_AUTO_RETURN */
#endif /*_WINLEAN_H*/