X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=abook.c;h=dd05b5679bfa390675c6d5f48c95a46c07d3cea6;hb=7c501d6668c722e4b0200c4303c70fe840a708a9;hp=9f956559b361cdcc01662d36a5e3d0d207d319e0;hpb=c6c64f87def0694eb80ecc10fde881a203e82fcf;p=pkg%2Fabook.git diff --git a/abook.c b/abook.c index 9f95655..dd05b56 100644 --- a/abook.c +++ b/abook.c @@ -320,6 +320,7 @@ parse_command_line(int argc, char **argv) OPT_CONVERT, OPT_INFORMAT, OPT_OUTFORMAT, + OPT_OUTFORMAT_STR, OPT_INFILE, OPT_OUTFILE, OPT_FORMATS @@ -334,6 +335,7 @@ parse_command_line(int argc, char **argv) { "convert", 0, 0, OPT_CONVERT }, { "informat", 1, 0, OPT_INFORMAT }, { "outformat", 1, 0, OPT_OUTFORMAT }, + { "outformatstr", 1, 0, OPT_OUTFORMAT_STR }, { "infile", 1, 0, OPT_INFILE }, { "outfile", 1, 0, OPT_OUTFILE }, { "formats", 0, 0, OPT_FORMATS }, @@ -375,9 +377,22 @@ parse_command_line(int argc, char **argv) set_convert_var(informat); break; case OPT_OUTFORMAT: + if(mode != MODE_CONVERT && mode != MODE_QUERY) { + fprintf(stderr, + _("please use option --outformat after --convert or --mutt-query option\n")); + exit(EXIT_FAILURE); + } + // ascii-name is stored, it's used to traverse + // e_filters[] in MODE_CONVERT (see export_file()) outformat = optarg; + // but in case a query-compatible filter is requested + // try to guess right now which one it is, from u_filters[] selected_item_filter = select_output_item_filter(outformat); break; + case OPT_OUTFORMAT_STR: + strncpy(custom_format, optarg, FORMAT_STRING_LEN - 1); + custom_format[FORMAT_STRING_LEN] = 0; + break; case OPT_INFILE: set_convert_var(infile); break; @@ -392,8 +407,19 @@ parse_command_line(int argc, char **argv) } } + // if the output format requested does not allow filtered querying + // (not in u_filter[]) and --convert has not been specified; bailout + if(! selected_item_filter.func && mode != MODE_CONVERT) { + printf("output format %s not supported or incompatible with --mutt-query\n", outformat); + exit(EXIT_FAILURE); + } if(! selected_item_filter.func) selected_item_filter = select_output_item_filter("muttq"); + else if (! strcmp(outformat, "custom") && *custom_format) { + parsed_custom_format = (char *)malloc(FORMAT_STRING_LEN * sizeof(char*)); + custom_format_fields = (enum field_types *)malloc(FORMAT_STRING_MAX_FIELDS * sizeof(enum field_types *)); + parse_custom_format(custom_format, parsed_custom_format, custom_format_fields); + } if(optind < argc) { fprintf(stderr, _("%s: unrecognized arguments on command line\n"), argv[0]);