summaryrefslogtreecommitdiff
path: root/ruby.c
diff options
context:
space:
mode:
authorNobuyoshi Nakada <nobu@ruby-lang.org>2020-12-21 18:09:45 +0900
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-12-21 18:12:02 +0900
commitb9d00f42e63593e8c52dbe86cd4ebb7a120f768e (patch)
tree88122c277afd9ccef28a33872d1d7b82ba33529c /ruby.c
parentd8469507b943376b2b1b9be2692ff2fe055496a3 (diff)
Enable escape sequence on Windows10 console via pager too
Diffstat (limited to 'ruby.c')
-rw-r--r--ruby.c21
1 files changed, 19 insertions, 2 deletions
diff --git a/ruby.c b/ruby.c
index a19e08b..fa65c16 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);