X-Git-Url: https://git.notmuchmail.org/git?p=notmuch;a=blobdiff_plain;f=notmuch.c;h=2ac8a592bb264e23259a8d1601b0aad7451eb088;hp=cb5415abc846c59ade6b2534d2302d9a0d37c010;hb=0ca16114162f94424cb75f01c84334a17ac43f98;hpb=533d0f5382797c702ac3976c1a7da27590ec1fb9 diff --git a/notmuch.c b/notmuch.c index cb5415ab..2ac8a592 100644 --- a/notmuch.c +++ b/notmuch.c @@ -89,7 +89,22 @@ static const char search_terms_help[] = "\t\tParentheses can also be used to control the combination of\n" "\t\tthe Boolean operators, but will have to be protected from\n" "\t\tinterpretation by the shell, (such as by putting quotation\n" - "\t\tmarks around any parenthesized expression).\n\n"; + "\t\tmarks around any parenthesized expression).\n" + "\n" + "\t\tFinally, results can be restricted to only messages within a\n" + "\t\tparticular time range, (based on the Date: header) with:\n" + "\n" + "\t\t\t..\n" + "\n" + "\t\tEach timestamp is a number representing the number of seconds\n" + "\t\tsince 1970-01-01 00:00:00 UTC. This is not the most convenient\n" + "\t\tmeans of expressing date ranges, but until notmuch is fixed to\n" + "\t\taccept a more convenient form, one can use the date program to\n" + "\t\tconstruct timestamps. For example, with the bash shell the\n" + "\t\tfollowing syntax would specify a date range to return messages\n" + "\t\tfrom 2009-10-01 until the current time:\n" + "\n" + "\t\t\t$(date +%%s -d 2009-10-01)..$(date +%%s)\n\n"; command_t commands[] = { { "setup", notmuch_setup_command, @@ -98,7 +113,8 @@ command_t commands[] = { "\t\tThe setup command will prompt for your full name, your primary\n" "\t\temail address, any alternate email addresses you use, and the\n" "\t\tdirectory containing your email archives. Your answers will be\n" - "\t\twritten to a configuration file in ${HOME}/.notmuch-config .\n" + "\t\twritten to a configuration file in ${NOTMUCH_CONFIG} (if set)\n" + "\t\tor ${HOME}/.notmuch-config.\n" "\n" "\t\tThis configuration file will be created with descriptive\n" "\t\tcomments, making it easy to edit by hand later to change the\n" @@ -107,8 +123,8 @@ command_t commands[] = { "\t\tInvoking notmuch with no command argument will run setup if\n" "\t\tthe setup command has not previously been completed." }, { "new", notmuch_new_command, - NULL, - "Find and import new messages to the notmuch database.", + "[--verbose]", + "\t\tFind and import new messages to the notmuch database.", "\t\tScans all sub-directories of the mail directory, performing\n" "\t\tfull-text indexing on new messages that are found. Each new\n" "\t\tmessage will be tagged as both \"inbox\" and \"unread\".\n" @@ -122,6 +138,13 @@ command_t commands[] = { "\t\tis delivered and you wish to incorporate it into the database.\n" "\t\tThese subsequent runs will be much quicker than the initial run.\n" "\n" + "\t\tSupported options for new include:\n" + "\n" + "\t\t--verbose\n" + "\n" + "\t\t\tVerbose operation. Shows paths of message files as\n" + "\t\t\tthey are being indexed.\n" + "\n" "\t\tNote: \"notmuch new\" runs (other than the first run) will\n" "\t\tskip any read-only directories, so you can use that to mark\n" "\t\tdirectories that will not receive any new mail (and make\n" @@ -139,16 +162,6 @@ command_t commands[] = { "\n" "\t\tSupported options for search include:\n" "\n" - "\t\t--max-threads=\n" - "\n" - "\t\t\tRestricts displayed search results to a subset\n" - "\t\t\tof the results that would match the terms.\n" - "\n" - "\t\t--first=\n" - "\n" - "\t\t\tOmits the first threads from the search\n" - "\t\t\tresults that would otherwise be displayed.\n" - "\n" "\t\t--sort=(newest-first|oldest-first)\n" "\n" "\t\t\tPresent results in either chronological order\n" @@ -164,6 +177,15 @@ command_t commands[] = { "\t\t(all replies to a particular message appear immediately\n" "\t\tafter that message in date order).\n" "\n" + "\t\tSupported options for show include:\n" + "\n" + "\t\t--entire-thread\n" + "\n" + "\t\t\tBy default only those messages that match the\n" + "\t\t\tsearch terms will be displayed. With this option,\n" + "\t\t\tall messages in the same thread as any matched\n" + "\t\t\tmessage will be displayed.\n" + "\n" "\t\tThe output format is plain-text, with all text-content\n" "\t\tMIME parts decoded. Various components in the output,\n" "\t\t('message', 'header', 'body', 'attachment', and MIME 'part')\n" @@ -179,8 +201,19 @@ command_t commands[] = { "\n" "\t\tSee \"notmuch help search-terms\" for details of the search\n" "\t\tterms syntax." }, - { "reply", notmuch_reply_command, + { "count", notmuch_count_command, " [...]", + "\t\tCount messages matching the search terms.", + "\t\tThe number of matching messages is output to stdout.\n" + "\n" + "\t\tA common use of \"notmuch count\" is to display the count\n" + "\t\tof messages matching both a specific tag and either inbox\n" + "\t\tor unread\n" + "\n" + "\t\tSee \"notmuch help search-terms\" for details of the search\n" + "\t\tterms syntax." }, + { "reply", notmuch_reply_command, + "[options...] [...]", "\t\tConstruct a reply template for a set of messages.", "\t\tConstructs a new message as a reply to a set of existing\n" "\t\tmessages. The Reply-To: header (if any, otherwise From:) is\n" @@ -189,10 +222,22 @@ command_t commands[] = { "\n" "\t\tA suitable subject is constructed. The In-Reply-to: and\n" "\t\tReferences: headers are set appropriately, and the content\n" - "\t\tof the original messages is quoted and included in the body.\n" + "\t\tof the original messages is quoted and included in the body\n" + "\t\t(unless --format=headers-only is given).\n" "\n" "\t\tThe resulting message template is output to stdout.\n" "\n" + "\t\tSupported options for reply include:\n" + "\n" + "\t\t--format=(default|headers-only)\n" + "\n" + "\t\t\tdefault:\n" + "\t\t\t\tIncludes subject and quoted message body.\n" + "\n" + "\t\t\theaders-only:\n" + "\t\t\t\tOnly produces In-Reply-To, References, To\n" + "\t\t\t\tCc, and Bcc headers.\n" + "\n" "\t\tSee \"notmuch help search-terms\" for details of the search\n" "\t\tterms syntax." }, { "tag", notmuch_tag_command, @@ -230,6 +275,15 @@ command_t commands[] = { "\t\tSo if you've previously been using sup for mail, then the\n" "\t\t\"notmuch restore\" command provides you a way to import\n" "\t\tall of your tags (or labels as sup calls them)." }, + { "search-tags", notmuch_search_tags_command, + "[ [...] ]", + "\t\tList all tags found in the database or matching messages.", + "\t\tRun this command without any search-term(s) to obtain a list\n" + "\t\tof all tags found in the database. If you provide one or more\n" + "\t\tsearch-terms as argument(s) then the resulting list will\n" + "\t\tcontain tags only from messages that match the search-term(s).\n" + "\n" + "\t\tIn both cases the list will be alphabetically sorted." }, { "help", notmuch_help_command, "[]", "\t\tThis message, or more detailed help for the named command.", @@ -238,28 +292,28 @@ command_t commands[] = { }; static void -usage (void) +usage (FILE *out) { command_t *command; unsigned int i; - fprintf (stderr, "Usage: notmuch [args...]\n"); - fprintf (stderr, "\n"); - fprintf (stderr, "Where and [args...] are as follows:\n"); - fprintf (stderr, "\n"); + fprintf (out, "Usage: notmuch [args...]\n"); + fprintf (out, "\n"); + fprintf (out, "Where and [args...] are as follows:\n"); + fprintf (out, "\n"); for (i = 0; i < ARRAY_SIZE (commands); i++) { command = &commands[i]; if (command->arguments) - fprintf (stderr, "\t%s\t%s\n\n%s\n\n", + fprintf (out, "\t%s\t%s\n\n%s\n\n", command->name, command->arguments, command->summary); else - fprintf (stderr, "\t%s\t%s\n\n", + fprintf (out, "\t%s\t%s\n\n", command->name, command->summary); } - fprintf (stderr, + fprintf (out, "Use \"notmuch help \" for more details on each command.\n" "And \"notmuch help search-terms\" for the common search-terms syntax.\n\n"); } @@ -271,8 +325,8 @@ notmuch_help_command (unused (void *ctx), int argc, char *argv[]) unsigned int i; if (argc == 0) { - fprintf (stderr, "The notmuch mail system.\n\n"); - usage (); + printf ("The notmuch mail system.\n\n"); + usage (stdout); return 0; } @@ -280,32 +334,32 @@ notmuch_help_command (unused (void *ctx), int argc, char *argv[]) command = &commands[i]; if (strcmp (argv[0], command->name) == 0) { - fprintf (stderr, "Help for \"notmuch %s\":\n\n", argv[0]); + printf ("Help for \"notmuch %s\":\n\n", argv[0]); if (command->arguments) - fprintf (stderr, "\t%s\t%s\n\n%s\n\n%s\n\n", - command->name, command->arguments, - command->summary, command->documentation); + printf ("\t%s\t%s\n\n%s\n\n%s\n\n", + command->name, command->arguments, + command->summary, command->documentation); else - fprintf (stderr, "\t%s\t%s\n\n%s\n\n", command->name, - command->summary, command->documentation); + printf ("\t%s\t%s\n\n%s\n\n", command->name, + command->summary, command->documentation); return 0; } } if (strcmp (argv[0], "search-terms") == 0) { - fprintf (stderr, "Help for <%s>\n\n", argv[0]); + printf ("Help for <%s>\n\n", argv[0]); for (i = 0; i < ARRAY_SIZE (commands); i++) { command = &commands[i]; if (command->arguments && strstr (command->arguments, "search-terms")) { - fprintf (stderr, "\t%s\t%s\n", - command->name, command->arguments); + printf ("\t%s\t%s\n", + command->name, command->arguments); } } - fprintf (stderr, "\n"); - fprintf (stderr, search_terms_help); + printf ("\n"); + printf (search_terms_help); return 0; } @@ -400,8 +454,6 @@ main (int argc, char *argv[]) return (command->function) (local, argc - 2, &argv[2]); } - /* Don't complain about "help" being an unknown command when we're - about to provide exactly what's wanted anyway. */ fprintf (stderr, "Error: Unknown command '%s' (see \"notmuch help\")\n", argv[1]);