extern const char *pager_program;
extern int pager_in_use(void);
extern int pager_use_color;
++ extern int term_columns(void);
++extern int decimal_width(int);
extern const char *editor_program;
extern const char *askpass_program;
env = getenv("GIT_PAGER_IN_USE");
return env ? git_config_bool("GIT_PAGER_IN_USE", env) : 0;
}
+
++ /*
++ * Return cached value (if set) or $COLUMNS environment variable (if
++ * set and positive) or ioctl(1, TIOCGWINSZ).ws_col (if positive),
++ * and default to 80 if all else fails.
++ */
++ int term_columns(void)
++ {
++ static int term_columns_at_startup;
++
++ char *col_string;
++ int n_cols;
++
++ if (term_columns_at_startup)
++ return term_columns_at_startup;
++
++ term_columns_at_startup = 80;
++
++ col_string = getenv("COLUMNS");
++ if (col_string && (n_cols = atoi(col_string)) > 0)
++ term_columns_at_startup = n_cols;
++ #ifdef TIOCGWINSZ
++ else {
++ struct winsize ws;
++ if (!ioctl(1, TIOCGWINSZ, &ws) && ws.ws_col)
++ term_columns_at_startup = ws.ws_col;
++ }
++ #endif
++
++ return term_columns_at_startup;
++ }
+++
++/*
++ * How many columns do we need to show this number in decimal?
++ */
++int decimal_width(int number)
++{
++ int i, width;
++
++ for (width = 1, i = 10; i <= number; width++)
++ i *= 10;
++ return width;
++}