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 <torvalds@osdl.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:

committed by
Junio C Hamano

parent
ea77e675e5
commit
112d0bafd6
21
git.c
21
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)
|
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 space = longest + 1; /* min 1 SP between words */
|
||||||
int max_cols = term_columns() - 1; /* don't print *on* the edge */
|
int max_cols = term_columns() - 1; /* don't print *on* the edge */
|
||||||
int i;
|
int i, j;
|
||||||
|
|
||||||
if (space < max_cols)
|
if (space < max_cols)
|
||||||
cols = max_cols / space;
|
cols = max_cols / space;
|
||||||
|
rows = (cmdname_cnt + cols - 1) / cols;
|
||||||
|
|
||||||
qsort(cmdname, cmdname_cnt, sizeof(*cmdname), cmdname_compare);
|
qsort(cmdname, cmdname_cnt, sizeof(*cmdname), cmdname_compare);
|
||||||
|
|
||||||
for (i = 0; i < cmdname_cnt; ) {
|
for (i = 0; i < rows; i++) {
|
||||||
int c;
|
|
||||||
printf(" ");
|
printf(" ");
|
||||||
|
|
||||||
for (c = cols; c && i < cmdname_cnt; i++) {
|
for (j = 0; j < cols; j++) {
|
||||||
printf("%s", cmdname[i]->name);
|
int n = j * rows + i;
|
||||||
|
int size = space;
|
||||||
if (--c)
|
if (n >= cmdname_cnt)
|
||||||
mput_char(' ', space - cmdname[i]->len);
|
break;
|
||||||
|
if (j == cols-1 || n + rows >= cmdname_cnt)
|
||||||
|
size = 1;
|
||||||
|
printf("%-*s", size, cmdname[n]->name);
|
||||||
}
|
}
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user