From a9b820abbe46764f23687eac1d1f62b145cd0962 Mon Sep 17 00:00:00 2001
From: Lukas Fleischer <calcurse@cryptocrack.de>
Date: Wed, 9 Nov 2011 18:48:09 +0100
Subject: 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>
---
 src/args.c     |  4 +---
 src/calcurse.h |  1 +
 src/utils.c    | 31 +++++++++++++++++++++++++++++++
 3 files changed, 33 insertions(+), 3 deletions(-)

(limited to 'src')

diff --git a/src/args.c b/src/args.c
index d51478a..d27a575 100644
--- a/src/args.c
+++ b/src/args.c
@@ -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);
     }
diff --git a/src/calcurse.h b/src/calcurse.h
index e4acab2..57260d4 100644
--- a/src/calcurse.h
+++ b/src/calcurse.h
@@ -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;
diff --git a/src/utils.c b/src/utils.c
index 4628798..6b4fa1d 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -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);
+    }
+}
-- 
cgit v1.2.3-70-g09d2