4.9.1.1 Loose Threads

gnus-summary-make-false-root

If non-nil, Gnus will gather all loose subtrees into one big tree and create a dummy root at the top. (Wait a minute. Root at the top? Yup.) Loose subtrees occur when the real root has expired, or you’ve read or killed the root in a previous session.

When there is no real root of a thread, Gnus will have to fudge something. This variable says what fudging method Gnus should use. There are four possible values:

adopt

Gnus will make the first of the orphaned articles the parent. This parent will adopt all the other articles. The adopted articles will be marked as such by pointy brackets (‘<>’) instead of the standard square brackets (‘[]’). This is the default method.

dummy

Gnus will create a dummy summary line that will pretend to be the parent. This dummy line does not correspond to any real article, so selecting it will just select the first real article after the dummy article. gnus-summary-dummy-line-format is used to specify the format of the dummy roots. It accepts only one format spec: ‘S’, which is the subject of the article. See Formatting Variables. If you want all threads to have a dummy root, even the non-gathered ones, set gnus-summary-make-false-root-always to t.

empty

Gnus won’t actually make any article the parent, but simply leave the subject field of all orphans except the first empty. (Actually, it will use gnus-summary-same-subject as the subject (see Summary Buffer Format).)

none

Don’t make any article parent at all. Just gather the threads and display them after one another.

nil

Don’t gather loose threads.

gnus-summary-gather-subject-limit

Loose threads are gathered by comparing subjects of articles. If this variable is nil, Gnus requires an exact match between the subjects of the loose threads before gathering them into one big super-thread. This might be too strict a requirement, what with the presence of stupid newsreaders that chop off long subject lines. If you think so, set this variable to, say, 20 to require that only the first 20 characters of the subjects have to match. If you set this variable to a really low number, you’ll find that Gnus will gather everything in sight into one thread, which isn’t very helpful.

If you set this variable to the special value fuzzy, Gnus will use a fuzzy string comparison algorithm on the subjects (see Fuzzy Matching).

gnus-simplify-subject-fuzzy-regexp

This can either be a regular expression or list of regular expressions that match strings that will be removed from subjects if fuzzy subject simplification is used.

gnus-simplify-ignored-prefixes

If you set gnus-summary-gather-subject-limit to something as low as 10, you might consider setting this variable to something sensible:

(setq gnus-simplify-ignored-prefixes
      (concat
       "\\`\\[?\\("
       (regexp-opt '("looking"
                     "wanted" "followup" "summary" "summary of"
                     "help" "query" "problem" "question"
                     "answer" "reference" "announce"
                     "How can I" "How to" "Comparison of"
                     ;; ...
                     ))
       "\\)\\s *\\("
       (regexp-opt '("for" "for reference" "with" "about"))
       "\\)?\\]?:?[ \t]*"))

All words that match this regexp will be removed before comparing two subjects.

gnus-simplify-subject-functions

If non-nil, this variable overrides gnus-summary-gather-subject-limit. This variable should be a list of functions to apply to the Subject string iteratively to arrive at the simplified version of the string.

Useful functions to put in this list include:

gnus-simplify-subject-re

Strip the leading ‘Re:’.

gnus-simplify-subject-fuzzy

Simplify fuzzily.

gnus-simplify-whitespace

Remove excessive whitespace.

gnus-simplify-all-whitespace

Remove all whitespace.

You may also write your own functions, of course.

gnus-summary-gather-exclude-subject

Since loose thread gathering is done on subjects only, that might lead to many false hits, especially with certain common subjects like ‘’ and ‘(none)’. To make the situation slightly better, you can use the regexp gnus-summary-gather-exclude-subject to say what subjects should be excluded from the gathering process.
The default is ‘^ *$\\|^(none)$’.

gnus-summary-thread-gathering-function

Gnus gathers threads by looking at Subject headers. This means that totally unrelated articles may end up in the same “thread”, which is confusing. An alternate approach is to look at all the Message-IDs in all the References headers to find matches. This will ensure that no gathered threads ever include unrelated articles, but it also means that people who have posted with broken newsreaders won’t be gathered properly. The choice is yours—plague or cholera:

gnus-gather-threads-by-subject

This function is the default gathering function and looks at Subjects exclusively.

gnus-gather-threads-by-references

This function looks at References headers exclusively.

If you want to test gathering by References, you could say something like:

(setq gnus-summary-thread-gathering-function
      'gnus-gather-threads-by-references)