From 112d0bafd620c0e0f10614a3ba021d4de4fae331 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sun, 18 Dec 2005 12:41:10 -0800 Subject: [PATCH] Make "git help" sort git commands in columns This changes "pretty_print_string_list()" to show the git commands alphabetically in column order, which is the normal one. Ie instead of doing git commands available in '/home/torvalds/bin' ---------------------------------------------- add am ... applypatch archimport ... cat-file check-ref-format ... ... it does git commands available in '/home/torvalds/bin' ---------------------------------------------- add diff-tree ... am fetch ... apply fetch-pack ... ... where each column is sorted. This is how "ls" sorts things too, and since visually the columns are much more distinct than the rows, so it _looks_ more sorted. The "ls" command has a "-x" option that lists entries by lines (the way git.c used to): if somebody wants to do that, the new print-out logic could be easily accomodated to that too. Matter of taste and preference, I guess. Signed-off-by: Linus Torvalds Signed-off-by: Junio C Hamano --- git.c | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/git.c b/git.c index 157c549144..0fd95bf751 100644 --- a/git.c +++ b/git.c @@ -85,25 +85,28 @@ static int cmdname_compare(const void *a_, const void *b_) static void pretty_print_string_list(struct cmdname **cmdname, int longest) { - int cols = 1; + int cols = 1, rows; int space = longest + 1; /* min 1 SP between words */ int max_cols = term_columns() - 1; /* don't print *on* the edge */ - int i; + int i, j; if (space < max_cols) cols = max_cols / space; + rows = (cmdname_cnt + cols - 1) / cols; qsort(cmdname, cmdname_cnt, sizeof(*cmdname), cmdname_compare); - for (i = 0; i < cmdname_cnt; ) { - int c; + for (i = 0; i < rows; i++) { printf(" "); - for (c = cols; c && i < cmdname_cnt; i++) { - printf("%s", cmdname[i]->name); - - if (--c) - mput_char(' ', space - cmdname[i]->len); + for (j = 0; j < cols; j++) { + int n = j * rows + i; + int size = space; + if (n >= cmdname_cnt) + break; + if (j == cols-1 || n + rows >= cmdname_cnt) + size = 1; + printf("%-*s", size, cmdname[n]->name); } putchar('\n'); }