Set up environment variable for pager [Feature #16754]

This commit is contained in:
Nobuyoshi Nakada 2020-04-12 12:56:17 +09:00
parent e6551d835f
commit 3825662d77
Notes: git 2020-04-12 14:58:38 +09:00

8
ruby.c
View File

@ -1585,6 +1585,12 @@ rb_f_chomp(int argc, VALUE *argv, VALUE _)
return str; return str;
} }
static void
setup_pager_env(void)
{
if (!getenv("LESS")) ruby_setenv("LESS", "-R"); // Output "raw" control characters.
}
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)
{ {
@ -1627,12 +1633,14 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt)
close(fds[0]); close(fds[0]);
close(fds[1]); close(fds[1]);
if (pid > 0) { if (pid > 0) {
setup_pager_env();
rb_f_exec(1, &pager); rb_f_exec(1, &pager);
kill(SIGTERM, pid); kill(SIGTERM, pid);
rb_waitpid(pid, 0, 0); rb_waitpid(pid, 0, 0);
} }
} }
#else #else
setup_pager_env();
VALUE port = rb_io_popen(pager, rb_str_new_lit("w"), Qnil, Qnil); VALUE port = rb_io_popen(pager, rb_str_new_lit("w"), Qnil, Qnil);
if (!NIL_P(port)) { if (!NIL_P(port)) {
int oldout = dup(1); int oldout = dup(1);