From b9d00f42e63593e8c52dbe86cd4ebb7a120f768e Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada Date: Mon, 21 Dec 2020 18:09:45 +0900 Subject: [PATCH] Enable escape sequence on Windows10 console via pager too --- ruby.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/ruby.c b/ruby.c index a19e08b798..fa65c16bd4 100644 --- a/ruby.c +++ b/ruby.c @@ -1647,6 +1647,23 @@ setup_pager_env(void) if (!getenv("LESS")) ruby_setenv("LESS", "-R"); // Output "raw" control characters. } +#ifdef _WIN32 +static int +tty_enabled(void) +{ + HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); + DWORD m; + if (!GetConsoleMode(h, &m)) return 0; +# ifndef ENABLE_VIRTUAL_TERMINAL_PROCESSING +# define ENABLE_VIRTUAL_TERMINAL_PROCESSING 0x200 +# endif + if (!(m & ENABLE_VIRTUAL_TERMINAL_PROCESSING)) return 0; + return 1; +} +#elif !defined(HAVE_WORKING_FORK) +# define tty_enabled() 0 +#endif + static VALUE process_options(int argc, char **argv, ruby_cmdline_options_t *opt) { @@ -1707,10 +1724,10 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) int oldout = dup(1); int olderr = dup(2); int fd = RFILE(port)->fptr->fd; + tty = tty_enabled(); dup2(fd, 1); dup2(fd, 2); - /* more.com doesn't support CSI sequence */ - usage(progname, 1, 0, columns); + usage(progname, 1, tty, columns); fflush(stdout); dup2(oldout, 1); dup2(olderr, 2);