term_columns() checks for terminal width via ioctl(1). After redirecting, stdin is no longer terminal to get terminal width. Check terminal width and save it before redirect stdin in setup_pager() and let term_columns() reuse the value. Signed-off-by: Nguyán ThÃi Ngác Duy <pclouds@xxxxxxxxx> --- cache.h | 1 + help.c | 22 ---------------------- pager.c | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 22 deletions(-) diff --git a/cache.h b/cache.h index d83d68c..bcbd5f2 100644 --- a/cache.h +++ b/cache.h @@ -1045,6 +1045,7 @@ extern void setup_pager(void); extern const char *pager_program; extern int pager_in_use(void); extern int pager_use_color; +extern int term_columns(); extern const char *editor_program; extern const char *askpass_program; diff --git a/help.c b/help.c index 7654f1b..1344208 100644 --- a/help.c +++ b/help.c @@ -5,28 +5,6 @@ #include "help.h" #include "common-cmds.h" -/* most GUI terminals set COLUMNS (although some don't export it) */ -static int term_columns(void) -{ - char *col_string = getenv("COLUMNS"); - int n_cols; - - if (col_string && (n_cols = atoi(col_string)) > 0) - return n_cols; - -#ifdef TIOCGWINSZ - { - struct winsize ws; - if (!ioctl(1, TIOCGWINSZ, &ws)) { - if (ws.ws_col) - return ws.ws_col; - } - } -#endif - - return 80; -} - void add_cmdname(struct cmdnames *cmds, const char *name, int len) { struct cmdname *ent = xmalloc(sizeof(*ent) + len + 1); diff --git a/pager.c b/pager.c index dac358f..ad447cf 100644 --- a/pager.c +++ b/pager.c @@ -12,6 +12,7 @@ */ static int spawned_pager; +static int max_columns; #ifndef WIN32 static void pager_preexec(void) @@ -80,6 +81,15 @@ void setup_pager(void) spawned_pager = 1; /* means we are emitting to terminal */ +#ifdef TIOCGWINSZ + { + struct winsize ws; + if (!ioctl(1, TIOCGWINSZ, &ws)) { + if (ws.ws_col) + max_columns = ws.ws_col; + } + } +#endif /* spawn the pager */ pager_argv[0] = pager; pager_process.use_shell = 1; @@ -116,3 +126,25 @@ int pager_in_use(void) env = getenv("GIT_PAGER_IN_USE"); return env ? git_config_bool("GIT_PAGER_IN_USE", env) : 0; } + +int term_columns() +{ + char *col_string = getenv("COLUMNS"); + int n_cols; + + if (col_string && (n_cols = atoi(col_string)) > 0) + return n_cols; + + else if (spawned_pager && max_columns) + return max_columns; +#ifdef TIOCGWINSZ + else { + struct winsize ws; + if (!ioctl(1, TIOCGWINSZ, &ws)) { + if (ws.ws_col) + return ws.ws_col; + } + } +#endif + return 80; +} -- 1.7.2.2 -- 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