diff options
author | Lukas Fleischer <calcurse@cryptocrack.de> | 2012-05-21 11:42:07 +0200 |
---|---|---|
committer | Lukas Fleischer <calcurse@cryptocrack.de> | 2012-05-21 12:10:51 +0200 |
commit | 94a5d4cb1bc6a8f09995182dc9f07e4156255a8e (patch) | |
tree | f12c9caacfaa36d613de9a525feab007547ef38a | |
parent | cfd8ede2b3c7248bd3b78e71ef17bdc9eb819aae (diff) | |
download | calcurse-94a5d4cb1bc6a8f09995182dc9f07e4156255a8e.zip |
Fix default time format for multi-day appointments
As of commit 0791eaabca0fb1ef8a8675e47d701bbcde4d4a3f, we use strftime()
instead of apoint_sec2str() to format start and end dates of
appointments. "%H:%M" is the default strftime() format string used to
simulate apoint_sec2str(). However, apoint_sec2str() additionally checks
for intersection with the current day and displays "..:.." instead of
the actual time if the item doesn't start (end) at the current day. Add
an additional check to the new default time format and recreate the old
behavior for items starting before or ending after the current day.
Fixes BUG#3.
Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
-rw-r--r-- | src/utils.c | 16 |
1 files changed, 10 insertions, 6 deletions
diff --git a/src/utils.c b/src/utils.c index 5a38491..ad88117 100644 --- a/src/utils.c +++ b/src/utils.c @@ -1167,7 +1167,7 @@ static enum format_specifier parse_fs(const char **s, char *extformat) } /* Print a formatted date to stdout. */ -static void print_date(long date, const char *extformat) +static void print_date(long date, long day, const char *extformat) { char buf[BUFSIZ]; @@ -1177,10 +1177,14 @@ static void print_date(long date, const char *extformat) time_t t = date; struct tm *lt = localtime((time_t *) & t); - if (extformat[0] == '\0' || !strcmp(extformat, "default")) - strftime(buf, BUFSIZ, "%H:%M", lt); - else + if (extformat[0] == '\0' || !strcmp(extformat, "default")) { + if (date >= day && date <= day + DAYINSEC) + strftime(buf, BUFSIZ, "%H:%M", lt); + else + strftime(buf, BUFSIZ, "..:..", lt); + } else { strftime(buf, BUFSIZ, extformat, lt); + } printf("%s", buf); } @@ -1197,13 +1201,13 @@ void print_apoint(const char *format, long day, struct apoint *apt) p++; switch (parse_fs(&p, extformat)) { case FS_STARTDATE: - print_date(apt->start, extformat); + print_date(apt->start, day, extformat); break; case FS_DURATION: printf("%ld", apt->dur); break; case FS_ENDDATE: - print_date(apt->start + apt->dur, extformat); + print_date(apt->start + apt->dur, day, extformat); break; case FS_MESSAGE: printf("%s", apt->mesg); |