From df1bc59812c87a006904b3aac0543f71cf5484e1 Mon Sep 17 00:00:00 2001 From: Lukas Fleischer Date: Mon, 18 Jan 2016 19:19:18 +0100 Subject: Make automatic selection of todo items smarter * Automatically focus new todo items after adding them to the list. * Keep selection when an item is moved (e.g. by changing its priority). * Focus the next item in the list when an item is removed. Signed-off-by: Lukas Fleischer --- src/todo.c | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'src/todo.c') diff --git a/src/todo.c b/src/todo.c index 6cdd0d5..970991a 100644 --- a/src/todo.c +++ b/src/todo.c @@ -167,19 +167,26 @@ void todo_flag(struct todo *t) * Returns the position into the linked list corresponding to the * given todo item. */ -int todo_get_position(struct todo *needle) +int todo_get_position(struct todo *needle, int skip_completed) { llist_item_t *i; int n = 0; - LLIST_FOREACH(&todolist, i) { - if (LLIST_TS_GET_DATA(i) == needle) - return n; - n++; + if (skip_completed) { + LLIST_FIND_FOREACH(&todolist, NULL, todo_is_uncompleted, i) { + if (LLIST_TS_GET_DATA(i) == needle) + return n; + n++; + } + } else { + LLIST_FOREACH(&todolist, i) { + if (LLIST_TS_GET_DATA(i) == needle) + return n; + n++; + } } - EXIT(_("todo not found")); - return -1; /* avoid compiler warnings */ + return -1; } /* Attach a note to a todo */ -- cgit v1.2.3-54-g00ecf