Use a dynamic method to print appointments to stdout

Add a flexible helper function print_apoint() and use it whenever we
print appointments to stdout. This reduces the number of copy-pasted
code and eventually allows for specifying custom format strings.

Following format specifiers are supported:

* s: Print the start time of the appointment as UNIX time stamp
* S: Print the start time of the appointment using the "hh:mm" format
* d: Print the duration of the appointment in seconds
* e: Print the end time of the appointment as UNIX time stamp
* E: Print the end time of the appointment using the "hh:mm" format
* m: Print the description of the item
* n: Print the name of the note file belonging to the item

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
Lukas Fleischer 2011-11-09 18:29:22 +01:00
parent edad2f39db
commit 330ca4d3cb
3 changed files with 52 additions and 18 deletions

View File

@ -357,8 +357,6 @@ app_arg (int add_line, struct date *day, long date, int print_note,
long today; long today;
unsigned print_date = 1; unsigned print_date = 1;
int app_found = 0; int app_found = 0;
char apoint_start_time[HRMIN_SIZE];
char apoint_end_time[HRMIN_SIZE];
if (date == 0) if (date == 0)
today = get_sec_date (*day); today = get_sec_date (*day);
@ -468,14 +466,7 @@ app_arg (int add_line, struct date *day, long date, int print_note,
arg_print_date (today); arg_print_date (today);
print_date = 0; print_date = 0;
} }
apoint_sec2str (apt, today, apoint_start_time, apoint_end_time); print_apoint (" - %S -> %E\n\t%m\n", today, apt);
fputs (" - ", stdout);
fputs (apoint_start_time, stdout);
fputs (" -> ", stdout);
fputs (apoint_end_time, stdout);
fputs ("\n\t", stdout);
fputs (apt->mesg, stdout);
fputs ("\n", stdout);
if (print_note && apt->note) if (print_note && apt->note)
print_notefile (stdout, apt->note, 2); print_notefile (stdout, apt->note, 2);
i = LLIST_TS_FIND_NEXT (i, today, apoint_inday); i = LLIST_TS_FIND_NEXT (i, today, apoint_inday);
@ -494,16 +485,9 @@ app_arg (int add_line, struct date *day, long date, int print_note,
print_date = 0; print_date = 0;
} }
apt = apoint_recur_s2apoint_s (ra); apt = apoint_recur_s2apoint_s (ra);
apoint_sec2str (apt, today, apoint_start_time, apoint_end_time); print_apoint (" - %S -> %E\n\t%m\n", today, apt);
mem_free (apt->mesg); mem_free (apt->mesg);
mem_free (apt); mem_free (apt);
fputs (" - ", stdout);
fputs (apoint_start_time, stdout);
fputs (" -> ", stdout);
fputs (apoint_end_time, stdout);
fputs ("\n\t", stdout);
fputs (ra->mesg, stdout);
fputs ("\n", stdout);
if (print_note && ra->note) if (print_note && ra->note)
print_notefile (stdout, ra->note, 2); print_notefile (stdout, ra->note, 2);
apt = NULL; apt = NULL;

View File

@ -922,6 +922,7 @@ int fork_exec (int *, int *, const char *, char *const *);
int shell_exec (int *, int *, char *); int shell_exec (int *, int *, char *);
int child_wait (int *, int *, int); int child_wait (int *, int *, int);
void press_any_key (void); void press_any_key (void);
void print_apoint (const char *, long, struct apoint *);
/* vars.c */ /* vars.c */
extern int col, row; extern int col, row;

View File

@ -953,3 +953,52 @@ press_any_key (void)
fflush (stdin); fflush (stdin);
fputs ("\r\n", stdout); fputs ("\r\n", stdout);
} }
/* Print a formatted appointment to stdout. */
void
print_apoint (const char *format, long day, struct apoint *apt)
{
const char *p;
char str_start[HRMIN_SIZE], str_end[HRMIN_SIZE];
apoint_sec2str (apt, day, str_start, str_end);
for (p = format; *p; p++)
{
if (*p == '%') {
p++;
switch (*p)
{
case 's':
printf ("%ld", apt->start);
break;
case 'S':
printf ("%s", str_start);
break;
case 'd':
printf ("%ld", apt->dur);
break;
case 'e':
printf ("%ld", apt->start + apt->dur);
break;
case 'E':
printf ("%s", str_end);
break;
case 'm':
printf ("%s", apt->mesg);
break;
case 'n':
printf ("%s", apt->note);
break;
case '\0':
return;
break;
default:
putchar ('?');
break;
}
}
else
putchar (*p);
}
}