cli: refactor notmuch_help_command

Create a new private entry point _help_for so that we can call help
without simulating a command line invokation to set up the arguments.
This commit is contained in:
David Bremner 2015-04-05 23:59:18 +09:00
parent 1d4321ffa5
commit 0706e0e3e2

View file

@ -177,21 +177,19 @@ exec_man (const char *page)
} }
static int static int
notmuch_help_command (unused (notmuch_config_t * config), int argc, char *argv[]) _help_for (const char *topic_name)
{ {
command_t *command; command_t *command;
help_topic_t *topic; help_topic_t *topic;
unsigned int i; unsigned int i;
argc--; argv++; /* Ignore "help" */ if (!topic_name) {
if (argc == 0) {
printf ("The notmuch mail system.\n\n"); printf ("The notmuch mail system.\n\n");
usage (stdout); usage (stdout);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
if (strcmp (argv[0], "help") == 0) { if (strcmp (topic_name, "help") == 0) {
printf ("The notmuch help system.\n\n" printf ("The notmuch help system.\n\n"
"\tNotmuch uses the man command to display help. In case\n" "\tNotmuch uses the man command to display help. In case\n"
"\tof difficulties check that MANPATH includes the pages\n" "\tof difficulties check that MANPATH includes the pages\n"
@ -200,7 +198,7 @@ notmuch_help_command (unused (notmuch_config_t * config), int argc, char *argv[]
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }
command = find_command (argv[0]); command = find_command (topic_name);
if (command) { if (command) {
char *page = talloc_asprintf (NULL, "notmuch-%s", command->name); char *page = talloc_asprintf (NULL, "notmuch-%s", command->name);
exec_man (page); exec_man (page);
@ -208,7 +206,7 @@ notmuch_help_command (unused (notmuch_config_t * config), int argc, char *argv[]
for (i = 0; i < ARRAY_SIZE (help_topics); i++) { for (i = 0; i < ARRAY_SIZE (help_topics); i++) {
topic = &help_topics[i]; topic = &help_topics[i];
if (strcmp (argv[0], topic->name) == 0) { if (strcmp (topic_name, topic->name) == 0) {
char *page = talloc_asprintf (NULL, "notmuch-%s", topic->name); char *page = talloc_asprintf (NULL, "notmuch-%s", topic->name);
exec_man (page); exec_man (page);
} }
@ -216,10 +214,22 @@ notmuch_help_command (unused (notmuch_config_t * config), int argc, char *argv[]
fprintf (stderr, fprintf (stderr,
"\nSorry, %s is not a known command. There's not much I can do to help.\n\n", "\nSorry, %s is not a known command. There's not much I can do to help.\n\n",
argv[0]); topic_name);
return EXIT_FAILURE; return EXIT_FAILURE;
} }
static int
notmuch_help_command (unused (notmuch_config_t * config), int argc, char *argv[])
{
argc--; argv++; /* Ignore "help" */
if (argc == 0) {
return _help_for (NULL);
}
return _help_for (argv[0]);
}
/* Handle the case of "notmuch" being invoked with no command /* Handle the case of "notmuch" being invoked with no command
* argument. For now we just call notmuch_setup_command, but we plan * argument. For now we just call notmuch_setup_command, but we plan
* to be more clever about this in the future. * to be more clever about this in the future.