File: mh-thread.el.html

The threading portion of this files tries to implement the algorithm described at:
  https://www.jwz.org/doc/threading.html
It also begins to implement the threading section of the IMAP - SORT and THREAD Extensions RFC at:
  https://tools.ietf.org/html/rfc5256
The implementation lacks the reference and subject canonicalization of the RFC.

In the presentation buffer, children messages are shown indented with either [ ] or < > around them. Square brackets ([ ]) denote that the algorithm can point out some headers which when taken together implies that the unindented message is an ancestor of the indented message. If no such proof exists then angles (< >) are used.

If threading is slow on your machine, compile this file. Of all the files in MH-E, this one really benefits from compilation.

Some issues and problems are as follows:

 (1) Scan truncates the fields at length 512. So longer
     references: headers get mutilated. The same kind of MH
     format string works when composing messages. Is there a way
     to avoid this? My scan command is as follows:
       scan +folder -width 10000 \
            -format "%(msg)\\n%{message-id}\\n%{references}\\n%{subject}\\n"
     I would really appreciate it if someone would help me with this.

 (2) Implement heuristics to recognize message identifiers in
     In-Reply-To: header. Right now it just assumes that the last
     text between angles (< and >) is the message identifier.
     There is the chance that this will incorrectly use an email
     address like a message identifier.

 (3) Error checking of found message identifiers should be done.

 (4) Since this breaks the assumption that message indices
     increase as one goes down the buffer, the binary search
     based mh-goto-msg doesn't work. I have a simpler replacement
     which may be less efficient.

 (5) Better canonicalizing for message identifier and subject strings.

Defined variables (10)

mh-message-id-regexpRegexp to recognize whether a string is a message identifier.
mh-thread-body-widthWidth of scan substring that contains subject and body of message.
mh-thread-duplicatesHash table used to associate messages with the same message identifier.
mh-thread-historyVariable to remember the transformations to the thread tree.
mh-thread-id-hashHash table used to canonicalize message identifiers.
mh-thread-id-index-mapTable to look up message index number from message identifier.
mh-thread-id-tableThread ID table maps from message identifiers to message containers.
mh-thread-index-id-mapTable to look up message identifier from message index.
mh-thread-subject-container-hashHash table used to group messages by subject.
mh-thread-subject-hashHash table used to canonicalize subject strings.

Defined functions (63)

copy-mh-thread-container(ARG)
copy-mh-thread-message(ARG)
mh-container-children(mh-container-children X)
mh-container-children--inliner(INLINE--FORM X)
mh-container-message(mh-container-message X)
mh-container-message--inliner(INLINE--FORM X)
mh-container-parent(mh-container-parent X)
mh-container-parent--inliner(INLINE--FORM X)
mh-container-real-child-p(mh-container-real-child-p X)
mh-container-real-child-p--inliner(INLINE--FORM X)
mh-message-id(mh-message-id X)
mh-message-id--inliner(INLINE--FORM X)
mh-message-references(mh-message-references X)
mh-message-references--inliner(INLINE--FORM X)
mh-message-subject(mh-message-subject X)
mh-message-subject--inliner(INLINE--FORM X)
mh-message-subject-re-p(mh-message-subject-re-p X)
mh-message-subject-re-p--inliner(INLINE--FORM X)
mh-thread-add-link(PARENT CHILD &optional AT-END-P)
mh-thread-add-spaces(COUNT)
mh-thread-ancestor(&optional THREAD-ROOT-FLAG)
mh-thread-ancestor-p(ANCESTOR SUCCESSOR)
mh-thread-canonicalize-id(ID)
mh-thread-container-p(X)
mh-thread-container-p--inliner(INLINE--FORM X)
mh-thread-container-subject(CONTAINER)
mh-thread-current-indentation-level()
mh-thread-delete()
mh-thread-find-children()
mh-thread-find-msg-subject(MSG)
mh-thread-folder()
mh-thread-forget-message(INDEX)
mh-thread-generate(FOLDER MSG-LIST)
mh-thread-generate-scan-lines(TREE LEVEL)
mh-thread-get-message(ID SUBJECT-RE-P SUBJECT REFS)
mh-thread-get-message-container(MESSAGE)
mh-thread-group-by-subject(ROOTS)
mh-thread-id-container(ID)
mh-thread-immediate-ancestor()
mh-thread-inc(FOLDER START-POINT)
mh-thread-initialize()
mh-thread-initialize-hash(VAR TEST)
mh-thread-make-container
mh-thread-make-container--cmacro
mh-thread-make-message
mh-thread-make-message--cmacro
mh-thread-message-p(X)
mh-thread-message-p--inliner(INLINE--FORM X)
mh-thread-next-sibling(&optional PREVIOUS-FLAG)
mh-thread-parse-scan-line(&optional STRING)
mh-thread-previous-sibling()
mh-thread-print-scan-lines(THREAD-TREE)
mh-thread-process-in-reply-to(REPLY-TO-HEADER)
mh-thread-prune-containers(ROOTS)
mh-thread-prune-subject(SUBJECT)
mh-thread-refile(FOLDER)
mh-thread-remove-parent-link(CHILD)
mh-thread-rewind-pruning()
mh-thread-set-tables(FOLDER)
mh-thread-sort-containers(CONTAINERS)
mh-thread-update-id-index-maps(ID INDEX)
mh-thread-update-scan-line-map(MSG NOTATION OFFSET)
mh-toggle-threads()

Defined faces (0)