aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLukas Fleischer <calcurse@cryptocrack.de>2014-08-06 15:48:02 +0200
committerLukas Fleischer <calcurse@cryptocrack.de>2014-08-06 15:48:02 +0200
commitf9208c0b3dcb6cb53dbad734871aeead576ad06b (patch)
treee98f651101cf707268af083357b31b6e02925efb
parentc2dc3109ae23fbdb4ee3951317bd1fbf1ec846e2 (diff)
downloadcalcurse-f9208c0b3dcb6cb53dbad734871aeead576ad06b.tar.gz
calcurse-f9208c0b3dcb6cb53dbad734871aeead576ad06b.zip
Use backwards-compatible out format for queries
Print TODO items before appointments in query outputs and add an empty line between the list of TODO items and the list of appointments. This is how items were printed before the big parser refactoring. Also, add a test to ensure we do not unintentionally change that format in the future. Signed-off-by: Lukas Fleischer <calcurse@cryptocrack.de>
-rw-r--r--src/args.c23
-rw-r--r--test/Makefile.am2
-rw-r--r--test/data/apts-filter-0018
-rwxr-xr-xtest/filter-001.sh28
4 files changed, 51 insertions, 10 deletions
diff --git a/src/args.c b/src/args.c
index 4a022b5..a2fbf81 100644
--- a/src/args.c
+++ b/src/args.c
@@ -217,18 +217,18 @@ static void status_arg(void)
puts(_("calcurse is not running\n"));
}
-/* Print TODO list and exit. */
-static void todo_arg(const char *format, int *limit,
- struct item_filter *filter)
+/* Print TODO list and return the number of printed items. */
+static int todo_arg(const char *format, int *limit, struct item_filter *filter)
{
const char *titlestr =
filter->completed ? _("completed tasks:\n") : _("to do:\n");
int title = 1;
+ int n = 0;
llist_item_t *i;
LLIST_FOREACH(&todolist, i) {
if (*limit == 0)
- return;
+ break;
struct todo *todo = LLIST_TS_GET_DATA(i);
if (title) {
@@ -236,8 +236,11 @@ static void todo_arg(const char *format, int *limit,
title = 0;
}
print_todo(format, todo);
+ n++;
(*limit)--;
}
+
+ return n;
}
/* Print the next appointment within the upcoming 24 hours. */
@@ -286,11 +289,11 @@ static void arg_print_date(long date)
* If no end date is given (-1), a range of 1 day is considered.
*/
static void
-date_arg_from_to(long from, long to, const char *fmt_apt, const char *fmt_rapt,
- const char *fmt_ev, const char *fmt_rev, int *limit)
+date_arg_from_to(long from, long to, int add_line, const char *fmt_apt,
+ const char *fmt_rapt, const char *fmt_ev, const char *fmt_rev,
+ int *limit)
{
long date;
- int add_line = 0;
for (date = from; date < to; date += DAYINSEC) {
day_store_items(date, 0);
@@ -659,9 +662,9 @@ int parse_args(int argc, char **argv)
config_load(); /* To get output date format. */
io_load_app(&filter);
io_load_todo(&filter);
- date_arg_from_to(from, to, fmt_apt, fmt_rapt, fmt_ev, fmt_rev,
- &limit);
- todo_arg(fmt_todo, &limit, &filter);
+ int add_line = todo_arg(fmt_todo, &limit, &filter);
+ date_arg_from_to(from, to, add_line, fmt_apt, fmt_rapt, fmt_ev,
+ fmt_rev, &limit);
} else if (next) {
io_check_file(path_apts);
io_load_app(&filter);
diff --git a/test/Makefile.am b/test/Makefile.am
index 5e1bfca..d036a1d 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -41,6 +41,7 @@ TESTS = \
event-004.sh \
event-005.sh \
event-006.sh \
+ filter-001.sh \
ical-001.sh \
ical-002.sh \
ical-003.sh \
@@ -98,6 +99,7 @@ EXTRA_DIST = \
data/apts-event-004 \
data/apts-event-005 \
data/apts-event-006 \
+ data/apts-filter-001 \
data/apts-recur \
data/conf \
data/ical-001.ical \
diff --git a/test/data/apts-filter-001 b/test/data/apts-filter-001
new file mode 100644
index 0000000..59fe31c
--- /dev/null
+++ b/test/data/apts-filter-001
@@ -0,0 +1,8 @@
+02/22/2013 [1] Event 1
+02/23/2013 [1] Event 2
+02/24/2013 [1] Event 3
+02/25/2013 [1] Event 4
+02/22/2013 @ 10:00 -> 02/22/2013 @ 12:00 |Appointment 1
+02/23/2013 @ 10:00 -> 02/23/2013 @ 12:00 |Appointment 2
+02/24/2013 @ 10:00 -> 02/24/2013 @ 12:00 |Appointment 3
+02/25/2013 @ 10:00 -> 02/25/2013 @ 12:00 |Appointment 4
diff --git a/test/filter-001.sh b/test/filter-001.sh
new file mode 100755
index 0000000..2dcbb25
--- /dev/null
+++ b/test/filter-001.sh
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+. "${TEST_INIT:-./test-init.sh}"
+
+if [ "$1" = 'actual' ]; then
+ "$CALCURSE" --read-only -D "$DATA_DIR"/ -c "$DATA_DIR/apts-filter-001" \
+ -t9 -s02/23/2013 -r2
+elif [ "$1" = 'expected' ]; then
+ cat <<EOD
+to do:
+9. Gloriously slams
+9. Beefburger's
+9. Seasons
+
+02/23/13:
+ * Event 2
+ - 10:00 -> 12:00
+ Appointment 2
+
+02/24/13:
+ * Event 3
+ - 10:00 -> 12:00
+ Appointment 3
+EOD
+else
+ ./run-test "$0"
+fi
+