Add option to sort threads non-recursively.
authorTassilo Horn <tsdh@gnu.org>
Fri, 26 Jul 2013 13:38:08 +0000 (15:38 +0200)
committerTassilo Horn <tsdh@gnu.org>
Fri, 26 Jul 2013 13:38:08 +0000 (15:38 +0200)
* gnus-sum.el (gnus-sort-threads-recursively): New defcustom.
(gnus-sort-threads): Use it.

* gnus.texi (Sorting the Summary Buffer): Document new defcustom
`gnus-sort-threads-recursively'.

lisp/ChangeLog
lisp/gnus-sum.el
texi/ChangeLog
texi/gnus.texi

index a0b98be..ed8363e 100644 (file)
@@ -1,3 +1,8 @@
+2013-07-26  Tassilo Horn  <tsdh@gnu.org>
+
+       * gnus-sum.el (gnus-sort-threads-recursively): New defcustom.
+       (gnus-sort-threads): Use it.
+
 2013-07-25  Andreas Schwab  <schwab@linux-m68k.org>
 
        * gnus-art.el (gnus-button-url-regexp): Make it match url in which
index f3918b0..15cbb5a 100644 (file)
@@ -847,6 +847,13 @@ controls how articles are sorted."
                           (function :tag "other"))
                   (boolean :tag "Reverse order"))))
 
+(defcustom gnus-sort-threads-recursively t
+  "If non-nil, `gnus-thread-sort-functions' are applied recursively.
+Setting this to nil allows sorting high-score, recent,
+etc. threads to the top of the summary buffer while still
+retaining chronological old to new sorting order inside threads."
+  :group 'gnus-summary-sort
+  :type 'boolean)
 
 (defcustom gnus-thread-sort-functions '(gnus-thread-sort-by-number)
   "*List of functions used for sorting threads in the summary buffer.
@@ -4876,9 +4883,11 @@ If LINE, insert the rebuilt thread starting on line LINE."
     (gnus-message 8 "Sorting threads...")
     (prog1
        (condition-case nil
-           (let ((max-lisp-eval-depth (max max-lisp-eval-depth 5000)))
-             (gnus-sort-threads-recursive
-              threads (gnus-make-sort-function gnus-thread-sort-functions)))
+           (let ((max-lisp-eval-depth (max max-lisp-eval-depth 5000))
+                 (sort-func (gnus-make-sort-function gnus-thread-sort-functions)))
+             (if gnus-sort-threads-recursively
+                 (gnus-sort-threads-recursive threads sort-func)
+               (sort threads sort-func)))
          ;; Even after binding max-lisp-eval-depth, the recursive
          ;; sorter might fail for very long threads.  In that case,
          ;; try using a (less well-tested) non-recursive sorter.
index 25c0ec8..017d211 100644 (file)
@@ -1,3 +1,8 @@
+2013-07-26  Tassilo Horn  <tsdh@gnu.org>
+
+       * gnus.texi (Sorting the Summary Buffer): Document new defcustom
+       `gnus-sort-threads-recursively'.
+
 2013-07-19  Geoff Kuenning  <geoff@cs.hmc.edu>  (tiny change)
 
        * gnus.texi (Customizing Articles): Document function predicates.
index 85e9f95..2c399ff 100644 (file)
@@ -7394,6 +7394,11 @@ say something like:
         gnus-thread-sort-by-score))
 @end lisp
 
+By default, threads are sorted recursively, that is, first the roots,
+then all subthreads, and so on.  If you feel more like sorting only
+the roots, so that inside a thread the original chronological order is
+retained, you can set @code{gnus-sort-threads-recursively} to nil.
+
 @vindex gnus-thread-score-function
 The function in the @code{gnus-thread-score-function} variable (default
 @code{+}) is used for calculating the total score of a thread.  Useful