- if (STRNCMP_LITERAL (argv[i], "--format=") == 0) {
- opt = argv[i] + sizeof ("--format=") - 1;
- if (strcmp (opt, "text") == 0) {
- format = &format_text;
- } else if (strcmp (opt, "json") == 0) {
- format = &format_json;
- entire_thread = 1;
- } else if (strcmp (opt, "mbox") == 0) {
- format = &format_mbox;
- } else if (strcmp (opt, "raw") == 0) {
- raw = 1;
- } else {
- fprintf (stderr, "Invalid value for --format: %s\n", opt);
- return 1;
- }
- } else if (STRNCMP_LITERAL (argv[i], "--entire-thread") == 0) {
- entire_thread = 1;
- } else {
- fprintf (stderr, "Unrecognized option: %s\n", argv[i]);
+ };
+ int format_sel = NOTMUCH_FORMAT_NOT_SPECIFIED;
+ int exclude = EXCLUDE_TRUE;
+ int entire_thread = ENTIRE_THREAD_DEFAULT;
+
+ notmuch_opt_desc_t options[] = {
+ { NOTMUCH_OPT_KEYWORD, &format_sel, "format", 'f',
+ (notmuch_keyword_t []){ { "json", NOTMUCH_FORMAT_JSON },
+ { "text", NOTMUCH_FORMAT_TEXT },
+ { "sexp", NOTMUCH_FORMAT_SEXP },
+ { "mbox", NOTMUCH_FORMAT_MBOX },
+ { "raw", NOTMUCH_FORMAT_RAW },
+ { 0, 0 } } },
+ { NOTMUCH_OPT_INT, ¬much_format_version, "format-version", 0, 0 },
+ { NOTMUCH_OPT_KEYWORD, &exclude, "exclude", 'x',
+ (notmuch_keyword_t []){ { "true", EXCLUDE_TRUE },
+ { "false", EXCLUDE_FALSE },
+ { 0, 0 } } },
+ { NOTMUCH_OPT_KEYWORD, &entire_thread, "entire-thread", 't',
+ (notmuch_keyword_t []){ { "true", ENTIRE_THREAD_TRUE },
+ { "false", ENTIRE_THREAD_FALSE },
+ { "", ENTIRE_THREAD_TRUE },
+ { 0, 0 } } },
+ { NOTMUCH_OPT_INT, ¶ms.part, "part", 'p', 0 },
+ { NOTMUCH_OPT_BOOLEAN, ¶ms.crypto.decrypt, "decrypt", 'd', 0 },
+ { NOTMUCH_OPT_BOOLEAN, ¶ms.crypto.verify, "verify", 'v', 0 },
+ { NOTMUCH_OPT_BOOLEAN, ¶ms.output_body, "body", 'b', 0 },
+ { 0, 0, 0, 0, 0 }
+ };
+
+ opt_index = parse_arguments (argc, argv, options, 1);
+ if (opt_index < 0) {
+ /* diagnostics already printed */
+ return 1;
+ }
+
+ /* decryption implies verification */
+ if (params.crypto.decrypt)
+ params.crypto.verify = TRUE;
+
+ if (format_sel == NOTMUCH_FORMAT_NOT_SPECIFIED) {
+ /* if part was requested and format was not specified, use format=raw */
+ if (params.part >= 0)
+ format_sel = NOTMUCH_FORMAT_RAW;
+ else
+ format_sel = NOTMUCH_FORMAT_TEXT;
+ }
+
+ switch (format_sel) {
+ case NOTMUCH_FORMAT_JSON:
+ format = &format_json;
+ break;
+ case NOTMUCH_FORMAT_TEXT:
+ format = &format_text;
+ break;
+ case NOTMUCH_FORMAT_SEXP:
+ format = &format_sexp;
+ break;
+ case NOTMUCH_FORMAT_MBOX:
+ if (params.part > 0) {
+ fprintf (stderr, "Error: specifying parts is incompatible with mbox output format.\n");