When we redirect stdout to the pager, we also redirect stderr (if it would otherwise go to the terminal) so that error messages do not get overwritten by the pager. However, some stderr output may still want to go to the terminal, because they are time-sensitive (like progress reports) and should be overwritten by the pager. This patch stashes away the original stderr descriptor and creates a new stdio buffer for it. Signed-off-by: Jeff King <peff@xxxxxxxx> --- cache.h | 2 ++ pager.c | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletions(-) diff --git a/cache.h b/cache.h index 872bc9b..a6ce524 100644 --- a/cache.h +++ b/cache.h @@ -1067,6 +1067,8 @@ extern int pager_use_color; extern const char *editor_program; extern const char *askpass_program; extern const char *excludes_file; +extern FILE *original_stderr; +extern int original_stderr_fd; /* base85 */ int decode_85(char *dst, const char *line, int linelen); diff --git a/pager.c b/pager.c index dac358f..701926f 100644 --- a/pager.c +++ b/pager.c @@ -12,6 +12,8 @@ */ static int spawned_pager; +FILE *original_stderr; +int original_stderr_fd = -1; #ifndef WIN32 static void pager_preexec(void) @@ -97,8 +99,11 @@ void setup_pager(void) /* original process continues, but writes to the pipe */ dup2(pager_process.in, 1); - if (isatty(2)) + if (isatty(2)) { + original_stderr_fd = dup(2); + original_stderr = fdopen(original_stderr_fd, "w"); dup2(pager_process.in, 2); + } close(pager_process.in); /* this makes sure that the parent terminates after the pager */ -- 1.7.4.39.ge4c30 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html