Use a dynamic method to print events to stdout

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

Following format specifiers are supported:

* 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:48:09 +01:00
parent 330ca4d3cb
commit a9b820abbe
3 changed files with 33 additions and 3 deletions

View File

@ -409,9 +409,7 @@ app_arg (int add_line, struct date *day, long date, int print_note,
arg_print_date (today);
print_date = 0;
}
fputs (" * ", stdout);
fputs (ev->mesg, stdout);
fputs ("\n", stdout);
print_event (" * %m\n", today, ev);
if (print_note && ev->note)
print_notefile (stdout, ev->note, 2);
}

View File

@ -923,6 +923,7 @@ 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 *);
void print_event (const char *, long, struct event *);
/* vars.c */
extern int col, row;

View File

@ -1002,3 +1002,34 @@ print_apoint (const char *format, long day, struct apoint *apt)
putchar (*p);
}
}
/* Print a formatted event to stdout. */
void
print_event (const char *format, long day, struct event *ev)
{
const char *p;
for (p = format; *p; p++)
{
if (*p == '%') {
p++;
switch (*p)
{
case 'm':
printf ("%s", ev->mesg);
break;
case 'n':
printf ("%s", ev->note);
break;
case '\0':
return;
break;
default:
putchar ('?');
break;
}
}
else
putchar (*p);
}
}