X-Git-Url: https://git.deb.at/w?a=blobdiff_plain;f=abook.c;h=b5a941e259b6467afa32897804dd9b38a3bf3297;hb=fa167822d1f3426ce75bb36b4080e64537ae6362;hp=4ef136c1f44082359a7516fd1f24ae5444de2aa5;hpb=e9103e7aaac10a5210345e2478240baaae6df899;p=pkg%2Fabook.git diff --git a/abook.c b/abook.c index 4ef136c..b5a941e 100644 --- a/abook.c +++ b/abook.c @@ -50,6 +50,12 @@ static void add_email(int); char *datafile = NULL; static char *rcfile = NULL; +// custom formatting +char custom_format[FORMAT_STRING_LEN] = "{nick} ({name}): {mobile}"; +char *parsed_custom_format = NULL; +enum field_types *custom_format_fields = 0; +struct abook_output_item_filter selected_item_filter; + bool alternative_datafile = FALSE; bool alternative_rcfile = FALSE; @@ -303,6 +309,7 @@ parse_command_line(int argc, char **argv) *infile = "-", *outfile = "-"; int c; + selected_item_filter = select_output_item_filter("muttq"); for(;;) { int option_index = 0; @@ -313,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 @@ -327,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 }, @@ -368,7 +377,12 @@ parse_command_line(int argc, char **argv) set_convert_var(informat); break; case OPT_OUTFORMAT: - set_convert_var(outformat); + outformat = optarg; + 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); @@ -384,6 +398,13 @@ parse_command_line(int argc, char **argv) } } + 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]); @@ -462,7 +483,7 @@ mutt_query(char *str) } putchar('\n'); while(i >= 0) { - muttq_print_item(stdout, i); + e_write_item(stdout, i, selected_item_filter.func); i = find_item(str, i + 1, search_fields); } }