From 7f0c3003ac561a25eeb3c735b32e3ee312ef58c9 Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Fri, 11 Nov 2011 10:58:27 +0100 Subject: src/args.c: Allow for specifying custom format strings Following long command line options can be used to override the default format strings: * --format-apt * --format-recur-apt * --format-event * --format-recur-event * --format-todo Signed-off-by: Lukas Fleischer --- src/args.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 66 insertions(+), 23 deletions(-) (limited to 'src') diff --git a/src/args.c b/src/args.c index 3e92290..3e96c46 100644 --- a/src/args.c +++ b/src/args.c @@ -45,6 +45,15 @@ #include "calcurse.h" +/* Long options */ +enum { + OPT_FMT_APT = 1000, + OPT_FMT_RAPT, + OPT_FMT_EV, + OPT_FMT_REV, + OPT_FMT_TODO +}; + /* * Print Calcurse usage and exit. */ @@ -190,7 +199,7 @@ status_arg (void) * If regex is not null, only the matching todos are printed. */ static void -todo_arg (int priority, int print_note, regex_t *regex) +todo_arg (int priority, const char *format, regex_t *regex) { llist_item_t *i; int title = 1; @@ -219,7 +228,7 @@ todo_arg (int priority, int print_note, regex_t *regex) if (priority == 0) { DISPLAY_TITLE; - print_todo (print_note ? "%p. %m\n%N" : "%p. %m\n", todo); + print_todo (format, todo); } } else @@ -227,7 +236,7 @@ todo_arg (int priority, int print_note, regex_t *regex) if (priority < 0 || todo->id == priority) { DISPLAY_TITLE; - print_todo (print_note ? "%p. %m\n%N" : "%p. %m\n", todo); + print_todo (format, todo); } } } @@ -288,7 +297,8 @@ arg_print_date (long date) * If regex is not null, only the matching appointments or events are printed. */ static int -app_arg (int add_line, struct date *day, long date, int print_note, +app_arg (int add_line, struct date *day, long date, const char *fmt_apt, + const char *fmt_rapt, const char *fmt_ev, const char *fmt_rev, regex_t *regex) { llist_item_t *i, *j; @@ -323,7 +333,7 @@ app_arg (int add_line, struct date *day, long date, int print_note, arg_print_date (today); print_date = 0; } - print_recur_event (print_note ? " * %m\n%N" : " * %m\n", today, re); + print_recur_event (fmt_rev, today, re); } LLIST_FIND_FOREACH_CONT (&eventlist, today, event_inday, i) @@ -343,7 +353,7 @@ app_arg (int add_line, struct date *day, long date, int print_note, arg_print_date (today); print_date = 0; } - print_event (print_note ? " * %m\n%N" : " * %m\n", today, ev); + print_event (fmt_ev, today, ev); } /* Same process is performed but this time on the appointments. */ @@ -396,8 +406,7 @@ app_arg (int add_line, struct date *day, long date, int print_note, arg_print_date (today); print_date = 0; } - print_apoint (print_note ? " - %S -> %E\n\t%m\n%N" : - " - %S -> %E\n\t%m\n", today, apt); + print_apoint (fmt_apt, today, apt); i = LLIST_TS_FIND_NEXT (i, today, apoint_inday); } else if (ra) @@ -414,9 +423,7 @@ app_arg (int add_line, struct date *day, long date, int print_note, print_date = 0; } recur_apoint_find_occurrence (ra, today, &occurrence); - print_recur_apoint (print_note ? " - %S -> %E\n\t%m\n%N" : - " - %S -> %E\n\t%m\n", today, - occurrence, ra); + print_recur_apoint (fmt_rapt, today, occurrence, ra); apt = NULL; j = LLIST_TS_FIND_NEXT (j, today, recur_apoint_inday); } @@ -443,7 +450,8 @@ more_info (void) * to format the output correctly. */ static void -display_app (struct tm *t, int numdays, int add_line, int print_note, +display_app (struct tm *t, int numdays, int add_line, const char *fmt_apt, + const char *fmt_rapt, const char *fmt_ev, const char *fmt_rev, regex_t *regex) { int i, app_found; @@ -454,7 +462,8 @@ display_app (struct tm *t, int numdays, int add_line, int print_note, day.dd = t->tm_mday; day.mm = t->tm_mon + 1; day.yyyy = t->tm_year + 1900; - app_found = app_arg (add_line, &day, 0, print_note, regex); + app_found = app_arg (add_line, &day, 0, fmt_apt, fmt_rapt, fmt_ev, + fmt_rev, regex); if (app_found) add_line = 1; t->tm_mday++; @@ -467,7 +476,8 @@ display_app (struct tm *t, int numdays, int add_line, int print_note, * days. */ static void -date_arg (char *ddate, int add_line, int print_note, regex_t *regex) +date_arg (char *ddate, int add_line, const char *fmt_apt, const char *fmt_rapt, + const char *fmt_ev, const char *fmt_rev, regex_t *regex) { int i; struct date day; @@ -498,14 +508,15 @@ date_arg (char *ddate, int add_line, int print_note, regex_t *regex) */ timer = time (NULL); t = *localtime (&timer); - display_app (&t, numdays, add_line, print_note, regex); + display_app (&t, numdays, add_line, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, + regex); } else { /* a date was entered */ if (parse_date (ddate, conf.input_datefmt, (int *)&day.yyyy, (int *)&day.mm, (int *)&day.dd, NULL)) { - app_arg (add_line, &day, 0, print_note, regex); + app_arg (add_line, &day, 0, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, regex); } else { @@ -529,8 +540,9 @@ date_arg (char *ddate, int add_line, int print_note, regex_t *regex) * Many thanks to Erik Saule for providing this function. */ static void -date_arg_extended (char *startday, char *range, int add_line, int print_note, - regex_t *regex) +date_arg_extended (char *startday, char *range, int add_line, + const char *fmt_apt, const char *fmt_rapt, + const char *fmt_ev, const char *fmt_rev, regex_t *regex) { int i, numdays = 1, error = 0, arg_len = 0; static struct tm t; @@ -568,7 +580,8 @@ date_arg_extended (char *startday, char *range, int add_line, int print_note, } if (!error) { - display_app (&t, numdays, add_line, print_note, regex); + display_app (&t, numdays, add_line, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, + regex); } else { @@ -609,6 +622,12 @@ parse_args (int argc, char **argv) int tflag = 0; /* -t: print todo list */ int vflag = 0; /* -v: print version number */ int xflag = 0; /* -x: export data */ + /* Format strings */ + const char *fmt_apt = " - %S -> %E\n\t%m\n"; + const char *fmt_rapt = " - %S -> %E\n\t%m\n"; + const char *fmt_ev = " * %m\n"; + const char *fmt_rev = " * %m\n"; + const char *fmt_todo = "%p. %m\n"; int tnum = 0, xfmt = 0, non_interactive = 0, multiple_flag = 0, load_data = 0; char *ddate = "", *cfile = NULL, *range = NULL, *startday = NULL; @@ -641,6 +660,12 @@ parse_args (int argc, char **argv) {"todo", optional_argument, NULL, 't'}, {"version", no_argument, NULL, 'v'}, {"export", optional_argument, NULL, 'x'}, + + {"format-apt", required_argument, NULL, OPT_FMT_APT}, + {"format-recur-apt", required_argument, NULL, OPT_FMT_RAPT}, + {"format-event", required_argument, NULL, OPT_FMT_EV}, + {"format-recur-event", required_argument, NULL, OPT_FMT_REV}, + {"format-todo", required_argument, NULL, OPT_FMT_TODO}, {NULL, no_argument, NULL, 0} }; @@ -757,6 +782,21 @@ parse_args (int argc, char **argv) xfmt = IO_EXPORT_ICAL; } break; + case OPT_FMT_APT: + fmt_apt = optarg; + break; + case OPT_FMT_RAPT: + fmt_rapt = optarg; + break; + case OPT_FMT_EV: + fmt_ev = optarg; + break; + case OPT_FMT_REV: + fmt_rev = optarg; + break; + case OPT_FMT_TODO: + fmt_todo = optarg; + break; default: usage (); usage_try (); @@ -859,7 +899,7 @@ parse_args (int argc, char **argv) { io_check_file (path_todo, NULL); io_load_todo (); - todo_arg (tnum, Nflag, preg); + todo_arg (tnum, fmt_todo, preg); non_interactive = 1; } if (nflag) @@ -876,9 +916,11 @@ parse_args (int argc, char **argv) io_load_app (); custom_load_conf (); /* To get output date format. */ if (dflag) - date_arg (ddate, add_line, Nflag, preg); + date_arg (ddate, add_line, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, + preg); if (rflag || sflag) - date_arg_extended (startday, range, add_line, Nflag, preg); + date_arg_extended (startday, range, add_line, fmt_apt, + fmt_rapt, fmt_ev, fmt_rev, preg); non_interactive = 1; } else if (aflag) @@ -891,7 +933,8 @@ parse_args (int argc, char **argv) custom_load_conf (); /* To get output date format. */ io_load_app (); day.dd = day.mm = day.yyyy = 0; - app_arg (add_line, &day, 0, Nflag, preg); + app_arg (add_line, &day, 0, fmt_apt, fmt_rapt, fmt_ev, fmt_rev, + preg); non_interactive = 1; } } -- cgit v1.2.3-70-g09d2