Enable escape sequence on Windows10 console via pager too

This commit is contained in:
Nobuyoshi Nakada 2020-12-21 18:09:45 +09:00
Родитель d8469507b9
Коммит b9d00f42e6
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 7CD2805BFA3770C6
1 изменённых файлов: 19 добавлений и 2 удалений

21
ruby.c
Просмотреть файл

@ -1647,6 +1647,23 @@ setup_pager_env(void)
if (!getenv("LESS")) ruby_setenv("LESS", "-R"); // Output "raw" control characters. 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 static VALUE
process_options(int argc, char **argv, ruby_cmdline_options_t *opt) 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 oldout = dup(1);
int olderr = dup(2); int olderr = dup(2);
int fd = RFILE(port)->fptr->fd; int fd = RFILE(port)->fptr->fd;
tty = tty_enabled();
dup2(fd, 1); dup2(fd, 1);
dup2(fd, 2); dup2(fd, 2);
/* more.com doesn't support CSI sequence */ usage(progname, 1, tty, columns);
usage(progname, 1, 0, columns);
fflush(stdout); fflush(stdout);
dup2(oldout, 1); dup2(oldout, 1);
dup2(olderr, 2); dup2(olderr, 2);