mirror of
https://git.notmuchmail.org/git/notmuch
synced 2024-11-24 11:58:10 +01:00
notmuch search: Add support for a --reverse option to reverse sort order.
Note that the difference between thread results in date order and thread results in reverse-date order is not simply a matter of reversing the final results. When sorting in date order, the threads are sorted by the oldest message in the thread. When sorting in reverse-date order, the threads are sorted by the newest message in the thread. This difference means that we might want an explicit option in the interface to reverse the order, (even though the default will be to display the inbox in date order and global searches in reverse-date order).
This commit is contained in:
parent
5f5e9b8662
commit
f7b49d658a
4 changed files with 19 additions and 7 deletions
|
@ -299,8 +299,8 @@ notmuch_query_create (notmuch_database_t *database,
|
|||
|
||||
/* Sort values for notmuch_query_set_sort */
|
||||
typedef enum {
|
||||
NOTMUCH_SORT_DATE_OLDEST_FIRST,
|
||||
NOTMUCH_SORT_DATE_NEWEST_FIRST,
|
||||
NOTMUCH_SORT_DATE,
|
||||
NOTMUCH_SORT_DATE_REVERSE,
|
||||
NOTMUCH_SORT_MESSAGE_ID
|
||||
} notmuch_sort_t;
|
||||
|
||||
|
|
|
@ -61,7 +61,7 @@ notmuch_query_create (notmuch_database_t *notmuch,
|
|||
|
||||
query->query_string = talloc_strdup (query, query_string);
|
||||
|
||||
query->sort = NOTMUCH_SORT_DATE_OLDEST_FIRST;
|
||||
query->sort = NOTMUCH_SORT_DATE;
|
||||
|
||||
return query;
|
||||
}
|
||||
|
@ -123,10 +123,10 @@ notmuch_query_search_messages (notmuch_query_t *query,
|
|||
}
|
||||
|
||||
switch (query->sort) {
|
||||
case NOTMUCH_SORT_DATE_OLDEST_FIRST:
|
||||
case NOTMUCH_SORT_DATE:
|
||||
enquire.set_sort_by_value (NOTMUCH_VALUE_TIMESTAMP, FALSE);
|
||||
break;
|
||||
case NOTMUCH_SORT_DATE_NEWEST_FIRST:
|
||||
case NOTMUCH_SORT_DATE_REVERSE:
|
||||
enquire.set_sort_by_value (NOTMUCH_VALUE_TIMESTAMP, TRUE);
|
||||
break;
|
||||
case NOTMUCH_SORT_MESSAGE_ID:
|
||||
|
|
|
@ -186,7 +186,7 @@ _notmuch_thread_create (void *ctx,
|
|||
thread->oldest = 0;
|
||||
thread->newest = 0;
|
||||
|
||||
notmuch_query_set_sort (thread_id_query, NOTMUCH_SORT_DATE_OLDEST_FIRST);
|
||||
notmuch_query_set_sort (thread_id_query, NOTMUCH_SORT_DATE);
|
||||
|
||||
for (messages = notmuch_query_search_messages (thread_id_query, 0, -1);
|
||||
notmuch_messages_has_more (messages);
|
||||
|
|
|
@ -34,6 +34,7 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
|
|||
time_t date;
|
||||
int i, first = 0, max_threads = -1;
|
||||
char *opt, *end;
|
||||
notmuch_sort_t sort = NOTMUCH_SORT_DATE;
|
||||
|
||||
for (i = 0; i < argc && argv[i][0] == '-'; i++) {
|
||||
if (strcmp (argv[i], "--") == 0) {
|
||||
|
@ -54,6 +55,11 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
|
|||
fprintf (stderr, "Invalid value for --max-threads: %s\n", opt);
|
||||
return 1;
|
||||
}
|
||||
} else if (strcmp (argv[i], "--reverse") == 0) {
|
||||
sort = NOTMUCH_SORT_DATE_REVERSE;
|
||||
} else {
|
||||
fprintf (stderr, "Unrecognized option: %s\n", argv[i]);
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -80,6 +86,8 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
|
|||
return 1;
|
||||
}
|
||||
|
||||
notmuch_query_set_sort (query, sort);
|
||||
|
||||
for (threads = notmuch_query_search_threads (query, first, max_threads);
|
||||
notmuch_threads_has_more (threads);
|
||||
notmuch_threads_advance (threads))
|
||||
|
@ -88,7 +96,11 @@ notmuch_search_command (void *ctx, int argc, char *argv[])
|
|||
|
||||
thread = notmuch_threads_get (threads);
|
||||
|
||||
if (sort == NOTMUCH_SORT_DATE)
|
||||
date = notmuch_thread_get_oldest_date (thread);
|
||||
else
|
||||
date = notmuch_thread_get_newest_date (thread);
|
||||
|
||||
relative_date = notmuch_time_relative_date (ctx, date);
|
||||
|
||||
printf ("thread:%s %12s [%d/%d] %s; %s",
|
||||
|
|
Loading…
Reference in a new issue