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:
parent
edad2f39db
commit
330ca4d3cb
20
src/args.c
20
src/args.c
@ -357,8 +357,6 @@ app_arg (int add_line, struct date *day, long date, int print_note,
|
||||
long today;
|
||||
unsigned print_date = 1;
|
||||
int app_found = 0;
|
||||
char apoint_start_time[HRMIN_SIZE];
|
||||
char apoint_end_time[HRMIN_SIZE];
|
||||
|
||||
if (date == 0)
|
||||
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);
|
||||
print_date = 0;
|
||||
}
|
||||
apoint_sec2str (apt, today, apoint_start_time, apoint_end_time);
|
||||
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);
|
||||
print_apoint (" - %S -> %E\n\t%m\n", today, apt);
|
||||
if (print_note && apt->note)
|
||||
print_notefile (stdout, apt->note, 2);
|
||||
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;
|
||||
}
|
||||
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);
|
||||
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)
|
||||
print_notefile (stdout, ra->note, 2);
|
||||
apt = NULL;
|
||||
|
@ -922,6 +922,7 @@ int fork_exec (int *, int *, const char *, char *const *);
|
||||
int shell_exec (int *, int *, char *);
|
||||
int child_wait (int *, int *, int);
|
||||
void press_any_key (void);
|
||||
void print_apoint (const char *, long, struct apoint *);
|
||||
|
||||
/* vars.c */
|
||||
extern int col, row;
|
||||
|
49
src/utils.c
49
src/utils.c
@ -953,3 +953,52 @@ press_any_key (void)
|
||||
fflush (stdin);
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user