void setup_pager(void) { const char *pager = git_pager(isatty(1)); if (!pager) return; /* * force computing the width of the terminal before we redirect * the standard output to the pager. */ (void) term_columns(); setenv("GIT_PAGER_IN_USE", "true", 1); /* spawn the pager */ prepare_pager_args(&pager_process, pager); pager_process.in = -1; argv_array_push(&pager_process.env_array, "GIT_PAGER_IN_USE"); if (start_command(&pager_process)) return; /* original process continues, but writes to the pipe */ dup2(pager_process.in, 1); if (isatty(2)) dup2(pager_process.in, 2); close(pager_process.in); /* this makes sure that the parent terminates after the pager */ sigchain_push_common(wait_for_pager_signal); atexit(wait_for_pager_atexit); }
void setup_pager(void) { const char *pager = git_pager(isatty(1)); if (!pager) return; /* * After we redirect standard output, we won't be able to use an ioctl * to get the terminal size. Let's grab it now, and then set $COLUMNS * to communicate it to any sub-processes. */ { char buf[64]; xsnprintf(buf, sizeof(buf), "%d", term_columns()); setenv("COLUMNS", buf, 0); } setenv("GIT_PAGER_IN_USE", "true", 1); /* spawn the pager */ prepare_pager_args(&pager_process, pager); pager_process.in = -1; argv_array_push(&pager_process.env_array, "GIT_PAGER_IN_USE"); if (start_command(&pager_process)) return; /* original process continues, but writes to the pipe */ dup2(pager_process.in, 1); if (isatty(2)) dup2(pager_process.in, 2); close(pager_process.in); /* this makes sure that the parent terminates after the pager */ sigchain_push_common(wait_for_pager_signal); atexit(wait_for_pager_atexit); }