If the COLUMNS environment variable is set use it's value as the default stat_width.
Also set the stat_name_width default to 2/3 of the full width.
This does change the default from 50 to 53 when using the original 80 column stat_width fallback.
Signed-off-by: Kris Shannon <kris@shannon.id.au> --- diff.c | 12 ++++++++++-- 1 files changed, 10 insertions(+), 2 deletions(-)
This has bugged me for a long time. I finally decided to see how hard it would be to fix.
I thought about getting the COLUMNS value once but I'm not sure it's worth the extra code.
Show changes to diff.c +10 −2
diff --git a/diff.c b/diff.c index 9038f19..6954134 100644 --- a/diff.c +++ b/diff.c @@ -1329,8 +1329,16 @@ static void show_stats(struct diffstat_t *data, struct diff_options *options) line_prefix = msg->buf; } - width = options->stat_width ? options->stat_width : 80; - name_width = options->stat_name_width ? options->stat_name_width : 50; + width = options->stat_width; + if (!width) { + char *cols = getenv("COLUMNS"); + + if (cols) + width = strtoul(cols, NULL, 10); + if (!width) + width = 80; + } + name_width = options->stat_name_width ? options->stat_name_width : ((width * 2 + 1) / 3); /* Sanity: give at least 5 columns to the graph, * but leave at least 10 columns for the name.
-- 1.7.6.1