print_*(): Add format specifier to print notes

* Move print_notefile() from "src/args.c" to "src/utils.c".

* Add a "%N" format specifier to print_*(). This invokes
  print_notefile() and prints the content of an item's note file.

* src/args.c: Use the new format specifier instead of print_notefile()
  everywhere.

Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
This commit is contained in:
Lukas Fleischer 2011-11-11 10:16:50 +01:00
parent 349bd3f88b
commit f77f4647d1
2 changed files with 70 additions and 70 deletions

View File

@ -182,58 +182,6 @@ status_arg (void)
puts (_("calcurse is not running\n"));
}
/*
* Display note contents if one is asociated with the currently displayed item
* (to be used together with the '-a' or '-t' flag in non-interactive mode).
* Each line begins with nbtab tabs.
* Print "No note file found", if the notefile does not exists.
*
* (patch submitted by Erik Saule).
*/
static void
print_notefile (FILE *out, char *filename, int nbtab)
{
char path_to_notefile[BUFSIZ];
FILE *notefile;
char linestarter[BUFSIZ];
char buffer[BUFSIZ];
int i;
int printlinestarter = 1;
if (nbtab < BUFSIZ)
{
for (i = 0; i < nbtab; i++)
linestarter[i] = '\t';
linestarter[nbtab] = '\0';
}
else
linestarter[0] = '\0';
snprintf (path_to_notefile, BUFSIZ, "%s/%s", path_notes, filename);
notefile = fopen (path_to_notefile, "r");
if (notefile)
{
while (fgets (buffer, BUFSIZ, notefile) != 0)
{
if (printlinestarter)
{
fputs (linestarter, out);
printlinestarter = 0;
}
fputs (buffer, out);
if (buffer[strlen (buffer) - 1] == '\n')
printlinestarter = 1;
}
fputs ("\n", out);
file_close (notefile, __FILE_POS__);
}
else
{
fputs (linestarter, out);
fputs (_("No note file found\n"), out);
}
}
/*
* Print todo list and exit. If a priority number is given, then only todo
* then only todo items that have this priority will be displayed.
@ -271,9 +219,7 @@ todo_arg (int priority, int print_note, regex_t *regex)
if (priority == 0)
{
DISPLAY_TITLE;
print_todo ("%p. %m\n", todo);
if (print_note && todo->note)
print_notefile (stdout, todo->note, 1);
print_todo (print_note ? "%p. %m\n%N" : "%p. %m\n", todo);
}
}
else
@ -281,9 +227,7 @@ todo_arg (int priority, int print_note, regex_t *regex)
if (priority < 0 || todo->id == priority)
{
DISPLAY_TITLE;
print_todo ("%p. %m\n", todo);
if (print_note && todo->note)
print_notefile (stdout, todo->note, 1);
print_todo (print_note ? "%p. %m\n%N" : "%p. %m\n", todo);
}
}
}
@ -379,9 +323,7 @@ app_arg (int add_line, struct date *day, long date, int print_note,
arg_print_date (today);
print_date = 0;
}
print_recur_event (" * %m\n", today, re);
if (print_note && re->note)
print_notefile (stdout, re->note, 2);
print_recur_event (print_note ? " * %m\n%N" : " * %m\n", today, re);
}
LLIST_FIND_FOREACH_CONT (&eventlist, today, event_inday, i)
@ -401,9 +343,7 @@ app_arg (int add_line, struct date *day, long date, int print_note,
arg_print_date (today);
print_date = 0;
}
print_event (" * %m\n", today, ev);
if (print_note && ev->note)
print_notefile (stdout, ev->note, 2);
print_event (print_note ? " * %m\n%N" : " * %m\n", today, ev);
}
/* Same process is performed but this time on the appointments. */
@ -456,9 +396,8 @@ app_arg (int add_line, struct date *day, long date, int print_note,
arg_print_date (today);
print_date = 0;
}
print_apoint (" - %S -> %E\n\t%m\n", today, apt);
if (print_note && apt->note)
print_notefile (stdout, apt->note, 2);
print_apoint (print_note ? " - %S -> %E\n\t%m\n%N" :
" - %S -> %E\n\t%m\n", today, apt);
i = LLIST_TS_FIND_NEXT (i, today, apoint_inday);
}
else if (ra)
@ -475,9 +414,9 @@ 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 (" - %S -> %E\n\t%m\n", today, occurrence, ra);
if (print_note && ra->note)
print_notefile (stdout, ra->note, 2);
print_recur_apoint (print_note ? " - %S -> %E\n\t%m\n%N" :
" - %S -> %E\n\t%m\n", today,
occurrence, ra);
apt = NULL;
j = LLIST_TS_FIND_NEXT (j, today, recur_apoint_inday);
}

View File

@ -954,6 +954,58 @@ press_any_key (void)
fputs ("\r\n", stdout);
}
/*
* Display note contents if one is asociated with the currently displayed item
* (to be used together with the '-a' or '-t' flag in non-interactive mode).
* Each line begins with nbtab tabs.
* Print "No note file found", if the notefile does not exists.
*
* (patch submitted by Erik Saule).
*/
static void
print_notefile (FILE *out, char *filename, int nbtab)
{
char path_to_notefile[BUFSIZ];
FILE *notefile;
char linestarter[BUFSIZ];
char buffer[BUFSIZ];
int i;
int printlinestarter = 1;
if (nbtab < BUFSIZ)
{
for (i = 0; i < nbtab; i++)
linestarter[i] = '\t';
linestarter[nbtab] = '\0';
}
else
linestarter[0] = '\0';
snprintf (path_to_notefile, BUFSIZ, "%s/%s", path_notes, filename);
notefile = fopen (path_to_notefile, "r");
if (notefile)
{
while (fgets (buffer, BUFSIZ, notefile) != 0)
{
if (printlinestarter)
{
fputs (linestarter, out);
printlinestarter = 0;
}
fputs (buffer, out);
if (buffer[strlen (buffer) - 1] == '\n')
printlinestarter = 1;
}
fputs ("\n", out);
file_close (notefile, __FILE_POS__);
}
else
{
fputs (linestarter, out);
fputs (_("No note file found\n"), out);
}
}
/* Print a formatted appointment to stdout. */
void
print_apoint (const char *format, long day, struct apoint *apt)
@ -990,6 +1042,9 @@ print_apoint (const char *format, long day, struct apoint *apt)
case 'n':
printf ("%s", apt->note);
break;
case 'N':
print_notefile (stdout, apt->note, 1);
break;
case '\0':
return;
break;
@ -1021,6 +1076,9 @@ print_event (const char *format, long day, struct event *ev)
case 'n':
printf ("%s", ev->note);
break;
case 'N':
print_notefile (stdout, ev->note, 1);
break;
case '\0':
return;
break;
@ -1082,6 +1140,9 @@ print_todo (const char *format, struct todo *todo)
case 'n':
printf ("%s", todo->note);
break;
case 'N':
print_notefile (stdout, todo->note, 1);
break;
case '\0':
return;
break;