help: reuse print_columns() for help -a
"help -a" also respects column.ui (and column.help if presents) Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
3f8eccbe16
commit
dbfae68969
@ -9,6 +9,7 @@
|
|||||||
#include "common-cmds.h"
|
#include "common-cmds.h"
|
||||||
#include "parse-options.h"
|
#include "parse-options.h"
|
||||||
#include "run-command.h"
|
#include "run-command.h"
|
||||||
|
#include "column.h"
|
||||||
#include "help.h"
|
#include "help.h"
|
||||||
|
|
||||||
static struct man_viewer_list {
|
static struct man_viewer_list {
|
||||||
@ -30,6 +31,7 @@ enum help_format {
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int show_all = 0;
|
static int show_all = 0;
|
||||||
|
static unsigned int colopts;
|
||||||
static enum help_format help_format = HELP_FORMAT_NONE;
|
static enum help_format help_format = HELP_FORMAT_NONE;
|
||||||
static struct option builtin_help_options[] = {
|
static struct option builtin_help_options[] = {
|
||||||
OPT_BOOLEAN('a', "all", &show_all, "print all available commands"),
|
OPT_BOOLEAN('a', "all", &show_all, "print all available commands"),
|
||||||
@ -251,6 +253,8 @@ static int add_man_viewer_info(const char *var, const char *value)
|
|||||||
|
|
||||||
static int git_help_config(const char *var, const char *value, void *cb)
|
static int git_help_config(const char *var, const char *value, void *cb)
|
||||||
{
|
{
|
||||||
|
if (!prefixcmp(var, "column."))
|
||||||
|
return git_column_config(var, value, "help", &colopts);
|
||||||
if (!strcmp(var, "help.format")) {
|
if (!strcmp(var, "help.format")) {
|
||||||
if (!value)
|
if (!value)
|
||||||
return config_error_nonbool(var);
|
return config_error_nonbool(var);
|
||||||
@ -424,8 +428,9 @@ int cmd_help(int argc, const char **argv, const char *prefix)
|
|||||||
parsed_help_format = help_format;
|
parsed_help_format = help_format;
|
||||||
|
|
||||||
if (show_all) {
|
if (show_all) {
|
||||||
|
git_config(git_help_config, NULL);
|
||||||
printf("usage: %s\n\n", git_usage_string);
|
printf("usage: %s\n\n", git_usage_string);
|
||||||
list_commands("git commands", &main_cmds, &other_cmds);
|
list_commands("git commands", colopts, &main_cmds, &other_cmds);
|
||||||
printf("%s\n", git_more_info_string);
|
printf("%s\n", git_more_info_string);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
59
help.c
59
help.c
@ -4,6 +4,8 @@
|
|||||||
#include "levenshtein.h"
|
#include "levenshtein.h"
|
||||||
#include "help.h"
|
#include "help.h"
|
||||||
#include "common-cmds.h"
|
#include "common-cmds.h"
|
||||||
|
#include "string-list.h"
|
||||||
|
#include "column.h"
|
||||||
|
|
||||||
void add_cmdname(struct cmdnames *cmds, const char *name, int len)
|
void add_cmdname(struct cmdnames *cmds, const char *name, int len)
|
||||||
{
|
{
|
||||||
@ -70,31 +72,25 @@ void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes)
|
|||||||
cmds->cnt = cj;
|
cmds->cnt = cj;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pretty_print_string_list(struct cmdnames *cmds, int longest)
|
static void pretty_print_string_list(struct cmdnames *cmds,
|
||||||
|
unsigned int colopts)
|
||||||
{
|
{
|
||||||
int cols = 1, rows;
|
struct string_list list = STRING_LIST_INIT_NODUP;
|
||||||
int space = longest + 1; /* min 1 SP between words */
|
struct column_options copts;
|
||||||
int max_cols = term_columns() - 1; /* don't print *on* the edge */
|
int i;
|
||||||
int i, j;
|
|
||||||
|
|
||||||
if (space < max_cols)
|
for (i = 0; i < cmds->cnt; i++)
|
||||||
cols = max_cols / space;
|
string_list_append(&list, cmds->names[i]->name);
|
||||||
rows = DIV_ROUND_UP(cmds->cnt, cols);
|
/*
|
||||||
|
* always enable column display, we only consult column.*
|
||||||
for (i = 0; i < rows; i++) {
|
* about layout strategy and stuff
|
||||||
printf(" ");
|
*/
|
||||||
|
colopts = (colopts & ~COL_ENABLE_MASK) | COL_ENABLED;
|
||||||
for (j = 0; j < cols; j++) {
|
memset(&copts, 0, sizeof(copts));
|
||||||
int n = j * rows + i;
|
copts.indent = " ";
|
||||||
int size = space;
|
copts.padding = 2;
|
||||||
if (n >= cmds->cnt)
|
print_columns(&list, colopts, &copts);
|
||||||
break;
|
string_list_clear(&list, 0);
|
||||||
if (j == cols-1 || n + rows >= cmds->cnt)
|
|
||||||
size = 1;
|
|
||||||
printf("%-*s", size, cmds->names[n]->name);
|
|
||||||
}
|
|
||||||
putchar('\n');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int is_executable(const char *name)
|
static int is_executable(const char *name)
|
||||||
@ -203,25 +199,16 @@ void load_command_list(const char *prefix,
|
|||||||
exclude_cmds(other_cmds, main_cmds);
|
exclude_cmds(other_cmds, main_cmds);
|
||||||
}
|
}
|
||||||
|
|
||||||
void list_commands(const char *title, struct cmdnames *main_cmds,
|
void list_commands(const char *title, unsigned int colopts,
|
||||||
struct cmdnames *other_cmds)
|
struct cmdnames *main_cmds, struct cmdnames *other_cmds)
|
||||||
{
|
{
|
||||||
int i, longest = 0;
|
|
||||||
|
|
||||||
for (i = 0; i < main_cmds->cnt; i++)
|
|
||||||
if (longest < main_cmds->names[i]->len)
|
|
||||||
longest = main_cmds->names[i]->len;
|
|
||||||
for (i = 0; i < other_cmds->cnt; i++)
|
|
||||||
if (longest < other_cmds->names[i]->len)
|
|
||||||
longest = other_cmds->names[i]->len;
|
|
||||||
|
|
||||||
if (main_cmds->cnt) {
|
if (main_cmds->cnt) {
|
||||||
const char *exec_path = git_exec_path();
|
const char *exec_path = git_exec_path();
|
||||||
printf("available %s in '%s'\n", title, exec_path);
|
printf("available %s in '%s'\n", title, exec_path);
|
||||||
printf("----------------");
|
printf("----------------");
|
||||||
mput_char('-', strlen(title) + strlen(exec_path));
|
mput_char('-', strlen(title) + strlen(exec_path));
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
pretty_print_string_list(main_cmds, longest);
|
pretty_print_string_list(main_cmds, colopts);
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -230,7 +217,7 @@ void list_commands(const char *title, struct cmdnames *main_cmds,
|
|||||||
printf("---------------------------------------");
|
printf("---------------------------------------");
|
||||||
mput_char('-', strlen(title));
|
mput_char('-', strlen(title));
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
pretty_print_string_list(other_cmds, longest);
|
pretty_print_string_list(other_cmds, colopts);
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
2
help.h
2
help.h
@ -25,7 +25,7 @@ extern void add_cmdname(struct cmdnames *cmds, const char *name, int len);
|
|||||||
/* Here we require that excludes is a sorted list. */
|
/* Here we require that excludes is a sorted list. */
|
||||||
extern void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes);
|
extern void exclude_cmds(struct cmdnames *cmds, struct cmdnames *excludes);
|
||||||
extern int is_in_cmdlist(struct cmdnames *cmds, const char *name);
|
extern int is_in_cmdlist(struct cmdnames *cmds, const char *name);
|
||||||
extern void list_commands(const char *title,
|
extern void list_commands(const char *title, unsigned int colopts,
|
||||||
struct cmdnames *main_cmds,
|
struct cmdnames *main_cmds,
|
||||||
struct cmdnames *other_cmds);
|
struct cmdnames *other_cmds);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user