[PATCH 1/4] cli: show: allow sort order to be specified

Subject: [PATCH 1/4] cli: show: allow sort order to be specified

Date: Fri, 26 Jun 2015 23:50:32 +0100

To: notmuch@notmuchmail.org

Cc:

From: Mark Walters


This allows the sort to be specified in the notmuch show command with
a --sort option.

Note that individual threads are still displayed in oldest first
order, but if the search has multiple threads then these are ordered
according to this option. This should mean that most callers won't
notice the option (e.g. the emacs show mode) as they only call show on
individual threads, but other users, particularly the emacs tree view,
can use it.
---
 doc/man1/notmuch-show.rst | 17 +++++++++++++++++
 notmuch-show.c            |  8 ++++++++
 2 files changed, 25 insertions(+)

diff --git a/doc/man1/notmuch-show.rst b/doc/man1/notmuch-show.rst
index 9eb5198..7717b08 100644
--- a/doc/man1/notmuch-show.rst
+++ b/doc/man1/notmuch-show.rst
@@ -97,6 +97,23 @@ Supported options for **show** include
         intended for programs that invoke **notmuch(1)** internally. If
         omitted, the latest supported version will be used.
 
+    ``--sort=``\ (**newest-first**\ \|\ **oldest-first**)
+        This option can be used to present results in either
+        chronological order (**oldest-first**) or reverse chronological
+        order (**newest-first**).
+
+        Note: This only affects the order of messages in different
+        threads: messages inside a thread will always be presented in
+        thread order.  However, the order of the threads will be distinct
+        between these two options (beyond being simply reversed). When
+        sorting by **oldest-first** the threads will be sorted by the
+        oldest message in each thread, but when sorting by
+        **newest-first** the threads will be sorted by the newest
+        message in each thread.
+
+        By default, results will be displayed in reverse chronological
+        order, (that is, the newest results will be displayed first).
+
     ``--part=N``
         Output the single decoded MIME part N of a single message. The
         search terms must match only a single message. Message parts are
diff --git a/notmuch-show.c b/notmuch-show.c
index b80933a..ec9a915 100644
--- a/notmuch-show.c
+++ b/notmuch-show.c
@@ -1090,6 +1090,7 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
     int format_sel = NOTMUCH_FORMAT_NOT_SPECIFIED;
     int exclude = EXCLUDE_TRUE;
     int entire_thread = ENTIRE_THREAD_DEFAULT;
+    notmuch_sort_t sort = NOTMUCH_SORT_NEWEST_FIRST;
 
     notmuch_opt_desc_t options[] = {
 	{ NOTMUCH_OPT_KEYWORD, &format_sel, "format", 'f',
@@ -1100,10 +1101,15 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
 				  { "raw", NOTMUCH_FORMAT_RAW },
 				  { 0, 0 } } },
 	{ NOTMUCH_OPT_INT, &notmuch_format_version, "format-version", 0, 0 },
+	{ NOTMUCH_OPT_KEYWORD, &sort, "sort", 's',
+	  (notmuch_keyword_t []){ { "oldest-first", NOTMUCH_SORT_OLDEST_FIRST },
+				  { "newest-first", NOTMUCH_SORT_NEWEST_FIRST },
+				  { 0, 0 } } },
 	{ NOTMUCH_OPT_KEYWORD, &exclude, "exclude", 'x',
 	  (notmuch_keyword_t []){ { "true", EXCLUDE_TRUE },
 				  { "false", EXCLUDE_FALSE },
 				  { 0, 0 } } },
+
 	{ NOTMUCH_OPT_KEYWORD, &entire_thread, "entire-thread", 't',
 	  (notmuch_keyword_t []){ { "true", ENTIRE_THREAD_TRUE },
 				  { "false", ENTIRE_THREAD_FALSE },
@@ -1233,6 +1239,8 @@ notmuch_show_command (notmuch_config_t *config, int argc, char *argv[])
 	size_t search_exclude_tags_length;
 	unsigned int i;
 
+	notmuch_query_set_sort (query, sort);
+
 	search_exclude_tags = notmuch_config_get_search_exclude_tags
 	    (config, &search_exclude_tags_length);
 	for (i = 0; i < search_exclude_tags_length; i++)
-- 
2.1.4


Thread: