;ELC   
;;; Compiled by jmorzins@kamp-krusty.mit.edu on Mon Oct  3 10:37:28 2005
;;; from file /afs/sipb/contrib/emacs/packages/mh-e-7.82/mh-seq.el
;;; in Emacs version 21.4.1
;;; with bytecomp version 2.85.4.1
;;; with all optimizations.

;;; This file uses dynamic docstrings, first added in Emacs 19.29.
(if (and (boundp 'emacs-version)
	 (< (aref emacs-version (1- (length emacs-version))) ?A)
	 (or (and (boundp 'epoch::version) epoch::version)
	     (string-lessp emacs-version "19.29")))
    (error "`mh-seq.el' was compiled for Emacs 19.29 or later"))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


(byte-code "\301\302!\210\301\303!\210\304B\301\207" [current-load-list require cl mh-e tool-bar-mode] 2)
(defalias 'mh-thread-make-message #[(&rest #1=#:--rest--2970) "\306>A@\307>A@\310>\206 \311A@\312>A@\203H @\313>\2031 AA\211\202 \314>A@\203? \315\211\202 \316\317@\"\210\202 )\320	\n\f\257,\207" [#1# id references subject subject-re-p #2=#:--keys--2971 :id :references :subject (nil "") :subject-re-p (:id :references :subject :subject-re-p :allow-other-keys) :allow-other-keys nil error "Keyword argument %s not one of (:id :references :subject :subject-re-p)" mh-thread-message] 6])
(defalias 'mh-thread-message-p #[(arg) ":\205	 @\301=\207" [arg mh-thread-message] 2])
(defalias 'mh-message-id '(macro . #[(z) "\301\302E\207" [z nth 1] 3]))
(defalias 'mh-message-references '(macro . #[(z) "\301\302E\207" [z nth 2] 3]))
(defalias 'mh-message-subject '(macro . #[(z) "\301\302E\207" [z nth 3] 3]))
(defalias 'mh-message-subject-re-p '(macro . #[(z) "\301\302E\207" [z nth 4] 3]))
(defalias 'mh-thread-make-container #[(&rest #1=#:--rest--2975) "\306>A@\307>A@\310>A@\311>\206 \312A@\203H @\313>\2031 AA\211\202 \314>A@\203? \315\211\202 \316\317@\"\210\202 )\320	\n\f\257,\207" [#1# message parent children real-child-p #2=#:--keys--2976 :message :parent :children :real-child-p (nil t) (:message :parent :children :real-child-p :allow-other-keys) :allow-other-keys nil error "Keyword argument %s not one of (:message :parent :children :real-child-p)" mh-thread-container] 6])
(defalias 'mh-thread-container-p #[(arg) ":\205	 @\301=\207" [arg mh-thread-container] 2])
(defalias 'mh-container-message '(macro . #[(z) "\301\302E\207" [z nth 1] 3]))
(defalias 'mh-container-parent '(macro . #[(z) "\301\302E\207" [z nth 2] 3]))
(defalias 'mh-container-children '(macro . #[(z) "\301\302E\207" [z nth 3] 3]))
(defalias 'mh-container-real-child-p '(macro . #[(z) "\301\302E\207" [z nth 4] 3]))
#@44 Name of seq to which a msg was last added.
(defvar mh-last-seq-used nil (#$ . 2589))
#@66 Saved value of `mh-mode-line-annotation' when narrowed to a seq.
(defvar mh-non-seq-mode-line-annotation nil (#$ . 2680))
#@53 Hashtable used to canonicalize message identifiers.
(defvar mh-thread-id-hash nil (#$ . 2808))
#@49 Hashtable used to canonicalize subject strings.
(defvar mh-thread-subject-hash nil (#$ . 2909))
#@70 Thread ID table maps from message identifiers to message containers.
(defvar mh-thread-id-table nil (#$ . 3011))
#@64 Table to look up message index number from message identifier.
(defvar mh-thread-id-index-map nil (#$ . 3130))
#@57 Table to look up message identifier from message index.
(defvar mh-thread-index-id-map nil (#$ . 3247))
#@57 Map of message index to various parts of the scan line.
(defvar mh-thread-scan-line-map nil (#$ . 3357))
#@130 Old map of message index to various parts of the scan line.
This is the original map that is stored when the folder is narrowed.
(defvar mh-thread-scan-line-map-stack nil (#$ . 3469))
#@46 Hashtable used to group messages by subject.
(defvar mh-thread-subject-container-hash nil (#$ . 3659))
#@72 Hashtable used to associate messages with the same message identifier.
(defvar mh-thread-duplicates nil (#$ . 3768))
#@289 Variable to remember the transformations to the thread tree.
When new messages are added, these transformations are rewound, then the
links are added from the newly seen messages. Finally the transformations are
redone to get the new thread tree. This makes incremental threading easier.
(defvar mh-thread-history nil (#$ . 3892))
#@68 Width of scan substring that contains subject and body of message.
(defvar mh-thread-body-width nil (#$ . 4229))
(byte-code "\300\301!\210\300\302!\210\300\303!\210\300\304!\210\300\305!\210\300\306!\210\300\307!\210\300\310!\210\300\311!\210\300\312!\207" [make-variable-buffer-local mh-thread-id-hash mh-thread-subject-hash mh-thread-id-table mh-thread-id-index-map mh-thread-index-id-map mh-thread-scan-line-map mh-thread-scan-line-map-stack mh-thread-subject-container-hash mh-thread-duplicates mh-thread-history] 2)
#@22 Delete the SEQUENCE.
(defalias 'mh-delete-seq #[(sequence) "\306!\307!	C\247\203# \310\311\211#\203\331 \312\"\210)\202\331 :\203b @\247\203b A\247\203b \212@b\210\313 \210`AX\203^ m\204^ \314!\203X \315\311!\312\"\210)\316y\210\202< )\202\331 \203q 9\203q \306!\202~ ;\203} \317	\"\202~ \320 \211\321\211\203\241 @\322\311#\210A\211\204\215 *\212eb\210\313 \210`dX\203\330 m\204\330 \314!\203\322 \315\311! \323 \"\203\321  \312\"\210))\316y\210\202\251 +\324\325\"\210\326!\210!\203\357 \327\n\330\f\"\"\"=\205 \331 \205 \332\333\311\n#+\207" [sequence mh-current-folder folders-changed internal-flag msg-list msg mh-seq-to-msgs mh-internal-seq mh-goto-msg t mh-remove-sequence-notation beginning-of-line looking-at mh-get-msg-num 1 mh-translate-range make-hash-table nil cl-puthash gethash mh-undefine-sequence ("all") mh-delete-seq-locally append mh-index-delete-from-sequence mh-speed-flists-active-p apply mh-speed-flists mh-scan-valid-regexp #1=#:seq-hash-table #2=#:msgs #3=#:--dolist-temp--2977 v mh-index-data mh-unseen-seq] 6 (#$ . 4756) (list (mh-read-seq-default "Delete" t))])
(byte-code "\301B\301\207" [current-load-list view-exit-action] 2)
#@57 List the sequences defined in the folder being visited.
(defalias 'mh-list-sequences #[nil "	\n\306\220\212q\210\307 \210\310\311!\210\312\313\261\210\f\f\2032 \314\f\211A@@!G]\202 \315\\)\f\203\231 \f@@\316\317\320\f@A!\321\"!\322 !\323\211\324\"!\"\211c\210 \203\216 \323\325 \211A @\"\"i\"G\\\326 Y\203\206 \327c\210\323\211\330G\"\331\"c\210\"c\210)\202\\ \327c\210+\fA\211\204; eb\210\332\333!\210\334#\310\335!)\221,\207" [mh-current-folder mh-sequences-buffer mh-seq-list max-len seq-list temp-buffer 0 erase-buffer message "Listing sequences ..." "Sequences in folder " ":\n" symbol-name 2 mh-coalesce-msg-list sort copy-sequence < nil format "%%%ss:" " %s" window-width "\n" "%%%ss" "" view-mode 1 kill-buffer "Listing sequences...done" folder name-spec sorted-seq-msgs name next-element view-exit-action] 7 (#$ . 5985) nil])
#@142 Display the sequences in which the current message appears.
Use a prefix argument to display the sequences in which another MESSAGE
appears.
(defalias 'mh-msg-is-in-seq #[(message) "\204 \306\307!	\310\307\310\n:\2033 \n@A\235\203( @\310\211\202) \307\2033 \nA\211\202 \f?\2059 ,\211?\205E \235\300\311\203W \312\313\"\202c \203b \312\314!\202c \315\316\317\320\321\307\"!\322#$*\207" [message mh-refile-list #1=#:G2982 seq #2=#:G2983 #3=#:G2984 mh-get-msg-num t nil "Message %d%s is in sequences: %s" format " (to be refiled to %s)" " (to be deleted)" "" mapconcat concat mh-list-to-string mh-seq-containing-msg " " dest-folder mh-delete-list deleted-flag] 11 (#$ . 6863) "P"])
(byte-code "\301B\301\207" [current-load-list tool-bar-map] 2)
#@122 Restrict display of this folder to just messages in SEQUENCE.
Use \<mh-folder-mode-map>\[mh-widen] to undo this command.
(defalias 'mh-narrow-to-seq #[(sequence) "\306 \307\211\310!\203\215 \311 \210d\312\307!#$B$\313\314\315\"#\316!\210\317e\"%B%e|\210\320 \210\321 \210\f\203D \322\f\323\211#\210\324\325!\210&\326!&\327 \210\330\307!\210\331\332!\203\202 \203\202 \333\334!'L\210\335\336(!!\203\202 \212\336(!q\210\333\334!)L\210)\337*B\211**\202\223 \340\341\326!\"\342\n!\210+\207" [buffer-file-name buffer-read-only mh-folder-updating-mod-flag sequence msg-at-cursor eob buffer-modified-p nil mh-seq-to-msgs mh-remove-all-notation mh-get-msg-num make-hash-table :test eql mh-copy-seq-to-eob buffer-substring-no-properties mh-notate-deleted-and-refiled mh-notate-cur mh-goto-msg t make-variable-buffer-local mh-non-seq-mode-line-annotation symbol-name mh-make-folder-mode-line mh-recenter boundp tool-bar-mode make-local-variable tool-bar-map buffer-live-p get-buffer widen error "No messages in sequence `%s'" mh-set-folder-modified-p mh-thread-scan-line-map mh-thread-scan-line-map-stack mh-folder-view-stack mh-mode-line-annotation mh-folder-seq-tool-bar-map mh-show-buffer mh-show-seq-tool-bar-map mh-view-ops] 4 (#$ . 7645) (list (mh-read-seq "Narrow to" t))])
#@120 Add RANGE to SEQUENCE.

Check the documentation of `mh-interactive-range' to see how RANGE is read in
interactive use.
(defalias 'mh-put-msg-in-seq #[(range sequence) "\306!\204 \307\310\"\210\311!\312!AC\313!\314\315\316$\210\247\203D \317\316\211#\203\211 \n>\204@ \320 	\"\210)\202:\203\213 @\247\203\213 A\247\203\213 \212@b\210\321 \210`AX\203\207 m\204\207 \322!!\203\201 \323\316!\211 \n>\204\200 \320 	\"\210)\324y\210\202] )\202\203\232 9\203\232 \325!\202\247 ;\203\246 \326\"\202\247 \327 \"\211#\315$\211%\203\315 %@$\330$\316\"#\210%A\211%\204\267 *\212eb\210\321 \210`dX\203\fm\204\f\322!!\203\323\316!&\331&\"\"\203&\211 \n>\204\320 	\"\210))\324y\210\202\325 +	\204'(\203\"\332\f\333\"\")=\2053\334 \2053\335\336\316\f#,\207" [sequence internal-seq-flag original-msgs mh-current-folder folders range mh-valid-seq-p error "Can't put message in invalid sequence `%s'" mh-internal-seq mh-find-seq mh-range-to-msg-list mh-add-msgs-to-seq nil t mh-goto-msg mh-add-sequence-notation beginning-of-line looking-at mh-get-msg-num 1 mh-seq-to-msgs mh-translate-range make-hash-table cl-puthash gethash append mh-index-add-to-sequence mh-speed-flists-active-p apply mh-speed-flists msg-list m mh-scan-valid-regexp #1=#:seq-hash-table #2=#:msgs msg #3=#:--dolist-temp--2985 v mh-last-seq-used mh-index-data mh-unseen-seq] 6 (#$ . 8952) (list (mh-interactive-range "Add messages from") (mh-read-seq-default "Add to" nil))])
#@89 Check if the view change operation can be performed.
OP is one of 'widen and 'unthread.
(defalias 'mh-valid-view-change-operation-p #[(op) "@	=\203 \211A@\207\302\207" [mh-view-ops op nil] 2 (#$ . 10465)])
#@97 Restore the previous limit.
If optional prefix argument ALL-FLAG is non-nil, remove all limits.
(defalias 'mh-widen #[(&optional all-flag) "\306\307!	\203\247 \n\203% A\203 A\211\202 @\310=\203I A\202I \311\310!\204I \310>\203E @\310=\204? A\211\2022 A\202I \312\313!\210\n\203e \fA\203Y \fA\211\202N 	A\203e 	A\211\202Z \f\211A@\314 \307\211ed|\210	\211A@c\210\315 \210 \316 \210\317!\210+\203\232 \320\321\211#\210\322 \210\323 \210\324 \210\325\307!\210)	?\205\326 \326\327!\205\326 \205\326 \330\331!!L\210\332\333\"!!\205\326 \212\333\"!q\210\330\331!#L)\207" [msg mh-folder-view-stack all-flag mh-view-ops mh-thread-scan-line-map-stack mh-thread-scan-line-map mh-get-msg-num nil widen mh-valid-view-change-operation-p error "Widening is not applicable" buffer-modified-p mh-remove-all-notation mh-make-folder-mode-line mh-set-folder-modified-p mh-goto-msg t mh-notate-deleted-and-refiled mh-notate-user-sequences mh-notate-cur mh-recenter boundp tool-bar-mode make-local-variable tool-bar-map buffer-live-p get-buffer buffer-file-name buffer-read-only mh-folder-updating-mod-flag mh-non-seq-mode-line-annotation mh-mode-line-annotation mh-folder-tool-bar-map mh-show-buffer mh-show-tool-bar-map] 5 (#$ . 10681) "P"])
#@165 Notate messages marked for deletion or refiling.
Messages to be deleted are given by `mh-delete-list' while messages to be
refiled are present in `mh-refile-list'.
(defalias 'mh-notate-deleted-and-refiled #[nil "\306 \306 \n\307\211\203 \f@\310\311#\210\fA\211\204 *\307\211\203U @\211A\307\211\203K @\310\311	#\210A\211\2048 *A\211\204) *\212eb\210\312 \210`dX\205\233 m?\205\233 \313!\203\225 \314\311!\315	\"\203\205 \316\307#\210\202\224 \315\"\203\224 \316\307#\210)\317y\210\202] +\207" [deleted-hash refiled-hash mh-delete-list msg #1=#:--dolist-temp--2990 mh-refile-list make-hash-table nil cl-puthash t beginning-of-line looking-at mh-get-msg-num gethash mh-notate 1 dest-msg-list #2=#:--dolist-temp--2991 #3=#:--dolist-temp--2996 mh-scan-valid-regexp mh-note-refiled mh-cmd-note mh-note-deleted] 6 (#$ . 11950)])
(byte-code "\301B\302\301!\204\f \303\303\207" [current-load-list mh-sequence-history boundp nil] 2)
#@176 Read and return sequence name with default narrowed or previous sequence.
PROMPT is the prompt to use when reading. If NOT-EMPTY is non-nil then a
non-empty sequence is read.
(defalias 'mh-read-seq-default #[(prompt not-empty) "\303	\n\206 \304\305\306!\306\"@#\207" [prompt not-empty mh-last-seq-used mh-read-seq mh-seq-containing-msg mh-get-msg-num nil] 6 (#$ . 12932)])
#@248 Read and return a sequence name.
Prompt with PROMPT, raise an error if the sequence is empty and the NOT-EMPTY
flag is non-nil, and supply an optional DEFAULT sequence. A reply of '%'
defaults to the first sequence containing the current message.
(defalias 'mh-read-seq #[(prompt not-empty &optional default) "\306\307\310\311	\203 \307\312	\"\202 \313$\314\n!\315\211\211\316&\211\317\232\203, \320\321\322!\315\"@\2029 \313\232\2036 	\2029 \323!\324\f!\211\204L \203L \325\326\f\"\210\f+\207" [prompt default mh-seq-list input seq msgs completing-read format "%s %s %s" "sequence:" "[%s] " "" mh-seq-names nil mh-sequence-history "%" mh-seq-containing-msg mh-get-msg-num t intern mh-seq-to-msgs error "No messages in sequence `%s'" not-empty] 9 (#$ . 13314)])
(byte-code "\304B\301B\305\301!\204 \306\303B\305\303!\204 \307\n!\310\311\312#\207" [current-load-list mh-range-history minibuffer-local-completion-map mh-range-completion-map mh-range-seq-names boundp nil copy-keymap define-key " " self-insert-command] 4)
#@217 Programmable completion of message ranges.
STRING is the user input that is to be completed. PREDICATE if non-nil is a
function used to filter the possible choices and FLAG determines whether the
completion is over.
(defalias 'mh-range-completion-function #[(string predicate flag) "\n\306\232?\205 \n\211GSH\211\204 \306\202( \307>\203! \306\202( \310\311\n\312\"!@\n\313\nG\fGZO\314=\203\\ \315\f	#\211\204I \314\202X \316=\203T \316\202X P)\202\260 \316=\203l \317\f	#\202\260 \320=\205\260 	\314\316\314:\203\247 @\211\f\232\203\232 \316\314\211\202\233 \316\203\247 A\211\202\201 ?\205\257 ,,\207" [mh-range-seq-names candidates string last-char last-word prefix "" (32 45 58) last split-string "[ -:]+" 0 nil try-completion t all-completions lambda flag predicate res #1=#:G3001 x #2=#:G3002 #3=#:G3003] 5 (#$ . 14363)])
#@1642 Read a message range with PROMPT.

If FOLDER is non-nil then a range is read from that folder, otherwise use
`mh-current-folder'.

If DEFAULT is a string then use that as default range to return. If DEFAULT is
nil then ask user with default answer a range based on the sequences that seem
relevant. Finally if DEFAULT is t, try to avoid prompting the user. Unseen
messages, if present, are returned. If the folder has fewer than
`mh-large-folder' messages then "all" messages are returned. Finally as a
last resort prompt the user.

If EXPAND-FLAG is non-nil then a list of message numbers corresponding to the
input is returned. If this list is empty then an error is raised. If
EXPAND-FLAG is nil just return the input string. In this case we don't check
if the range is empty.

If ASK-FLAG is non-nil, then the user is always queried for a range of
messages. If ASK-FLAG is nil, then the function checks if the unseen sequence
is non-empty. If that is the case, `mh-unseen-seq', or the list of messages in
it depending on the value of EXPAND, is returned. Otherwise if the folder has
fewer than `mh-large-folder' messages then the list of messages corresponding
to "all" is returned. If neither of the above holds then as a last resort
the user is queried for a range of messages.

If NUMBER-AS-RANGE-FLAG is non-nil, then if a number, N is read as input, it
is interpreted as the range "last:N".

This function replaces the existing function `mh-read-msg-range'. Calls to:
  (mh-read-msg-range folder flag)
should be replaced with:
  (mh-read-range "Suitable prompt" folder t nil flag
                 mh-interpret-number-as-range-flag)
(defalias 'mh-read-range #[(prompt &optional folder default expand-flag ask-flag number-as-range-flag) "\206 	\206 \306\307\310!\311\"@\312\313\n\"\206 \f\311=\204& ;\203* \2022 9\2052 \314!\211\311=\211\205> \315!\211&\205N &\211'A@)\316V(&\205` )\205` &@)V*\203y *\203y \312\317)\"\312\320\n&@#\203\204 *\204\204 \321\310=\203\216 \322\202\222 \312\323\"+,-\f=\203\243 .\202\247 \324\310\"/\325\326\327/!\"01\204\303 (\203\303 \3142!\202\340 1\204\321 *\204\321 \321\202\340 \330\312\331\n+#\332\310\211\211\333&3\31045\203\373 \334\3353\"\203\373 \336\337\3403\"P36\2043\2021\341\3423!/\"\203\341\3423!/\"A\2021\3433\"\2114\203,4\2021\344\3453\".\f\207" [default mh-last-seq-used prompt folder mh-current-folder guess mh-seq-containing-msg mh-get-msg-num nil t format "%s range" symbol-name mh-folder-size 0 "last:%s" "%s (folder has %s messages)" "all" "" "[%s] " mh-read-folder-sequences append (("first") ("last") ("all") ("prev") ("next")) mh-seq-names completing-read "%s: %s" mh-range-completion-function mh-range-history string-match "^[ 	]*\\([0-9]+\\)[ 	]*$" "last:" match-string 1 assoc intern mh-translate-range error "No messages in range `%s'" counts x unseen mh-large-folder large str mh-range-completion-map minibuffer-local-completion-map mh-seq-list seq-list mh-range-seq-names ask-flag mh-unseen-seq input msg-list number-as-range-flag expand-flag] 9 (#$ . 15249)])
#@69 In FOLDER, translate the string EXPR to a list of messages numbers.
(defalias 'mh-translate-range #[(folder expr) "\212\303\304\305\306\"\"\307\310\311\312\217+\207" [expr result strings delete "" split-string "[ 	\n]" nil #1=#:G3004 (byte-code "\304\305\306\307	%\210\nq\210eb\210\310\311\306\312#\203\" \313\314\315!!@B\202 \237\207" [folder strings mh-temp-buffer result apply mh-exec-cmd-quiet nil "mhpath" re-search-forward "/\\([0-9]*\\)$" t read-from-string match-string 1] 6) ((error))] 5 (#$ . 18361)])
#@55 Return an alist containing the names of the SEQ-LIST.
(defalias 'mh-seq-names #[(seq-list) "\301\302\"\207" [seq-list mapcar #[(entry) "\301@!C\207" [entry symbol-name] 2]] 3 (#$ . 18887)])
#@35 Rename SEQUENCE to have NEW-NAME.
(defalias 'mh-rename-seq #[(sequence new-name) "\303!\211\204 \304\305\"\210\306\n	A\"\210\307	A\"\210	\n\240)\207" [sequence old-seq new-name mh-find-seq error "Sequence %s does not exist" mh-define-sequence mh-undefine-sequence] 4 (#$ . 19085) (list (mh-read-seq "Old" t) (intern (read-string "New sequence name: ")))])
#@164 Mark the MH sequence cur.
In addition to notating the current message with `mh-note-cur' the function
uses `overlay-arrow-position' to put a marker in the fringe.
(defalias 'mh-notate-cur #[nil "\306\300!@\211\205( \307\310\211#\205( \311 \210\312	!\203  \313\314\n#\210\f`\314\223\211\211)\207" [cur mh-scan-good-msg-regexp mh-note-cur mh-cmd-note mh-arrow-marker overlay-arrow-position mh-seq-to-msgs mh-goto-msg t beginning-of-line looking-at mh-notate nil] 5 (#$ . 19453)])
#@58 The sequence SEQ is augmented with the messages in MSGS.
(defalias 'mh-add-to-sequence #[(seq msgs) "\303!\205 \304!?\205 	\205 \305\306\307\n\310\311\312!\313	!&\207" [seq msgs mh-current-folder mh-valid-seq-p mh-folder-name-p apply mh-exec-cmd "mark" "-add" "-sequence" symbol-name mh-coalesce-msg-list] 9 (#$ . 19942)])
(byte-code "\301B\301\207" [current-load-list mh-thread-last-ancestor] 2)
#@36 Copy SEQ to the end of the buffer.
(defalias 'mh-copy-seq-to-eob #[(seq) "\212\306!\307	!db\210\214``}\210\310\n\311\"\210\312>\203F\313 \210edB\247\203J \314edB\311\211#\2035edB\211\315 \316#\210,\2025edB:\203\242 edB@\247\203\242 edBA\247\203\242 \212edB@b\210\317 \210`edBAX\203\236 m\204\236 \320!\203\230 \321\311!\211 \315 !\316! #\210,\322y\210\202k )\2025edB\203\267 edB9\203\267 \306edB!\202\313 edB;\203\310 \323\"edB\"\202\313 edB\324 #\211$\325\211%\203\356 %@\316\f\311##\210%A\211%\204\332 *\212eb\210\317 \210`dX\2034m\2044\320!\203.\321\311!&\326&#\"\203-&\211'(\315 )\316')(#\210,)\322y\210\202\366 +ed|\210\327\330\"\325\"!\210\331 \202M*\205M\332 ,\207" [seq msgs coalesced-msgs mh-view-ops msg #1=#:--x--3005 mh-seq-to-msgs mh-coalesce-msg-list mh-regenerate-headers t unthread mh-remove-all-notation mh-goto-msg mh-thread-parse-scan-line cl-puthash beginning-of-line looking-at mh-get-msg-num 1 mh-translate-range make-hash-table nil gethash mh-thread-print-scan-lines mh-thread-generate mh-notate-user-sequences mh-index-insert-folder-headers mh-thread-scan-line-map #2=#:--h--3006 #3=#:--store--3008 mh-scan-valid-regexp #4=#:--x--3009 #5=#:--h--3010 #6=#:--store--3012 mh-current-folder #7=#:seq-hash-table #8=#:msgs #9=#:--dolist-temp--3013 v #10=#:--x--3014 #11=#:--h--3015 #12=#:--store--3017 mh-index-data] 6 (#$ . 20354)])
#@204 Iterate over region.
VAR is bound to the message on the current line as we loop starting from BEGIN
till END. In each step BODY is executed.

If VAR is nil then the loop is executed without any binding.
(defalias 'mh-iterate-on-messages-in-region '(macro . #[(var begin end &rest body) "9\204\n \305\306\"\210\307\310\nD\311\312\313\314\315E\316BB\317\320\321	\205% \322BC\fBBE\323BBBF)\207" [var binding-needed-flag begin end body error "Can not bind the non-symbol %s" save-excursion goto-char (beginning-of-line) while and <= (point) ((not (eobp))) when (looking-at mh-scan-valid-regexp) let ((mh-get-msg-num t)) ((forward-line 1))] 10 (#$ . 21780)]))
(put 'mh-iterate-on-messages-in-region 'lisp-indent-hook 'defun)
#@420 Iterate an operation over a region or sequence.

VAR is bound to each message in turn in a loop over RANGE, which can be a
message number, a list of message numbers, a sequence, a region in a cons
cell, or a MH range (something like last:20) in a string. In each iteration,
BODY is executed.

The parameter RANGE is usually created with `mh-interactive-range'
in order to provide a uniform interface to MH-E functions.
(defalias 'mh-iterate-on-range '(macro . #[(var range &rest body) "9\204\n \306\307\"\210\310\311!\310\312!\313\314\fD\315\316\f\317BB\320\205' \fDCBBED\321\322\fD\314\323\fDD\314\324\fDDF\325\323\fD\324\fDBBBBD\326\320\n\313\321\f\327\fDE\330\fDD\331\fD\332\333\fED\326\fDFD	\334BD\335\336\nD\337\340\336	E\341BBE\325\342\343\344\315\340\342	E\320\205\207 \345BCBBE\257FDF+\207" [var seq-hash-table msgs binding-needed-flag range body error "Can not bind the non-symbol %s" make-symbol "msgs" "seq-hash-table" cond numberp when mh-goto-msg (t t) let and consp car cdr mh-iterate-on-messages-in-region t symbolp mh-seq-to-msgs stringp mh-translate-range mh-current-folder ((make-hash-table)) dolist msg setf gethash (t) v (point-min) (point-max) (v)] 16 (#$ . 22513)]))
(put 'mh-iterate-on-range 'lisp-indent-hook 'defun)
#@136 Return a list of messages for RANGE.
RANGE can be a message number, a list of message numbers, a sequence, or
a region in a cons cell.
(defalias 'mh-range-to-msg-list #[(range) "\306	\247\203 \307	\310\211#\203\310 	\211B)\202\310 	:\203V 	@\247\203V 	A\247\203V \212	@b\210\311 \210`	AX\203R m\204R \312!\203L \313\310!\211B)\314y\210\2022 )\202\310 	\203e 	9\203e \315	!\202r 	;\203q \316\f	\"\202r 	\317 \211\306\211\203\223 @\320\n\310#\210A\211\204\200 *\212eb\210\311 \210`dX\203\307 m\204\307 \312!\203\301 \313\310!\321\"\203\300 \211B))\314y\210\202\233 +\237)\207" [msg-list range msg mh-scan-valid-regexp mh-current-folder #1=#:seq-hash-table nil mh-goto-msg t beginning-of-line looking-at mh-get-msg-num 1 mh-seq-to-msgs mh-translate-range make-hash-table cl-puthash gethash #2=#:msgs #3=#:--dolist-temp--3022 v] 6 (#$ . 23776)])
#@713 Return interactive specification for message, sequence, range or region.
By convention, the name of this argument is RANGE.

If variable `transient-mark-mode' is non-nil and the mark is active, then this
function returns a cons-cell of the region.

If optional prefix argument is provided, then prompt for message range with
RANGE-PROMPT. A list of messages in that range is returned.

If a MH range is given, say something like last:20, then a list containing
the messages in that range is returned.

If DEFAULT non-nil then it is returned.

Otherwise, the message number at point is returned.

This function is usually used with `mh-iterate-on-range' in order to provide
a uniform interface to MH-E functions.
(defalias 'mh-interactive-range #[(range-prompt &optional default) "\305\300!\203 \203 \305\301!\203 	\203 \306 \307 B\207\n\203& \310\311\211\312\211%\207\f\203, \f\207\313\312!\207" [transient-mark-mode mark-active current-prefix-arg range-prompt default boundp region-beginning region-end mh-read-range nil t mh-get-msg-num] 6 (#$ . 24660)])
#@438 Put all following messages with same subject in sequence 'subject.
If arg ALL is t, move to beginning of folder buffer to collect all messages.
If arg ALL is nil, collect only messages fron current one on forward.

Return number of messages put in the sequence:

 nil -> there was no subject line.
 0   -> there were no later messages with the same subject (sequence not made)
 >1  -> the total number of messages including current one.
(defalias 'mh-subject-to-sequence #[(all) "\302>\203\n \303	!\207\304	!\207" [mh-view-ops all unthread mh-subject-to-sequence-threaded mh-subject-to-sequence-unthreaded] 2 (#$ . 25730)])
#@490 Put all following messages with same subject in sequence 'subject.
This function only works with an unthreaded folder. If arg ALL is t, move to
beginning of folder buffer to collect all messages. If arg ALL is nil, collect
only messages fron current one on forward.

Return number of messages put in the sequence:

 nil -> there was no subject line.
 0   -> there were no later messages with the same subject (sequence not made)
 >1  -> the total number of messages including current one.
(defalias 'mh-subject-to-sequence-unthreaded #[(all) "\306=\204\n \307\310!\210\212\311 \210\312	!\203\" \313\314!\203\" \313\314!\315\230\203* \316\317!\210\320\202\261 \321\314!\320\211G\322V\203< \323\322O\212\f\203D eb\210\324	\320\325#\203l \321\314!\211G\322V\203\\ \323\322O\230\203h \326\325!\nB)\202D )\n\203\257 \326\325!\n\235\204 \326\325!\nB\327\303\"\203\213 \330\303!\210\331\332\n!\333\"\211\203\250 \334@\303\320#\210A\211\204\227 \335\n!)\202\260 \323*)\207" [major-mode mh-scan-subject-regexp list subject all this-subject mh-folder-mode error "Not in a folder buffer" beginning-of-line looking-at match-string 3 "" message "No subject line" nil match-string-no-properties 41 0 re-search-forward t mh-get-msg-num assoc mh-delete-seq sort copy-sequence mh-lessp mh-add-msgs-to-seq safe-length mh-seq-list sorted-list] 5 (#$ . 26362)])
#@362 Put all messages with the same subject in the 'subject sequence.
This function works when the folder is threaded. In this situation the subject
could get truncated and so the normal matching doesn't work.

The parameter ALL is non-nil then all the messages in the buffer are
considered, otherwise only the messages after the current one are taken into
account.
(defalias 'mh-subject-to-sequence-threaded #[(all) "\306\307!\310!\307\307	\204 \311\312!\210\307\202(\f\203  e\202! `dB\211\247\203C \313\n\314\211#\203\n\310!	=\203? B)\202\n:\203\211 \n@\247\203\211 \nA\247\203\211 \212\n@b\210\315 \210`\nAX\203\205 m\204\205 \316!\203 \306\314!\310!	=\203~ B)\317y\210\202\\ )\202\n\203\230 \n9\203\230 \320\n!\202\246 \n;\203\245 \321\n\"\202\246 \n\322 \211\307\211\203\311 @\323\314#\210A\211\204\265 *\212eb\210\315 \210`dX\203m\204\316!\203\306\314! \324 \"\203  \310!	=\203\377 B))\317y\210\202\321 +\325\326\"\211\204\327\202(\330\301!\"\203!\331\301!\210\332\301\"\210G,\207" [cur subject region msgs all msg mh-get-msg-num nil mh-thread-find-msg-subject message "No subject line" mh-goto-msg t beginning-of-line looking-at 1 mh-seq-to-msgs mh-translate-range make-hash-table cl-puthash gethash sort mh-lessp 0 assoc mh-delete-seq mh-add-msgs-to-seq mh-scan-valid-regexp mh-current-folder #1=#:seq-hash-table #2=#:msgs #3=#:--dolist-temp--3027 v mh-seq-list] 6 (#$ . 27734)])
#@91 Find canonicalized subject of MSG.
This function can only be used the folder is threaded.
(defalias 'mh-thread-find-msg-subject #[(msg) "\300\301\302\217\207" [#1=#:G3032 (byte-code "\303\304\211	\"\n\"A@8\207" [msg mh-thread-index-id-map mh-thread-id-table 3 gethash] 5) ((error))] 3 (#$ . 29197)])
#@89 With prefix arg edit a pick expression.
If no prefix arg is given, then return DEFAULT.
(defalias 'mh-edit-pick-expr #[(default) "\306\307	:\203 	@\310\311\n\"P	A\211\202 +\204) \f\307\232\2035 \312\307\313\314\315\f\"!\"\2026 )\207" [default #1=#:G3033 x #2=#:G3034 default-string current-prefix-arg nil "" format " %s" delete split-string read-string "Pick expression: "] 6 (#$ . 29504)])
#@138 Limit to messages with same subject.
With a prefix argument, edit PICK-EXPR.

Use \<mh-folder-mode-map>\[mh-widen] to undo this command.
(defalias 'mh-narrow-to-subject #[(&optional pick-expr) "\301\302\"\207" [pick-expr mh-narrow-to-header-field subject] 3 (#$ . 29916) (list (mh-edit-pick-expr (mh-current-message-header-field 'subject)))])
#@148 Limit to messages with the same `From:' field.
With a prefix argument, edit PICK-EXPR.

Use \<mh-folder-mode-map>\[mh-widen] to undo this command.
(defalias 'mh-narrow-to-from #[(&optional pick-expr) "\301\302\"\207" [pick-expr mh-narrow-to-header-field from] 3 (#$ . 30267) (list (mh-edit-pick-expr (mh-current-message-header-field 'from)))])
#@146 Limit to messages with the same `Cc:' field.
With a prefix argument, edit PICK-EXPR.

Use \<mh-folder-mode-map>\[mh-widen] to undo this command.
(defalias 'mh-narrow-to-cc #[(&optional pick-expr) "\301\302\"\207" [pick-expr mh-narrow-to-header-field cc] 3 (#$ . 30619) (list (mh-edit-pick-expr (mh-current-message-header-field 'cc)))])
#@146 Limit to messages with the same `To:' field.
With a prefix argument, edit PICK-EXPR.

Use \<mh-folder-mode-map>\[mh-widen] to undo this command.
(defalias 'mh-narrow-to-to #[(&optional pick-expr) "\301\302\"\207" [pick-expr mh-narrow-to-header-field to] 3 (#$ . 30963) (list (mh-edit-pick-expr (mh-current-message-header-field 'to)))])
#@100 Limit to messages whose HEADER-FIELD match PICK-EXPR.
The MH command pick is used to do the match.
(defalias 'mh-narrow-to-header-field #[(header-field pick-expr) "\306\307edB!!\310\311\312\313!!\314\216r\fq\210\315\316\317\310\320\n\321C#%\210eb\210m\204G \322`\323 {!\211@\247\203@ @	B\310y\210)\202( +	\204R \324\325!\202f \326\327\"\203^ \330\327!\210\331	\327\"\210\332\327!+\207" [mh-current-folder msg-list original folder #1=#:temp-buffer pick-expr mh-coalesce-msg-list mh-range-to-msg-list nil get-buffer-create generate-new-buffer-name " *temp*" ((byte-code "\301!\203\n \302!\210\301\207" [#1# buffer-name kill-buffer] 2)) apply mh-exec-cmd-output "pick" append "-list" read-from-string line-end-position message "No matches" assoc header mh-delete-seq mh-add-msgs-to-seq mh-narrow-to-seq num mh-seq-list] 10 (#$ . 31307)])
#@69 Return a pick regexp to match HEADER-FIELD of the message at point.
(defalias 'mh-current-message-header-field #[(header-field) "\306\307!\211\205\271 	\310\311\312!!\313\216rq\210\314\315\n\"!\210eb\210\316\317\307\320#\203, e`}\210\321\322\323\f\"!\2066 \324\322\325\f\"\326\327\"\307\307 :\203z @\211\324\232\204q \330\331\"\203j \332\333\"\202l  B A\211\202K  \237+\211!\205\267 !@D\"!A#\307$#:\203\264 #@$$\334\"BBB\"#A\211#\202\226 \"+.)\207" [num mh-current-folder folder #1=#:temp-buffer header-field field mh-get-msg-num nil get-buffer-create generate-new-buffer-name " *temp*" ((byte-code "\301!\203\n \302!\210\301\207" [#1# buffer-name kill-buffer] 2)) insert-file-contents-literally mh-msg-filename search-forward "\n\n" t message-fetch-field format "%s" "" "-%s" split-string "[ ]*,[ ]*" string-match "<\\(.*@.*\\)>" match-string 1 "-or" field-option #2=#:G3036 x #3=#:G3037 patterns accum #4=#:G3038 e] 6 (#$ . 32164)])
#@185 Limit to messages in RANGE.

Check the documentation of `mh-interactive-range' to see how RANGE is read in
interactive use.

Use \<mh-folder-mode-map>\[mh-widen] to undo this command.
(defalias 'mh-narrow-to-range #[(range) "\302\301\"\203 \303\301!\210\304\305	!\301\"\210\306\301!\207" [mh-seq-list range assoc mh-delete-seq mh-add-msgs-to-seq mh-range-to-msg-list mh-narrow-to-seq] 3 (#$ . 33161) (list (mh-interactive-range "Narrow to"))])
#@233 Mark all following messages with same subject to be deleted.
This puts the messages in a sequence named subject.  You can undo the last
deletion marks using `mh-undo' with a prefix argument and then specifying the
subject sequence.
(defalias 'mh-delete-subject #[nil "\301\302!\211\204 \303\304\305!!\202* \306U\203\" \307\310!\210\303\304\305!!\202* \307\311\"\210\303\312!)\207" [count mh-subject-to-sequence nil mh-delete-msg mh-get-msg-num t 0 message "No other messages with same Subject following this one" "Marked %d messages for deletion" subject] 4 (#$ . 33614) nil])
#@299 Mark messages for deletion intelligently.
If the folder is threaded then `mh-thread-delete' is used to mark the current
message and all its descendants for deletion. Otherwise `mh-delete-subject' is
used to mark the current message and all messages following it with the same
subject for deletion.
(defalias 'mh-delete-subject-or-thread #[nil "\301>\203	 \302 \207\303 \207" [mh-view-ops unthread mh-thread-delete mh-delete-subject] 2 (#$ . 34202) nil])
#@91 Initialize the hash table in VAR.
TEST is the test to use when creating a new hash table.
(defalias 'mh-thread-initialize-hash '(macro . #[(var test) "9\204\n \302\303\"\210\304\305D\306\307\310	EEF\207" [var test error "Expected a symbol: %s" if clrhash setq make-hash-table :test] 8 (#$ . 34663)]))
#@57 Make new hash tables, or clear them if already present.
(defalias 'mh-thread-initialize #[nil "\203 \306!\210\202 \307\310\311\"	\203 \306	!\210\202  \307\310\311\"\n\203+ \306\n!\210\2020 \307\310\312\"\203; \306!\210\202@ \307\310\312\"\f\203K \306\f!\210\202P \307\310\313\"\203[ \306!\210\202` \307\310\313\"\203m \306!\210\202s \307\310\312\"\203\200 \306!\210\202\206 \307\310\312\"\314\211\207" [mh-thread-id-hash mh-thread-subject-hash mh-thread-id-table mh-thread-id-index-map mh-thread-index-id-map mh-thread-scan-line-map clrhash make-hash-table :test equal eq eql nil mh-thread-subject-container-hash mh-thread-duplicates mh-thread-history] 3 (#$ . 34975)])
#@160 Given ID, return the corresponding container in `mh-thread-id-table'.
If no container exists then a suitable container is created and the id-table
is updated.
(defalias 'mh-thread-id-container #[(id) "\204 \306\307!\210\310	\"\206$ 	\311\312\"\313\314\f\")\315\n#+\207" [id mh-thread-id-table #1=#:--x--3039 #2=#:--h--3040 message #3=#:--store--3042 error "1" gethash mh-thread-make-message :id mh-thread-make-container :message cl-puthash] 4 (#$ . 35681)])
(put 'mh-thread-id-container 'byte-optimizer 'byte-compile-inline-expand)
#@43 Remove parent link of CHILD if it exists.
(defalias 'mh-thread-remove-parent-link #[(child) "\306!\203\n \2023 \211\204 \307\310!\210\311	\n\"\2062 	\n\312\313	\"\314\315\")\316\f#+)\3178\211\205~ \320\233\3208\321\321:\203r @=\204i BA\211\202Q \237+\240\210AA\321\240*\207" [child id mh-thread-id-table #1=#:--x--3039 #2=#:--h--3040 message mh-thread-container-p error "1" gethash mh-thread-make-message :id mh-thread-make-container :message cl-puthash 2 3 nil #3=#:--store--3042 child-container parent-container #4=#:G3046 elem #5=#:G3047] 5 (#$ . 36230)])
(put 'mh-thread-remove-parent-link 'byte-optimizer 'byte-compile-inline-expand)
#@225 Add links so that PARENT becomes a parent of CHILD.
Doesn't make any changes if CHILD is already an ancestor of PARENT. If
optional argument AT-END-P is non-nil, the CHILD is added to the end of the
children list of PARENT.
(defalias 'mh-thread-add-link #[(parent child &optional at-end-p) "\204 \306\202; \307!\203 \202; \211\204 \310\311!\210\312	\n\"\206: 	\n\313\314	\"\315\316\")\317\f#+)\307!\203G \202q \211\204R \310\311!\210\312	\n\"\206p 	\n\313\314	\"\315\316\")\317\f#+)\211\203n\320\"\204n\320\"\204n\307!\203\233 \202\305 \211\204\246 \310\311!\210\312	\n\"\206\304 	\n\313\314	\"\315\316\")\317\f#+)\3218\211\205\322\233\3228\306\306:\203@=\204\373 BA\211\202\343 \237+\240\210AA\306\240*\210)\204-\322\233\3228B\240\210)\202f\3228\204I\322\233\3228B\240\210)\202f\3228\211A\203]A\211\202P\306B\241\210)AA\240\210?\205\372\307!\203\204\202\256\211\204\217\310\311!\210\312	\n\"\206\255	\n\313\314	\"\315\316\")\317\f#+)\3218\211\205\371\322\233\3228\306\306:\203\355@=\204\344BA\211\202\314\237+\240\210AA\306\240+*\207" [parent id mh-thread-id-table #1=#:--x--3039 #2=#:--h--3040 message nil mh-thread-container-p error "1" gethash mh-thread-make-message :id mh-thread-make-container :message cl-puthash mh-thread-ancestor-p 2 3 #3=#:--store--3042 child child-container parent-container #4=#:G3046 elem #5=#:G3047 at-end-p #6=#:--arg1--3054 #7=#:--arg1--3058 last-child] 6 (#$ . 36930)])
(put 'mh-thread-add-link 'byte-optimizer 'byte-compile-inline-expand)
#@164 Return t if ANCESTOR is really an ancestor of SUCCESSOR and nil otherwise.
In the limit, the function returns t if ANCESTOR and SUCCESSOR are the same
containers.
(defalias 'mh-thread-ancestor-p #[(ancestor successor) "\300\301\215\207" [--cl-block-nil-- (byte-code "\203 	=\203 \302\303\304\"\210\3058\211\204 \306\207" [successor ancestor throw --cl-block-nil-- t 2 nil] 4)] 2 (#$ . 38640)])
#@111 Return container which has MESSAGE in it.
If there is no container present then a new container is allocated.
(defalias 'mh-thread-get-message-container #[(message) "A@\306	\n\"\211\203 A\240\210\202' 	\n\307\310\"\n\311\f\n#+*\207" [message id mh-thread-id-table container #1=#:--x--3065 #2=#:--h--3066 gethash mh-thread-make-container :message cl-puthash #3=#:--store--3068] 5 (#$ . 39048)])
(put 'mh-thread-get-message-container 'byte-optimizer 'byte-compile-inline-expand)
#@132 Return appropriate message.
Otherwise update message already present to have the proper ID, SUBJECT-RE-P,
SUBJECT and REFS fields.
(defalias 'mh-thread-get-message #[(id subject-re-p subject refs) "\306	\"\211\205\f \nA@\211\203- \307\233\f\240\210\310\233\240\210A\240\210AA\240\210\202\201 \n\203C \nA\311\312\313\314\315\f&\240\202\201 \311\312\313\315\f\314&\211\211\211A@\306	\"\211\203i \nA\240\210\n\202~ 	\316\317\"\320#+*\210**\207" [id mh-thread-id-table container message subject-re-p subject gethash 4 3 mh-thread-make-message :id :references :subject :subject-re-p mh-thread-make-container :message cl-puthash refs #1=#:--x--3065 #2=#:--h--3066 #3=#:--store--3068] 11 (#$ . 39545)])
(put 'mh-thread-get-message 'byte-optimizer 'byte-compile-inline-expand)
#@94 Produce canonical string representation for ID.
This allows cheap string comparison with EQ.
(defalias 'mh-thread-canonicalize-id #[(id) "\302\232\203\f \303\302!\206 \304	\"\206 \305\211	#\207" [id mh-thread-id-hash "" copy-sequence gethash cl-puthash] 4 (#$ . 40362)])
(put 'mh-thread-canonicalize-id 'byte-optimizer 'byte-compile-inline-expand)
#@289 Prune leading Re:'s, Fwd:'s etc. and trailing (fwd)'s from SUBJECT.
If the result after pruning is not the empty string then it is canonicalized
so that subjects can be tested for equality with eq. This is done so that all
the messages without a subject are not put into a single thread.
(defalias 'mh-thread-prune-subject #[(subject) "\304\305\306\307\n\"\204 \306\310\n\"\203 \304\n\311\225\305O\202 \306\312\n\"\204+ \306\313\n\"\2036 \304\n\311\211\224O\202 \n\314\232\203C \315\n\"\202R \315\316\n\"\206P \317\n\211#\"*\207" [subject-pruned-flag case-fold-search subject mh-thread-subject-hash t nil string-match "^[ 	]*\\(re\\|fwd?\\)\\(\\[[0-9]*\\]\\)?:[ 	]*" "^[ 	]*\\[[^\\]][ 	]*" 0 "(fwd)$" "[ 	]+$" "" values gethash cl-puthash] 5 (#$ . 40722)])
(put 'mh-thread-prune-subject 'byte-optimizer 'byte-compile-inline-expand)
#@104 Return the subject of CONTAINER.
If CONTAINER is empty return the subject info of one of its children.
(defalias 'mh-thread-container-subject #[(container) "A@\203 A@A@\203 \301A@8\207\302\303\215\210\304\305!\207" [container 3 --cl-block-nil-- (byte-code "\3048\305\211\203. \n@\211A@\203' 	A@A@\203' 	A@\306\307\3048\"\210)\nA\211\204\n *\305\207" [container kid #1=#:--dolist-temp--3092 kid-message 3 nil throw --cl-block-nil--] 5) error "This can't happen!"] 2 (#$ . 41575)])
#@54 Restore the thread tree to its state before pruning.
(defalias 'mh-thread-rewind-pruning #[nil "\205Y\211A@\211@\306=\203\302	\211A@)\307!\203\" \202Q \211\204, \310\311!\210\312\f\"\206P \f\313\314\f\"\315\316\")\317#+)\3208\211\205\234 \321\233\3218\322\322 :\203\220 @=\204\207  B A\211\202o  \237+\240\210AA\322\240*\210)	\211AA)@	\211A@)\322!\211\"\204\272 \322\202\366 \307\"!\203\306 \"\202\366 \"\211\204\321 \310\311!\210\312\f\"\206\365 \f\313\314\f\"\315\316\")\317#+)\307!\203 \202/\211\204\n\310\311!\210\312\f\"\206.\f\313\314\f\"\315\316\")\317#+)\211\203.\323\"\204.\323\"\204.\307!\203V\202\205\211\204`\310\311!\210\312\f\"\206\204\f\313\314\f\"\315\316\")\317#+)\3208\211\205\320\321\233\3218\322\322 :\203\304@=\204\273 B A\211\202\243 \237+\240\210AA\322\240*\210)!\204\355#\321\233#\3218B\240\210)\202&\3218\204	$\321\233$\3218B\240\210)\202&\3218\211%A\203%A\211%\202%\322B\241\210)AA\240\210?\205\274\307!\203A\202p\211\204K\310\311!\210\312\f\"\206o\f\313\314\f\"\315\316\")\317#+)\3208\211\205\273\321\233\3218\322\322 :\203\257@=\204\246 B A\211\202\216 \237+\240\210AA\322\240+*\210+\202U	@\324=\203\265	\211A@)	\211AA)@	\211AA)A&\"'&\322\211(\203\231(@\211\307!\203\375\202,\211\204\310\311!\210\312\f\"\206+\f\313\314\f\"\315\316\")\317#+)\3208\211\205w\321\233\3218\322\322 :\203k@=\204b B A\211\202J \237+\240\210AA\322\240*\210)'\322!\211\"\204\213\322\202\307\307\"!\203\227\"\202\307\"\211\204\242\310\311!\210\312\f\"\206\306\f\313\314\f\"\315\316\")\317#+)\307!\203\321\202 \211\204\333\310\311!\210\312\f\"\206\377\f\313\314\f\"\315\316\")\317#+)\211\203\377\323\"\204\377\323\"\204\377\307!\203'\202V\211\2041\310\311!\210\312\f\"\206U\f\313\314\f\"\315\316\")\317#+)\3208\211\205\241\321\233\3218\322\322 :\203\225@=\204\214 B A\211\202t \237+\240\210AA\322\240*\210)!\204\276#\321\233#\3218B\240\210)\202\367\3218\204\332$\321\233$\3218B\240\210)\202\367\3218\211%A\203\356%A\211%\202\341%\322B\241\210)AA\240\210?\205\215\307!\203\202A\211\204\310\311!\210\312\f\"\206@\f\313\314\f\"\315\316\")\317#+)\3208\211\205\214\321\233\3218\322\322 :\203\200@=\204w B A\211\202_ \237+\240\210AA\322\240+*\210+(A\211(\204\355*\"'\322!\211\"\204\254\322\202\350\307\"!\203\270\"\202\350\"\211\204\303\310\311!\210\312\f\"\206\347\f\313\314\f\"\315\316\")\317#+)\307!\203\362\202!\211\204\374\310\311!\210\312\f\"\206 \f\313\314\f\"\315\316\")\317#+)\211\203 \323\"\204 \323\"\204 \307!\203H\202w\211\204R\310\311!\210\312\f\"\206v\f\313\314\f\"\315\316\")\317#+)\3208\211\205\302\321\233\3218\322\322 :\203\266@=\204\255 B A\211\202\225 \237+\240\210AA\322\240*\210)!\204\337#\321\233#\3218B\240\210)\202\3218\204\373$\321\233$\3218B\240\210)\202\3218\211%A\203%A\211%\202%\322B\241\210)AA\240\210?\205\256\307!\2033\202b\211\204=\310\311!\210\312\f\"\206a\f\313\314\f\"\315\316\")\317#+)\3208\211\205\255\321\233\3218\322\322 :\203\241@=\204\230 B A\211\202\200 \237+\240\210AA\322\240+*\210.\202U	@\325=\203U	\211A@)\211'\307!\203\320\202\377\211\204\332\310\311!\210\312\f\"\206\376\f\313\314\f\"\315\316\")\317#+)\3208\211\205J\321\233\3218\322\322 :\203>@=\2045 B A\211\202 \237+\240\210AA\322\240*\210)\326'\233\327\240\210))\202  \207" [mh-thread-history action x child id mh-thread-id-table DROP mh-thread-container-p error "1" gethash mh-thread-make-message :id mh-thread-make-container :message cl-puthash 2 3 nil mh-thread-ancestor-p PROMOTE SUBJECT 4 t #1=#:--x--3039 #2=#:--h--3040 message #3=#:--store--3042 child-container parent-container #4=#:G3046 elem #5=#:G3047 at-end-p parent #6=#:--arg1--3054 #7=#:--arg1--3058 last-child children node #8=#:--dolist-temp--3093] 8 (#$ . 42073)])
#@49 Prune empty containers in the containers ROOTS.
(defalias 'mh-thread-prune-containers #[(roots) "\306	\203/ 	\211A@\3078\306\211\203& @\211	BA\211\204 *\nB)\202 \n\203\266\n\211A@\310A@A@\"\203R \307\233\311\3078!\240\210\202\262\3078\203\352\3078A\203e \3128\203\352\306\3078\306\211\203H@\211\313\f!\203\205 \f\202\272 \f\211\204\220 \314\315!\210\310\"\206\271  !\316\317\"\"\320\321\"\")#\322 #!#+)$\312$8\211%\205\307%\233\307%8&\306'\306(&:\203\371 &@'$'=\204\360 '(B(&A\211&\202\330 (\237+\240\210$AA\306\240*\210)\3128\306)\211*\204\306\202]\313*!\203'*\202]*\211\2043\314\315!\210\310\"\206\\ !\316\317\"\"\320\321\"\")#\322 #!#+)\313\f!\203g\f\202\234\f\211\204r\314\315!\210\310\"\206\233 !\316\317\"\"\320\321\"\")#\322 #!#+)$\211%\203\241\323$%\"\204\241\323%$\"\204\241$\313\f!\203\303\f\202\370\f\211\204\316\314\315!\210\310\"\206\367 !\316\317\"\"\320\321\"\")#\322 #!#+)$\312$8\211%\205C\307%\233\307%8&\306'\306(&:\2037&@'$'=\204.'(B(&A\211&\202(\237+\240\210$AA\306\240*\210))\204`$+\307%\233+\307%8B\240\210)\202\231\307%8\204|$,\307%\233,\307%8B\240\210)\202\231\307%8\211-A\203\220-A\211-\202\203-$\306B\241\210)$AA%\240\210%?\2055$\313\f!\203\264\f\202\351\f\211\204\277\314\315!\210\310\"\206\350 !\316\317\"\"\320\321\"\")#\322 #!#+)$\312$8\211%\2054\307%\233\307%8&\306'\306(&:\203(&@'$'=\204'(B(&A\211&\202(\237+\240\210$AA\306\240+*\210+BA\211\204t *\324\3128BBB.B.\313\f!\203d\f\202\231\f\211\204o\314\315!\210\310\"\206\230 !\316\317\"\"\320\321\"\")#\322 #!#+)$\312$8\211%\205\344\307%\233\307%8&\306'\306(&:\203\330&@'$'=\204\317'(B(&A\211&\202\267(\237+\240\210$AA\306\240*\210*\202\262\3078\203\307\233\311\3078!\240\210\3078@\3078A/\2110\313\f!\203\f\202G\f\211\204\314\315!\210\310\"\206F !\316\317\"\"\320\321\"\")#\322 #!#+)$\312$8\211%\205\222\307%\233\307%8&\306'\306(&:\203\206&@'$'=\204}'(B(&A\211&\202e(\237+\240\210$AA\306\240*\210)/\306\2111\203s1@\211\313\f!\203\261\f\202\346\f\211\204\274\314\315!\210\310\"\206\345 !\316\317\"\"\320\321\"\")#\322 #!#+)$\312$8\211%\2051\307%\233\307%8&\306'\306(&:\203%&@'$'=\204'(B(&A\211&\202(\237+\240\210$AA\306\240*\210)\325\233\306\240\2100\326)\211*\204M\306\202\217\313*!\203Y*\202\217*\211\204e\314\315!\210\310\"\206\216 !\316\317\"\"\320\321\"\")#\322 #!#+)\313\f!\203\231\f\202\316\f\211\204\244\314\315!\210\310\"\206\315 !\316\317\"\"\320\321\"\")#\322 #!#+)$\211%\203\323\323$%\"\204\323\323%$\"\204\323$\313\f!\203\365\f\202*\f\211\204 \314\315!\210\310\"\206) !\316\317\"\"\320\321\"\")#\322 #!#+)$\312$8\211%\205u\307%\233\307%8&\306'\306(&:\203i&@'$'=\204`'(B(&A\211&\202H(\237+\240\210$AA\306\240*\210))\204\222$+\307%\233+\307%8B\240\210)\202\313\307%8\204\256$,\307%\233,\307%8B\240\210)\202\313\307%8\211-A\203\302-A\211-\202\265-$\306B\241\210)$AA%\240\210%?\205g$\313\f!\203\346\f\202\f\211\204\361\314\315!\210\310\"\206 !\316\317\"\"\320\321\"\")#\322 #!#+)$\312$8\211%\205f\307%\233\307%8&\306'\306(&:\203Z&@'$'=\204Q'(B(&A\211&\2029(\237+\240\210$AA\306\240+*\210+1A\2111\204\240*\324\31280/BBBB.B.\313\f!\203\222\f\202\307\f\211\204\235\314\315!\210\310\"\206\306 !\316\317\"\"\320\321\"\")#\322 #!#+)$\312$8\211%\205\307%\233\307%8&\306'\306(&:\203&@'$'=\204\375'(B(&A\211&\202\345(\237+\240\210$AA\306\240*\210+\202\262\327\3128E.B.\313\f!\203/\f\202d\f\211\204:\314\315!\210\310\"\206c !\316\317\"\"\320\321\"\")#\322 #!#+)$\312$8\211%\205\257\307%\233\307%8&\306'\306(&:\203\243&@'$'=\204\232'(B(&A\211&\202\202(\237+\240\210$AA\306\240*\210))\202/ \3062\330\331\"\210\3112!+\207" [roots work-list dfs-ordered-nodes node child #1=#:--dolist-temp--3097 nil 3 gethash mh-thread-sort-containers 2 mh-thread-container-p error "1" mh-thread-make-message :id mh-thread-make-container :message cl-puthash mh-thread-ancestor-p PROMOTE 4 t DROP maphash #[(k v) "\3038?\205 \304A@A@	\"\205 \nB\211\207" [v mh-thread-id-index-map results 2 gethash] 3] mh-thread-id-index-map children kid #2=#:--dolist-temp--3101 id mh-thread-id-table #3=#:--x--3039 #4=#:--h--3040 message #5=#:--store--3042 child-container parent-container #6=#:G3046 elem #7=#:G3047 at-end-p parent #8=#:--arg1--3054 #9=#:--arg1--3058 last-child mh-thread-history other-kids new-parent #10=#:--dolist-temp--3105 results] 8 (#$ . 46695)])
#@71 Sort a list of message CONTAINERS to be in ascending order wrt index.
(defalias 'mh-thread-sort-containers #[(containers) "\301\302\"\207" [containers sort #[(x y) "A@\2053 	A@\2053 A@A@	A@A@\306\n\f\"\306\f\"\250\2052 \250\2052 W,\207" [x y id-x id-y mh-thread-id-index-map index-x gethash index-y] 3]] 3 (#$ . 51712)])
#@177 Group the set of message containers, ROOTS based on subject.
Bug: Check for and make sure that something without Re: is made the parent in
preference to something that has it.
(defalias 'mh-thread-group-by-subject #[(roots) "\306!\210\307\n\307\211\203\f@\310!\311\"\211\203\375\312!\203. \202d \211\204: \313\314!\210\311\"\206c \315\316\"\317\320\")\321#+) \322 8\211!\205\257 \323!\233\323!8\"\307#\307$\":\203\243 \"@# #=\204\232 #$B$\"A\211\"\202\202 $\237+\240\210 AA\307\240*\210)\324%\211\204\304 \307\202\312!\203\320 \202\211\204\334 \313\314!\210\311\"\206\315\316\"\317\320\")\321#+)\312!\203\202H\211\204\313\314!\210\311\"\206G\315\316\"\317\320\")\321#+) \211!\203Q\325 !\"\204Q\325! \"\204Q \312!\203r\202\250\211\204~\313\314!\210\311\"\206\247\315\316\"\317\320\")\321#+) \322 8\211!\205\363\323!\233\323!8\"\307#\307$\":\203\347\"@# #=\204\336#$B$\"A\211\"\202\306$\237+\240\210 AA\307\240*\210)%\204 &\323!\233&\323!8B\240\210)\202I\323!8\204, '\323!\233'\323!8B\240\210)\202I\323!8\211(A\203@(A\211(\2023( \307B\241\210) AA!\240\210!?\205\351 \312!\203g\202\235\211\204s\313\314!\210\311\"\206\234\315\316\"\317\320\")\321#+) \322 8\211!\205\350\323!\233\323!8\"\307#\307$\":\203\334\"@# #=\204\323#$B$\"A\211\"\202\273$\237+\240\210 AA\307\240+*\210+\326\233\307\240\210\327D)B)\202\321#\210	B*\fA\211\204 *	\237)\207" [mh-thread-subject-container-hash results roots root #1=#:--dolist-temp--3109 subject clrhash nil mh-thread-container-subject gethash mh-thread-container-p error "1" mh-thread-make-message :id mh-thread-make-container :message cl-puthash 2 3 t mh-thread-ancestor-p 4 SUBJECT parent child id mh-thread-id-table #2=#:--x--3039 #3=#:--h--3040 message #4=#:--store--3042 child-container parent-container #5=#:G3046 elem #6=#:G3047 at-end-p #7=#:--arg1--3054 #8=#:--arg1--3058 last-child mh-thread-history] 7 (#$ . 52055)])
(put 'mh-thread-group-by-subject 'byte-optimizer 'byte-compile-inline-expand)
#@227 Extract message id's from REPLY-TO-HEADER.
Ideally this should have some regexp which will try to guess if a string
between < and > is a message id and not an email address. For now it will
take the last string inside angles.
(defalias 'mh-thread-process-in-reply-to #[(reply-to-header) "\303\304\"\211\247\205 \303\305\306	O\"\211\247\205 \n	TOC))\207" [reply-to-header end begin mh-search-from-end 62 60 0] 6 (#$ . 54340)])
#@45 Use the tables of FOLDER in current buffer.
(defalias 'mh-thread-set-tables #[(folder) "\306\307!\211\205\n \307K\310\216\307\311M\210\307\302!\307\303!\307\304!\307\305!\307\312!\n\307\313!\307\314!\f\307\315!\307\316!\211+\207" [#1=#:--letf-bound--3120 #2=#:--letf-save--3119 mh-thread-id-hash mh-thread-subject-hash mh-thread-id-table mh-thread-id-index-map fboundp mh-get-table ((byte-code "\203 \302	M\210\202 \303\302!\210\302\207" [#1# #2# mh-get-table fmakunbound] 2)) #[(symbol) "\212q\210	J)\207" [folder symbol] 1] mh-thread-index-id-map mh-thread-scan-line-map mh-thread-subject-container-hash mh-thread-duplicates mh-thread-history] 3 (#$ . 54779)])
#@205 Message with id, ID is the message in INDEX.
The function also checks for duplicate messages (that is multiple messages
with the same ID). These messages are put in the `mh-thread-duplicates' hash
table.
(defalias 'mh-thread-update-id-index-maps #[(id index) "\306	\"\211\203 \307\n\306\"B#\210\307\f	#\210\307\f#)\207" [id mh-thread-id-index-map old-index mh-thread-duplicates index mh-thread-index-id-map gethash cl-puthash] 7 (#$ . 55467)])
(put 'mh-thread-update-id-index-maps 'byte-optimizer 'byte-compile-inline-expand)
#@63 Regexp to recognize whether a string is a message identifier.
(defvar mh-message-id-regexp "^<.*@.*>$" (#$ . 56009))
#@107 Scan FOLDER to get info for threading.
Only information about messages in MSG-LIST are added to the tree.
(defalias 'mh-thread-generate #[(folder msg-list) "\306\307\310!!\311\216rq\210\312	!\210\n\203) \313\314\315\f\"\316\317\316\320\321\322\323	\324\325\n\"&\210eb\210\316\326,\327\330\215\210\331\332-\"\210\333,!\211,,\334.!\210\316/,\3160\2111\203j1@0\3350!2\3362.\"\2113\203P04\3374!\203~ 4\202\264 4\2115\204\212 \340\341!\210\3365-\"\206\263 56-7\342\3435\"8\344\3458\")9\346697#+):\347:8\211;\205\377 \350;\233\350;8<\316=\316><:\203\363 <@=:==\204\352 =>B><A\211<\202\322 >\237+\240\210:AA\316\240*\210)30\326?4\2113\204\316\202W\3373!\203!3\202W3\2115\204-\340\341!\210\3365-\"\206V56-7\342\3435\"8\344\3458\")9\346697#+)\3374!\203c4\202\2314\2115\204o\340\341!\210\3365-\"\206\23056-7\342\3435\"8\344\3458\")9\346697#+):\211;\203\242\351:;\"\204\242\351;:\"\204\242:4\3374!\203\3034\202\3714\2115\204\317\340\341!\210\3365-\"\206\37056-7\342\3435\"8\344\3458\")9\346697#+):\347:8\211;\205D\350;\233\350;8<\316=\316><:\2038<@=:==\204/=>B><A\211<\202>\237+\240\210:AA\316\240*\210)?\204a:@\350;\233@\350;8B\240\210)\202\232\350;8\204}:A\350;\233A\350;8B\240\210)\202\232\350;8\211BA\203\221BA\211B\202\204B:\316B\241\210):AA;\240\210;?\205::4\3374!\203\2704\202\3564\2115\204\304\340\341!\210\3365-\"\206\35556-7\342\3435\"8\344\3458\")9\346697#+):\347:8\211;\2059\350;\233\350;8<\316=\316><:\203-<@=:==\204$=>B><A\211<\202\f>\237+\240\210:AA\316\240+*\210+\3520\233\316\240\210\3530DCBC\202`\34620.#\2100/B/*1A\2111\204W */\237*\211,CD	q\210DC.\207" [#1=#:temp-buffer folder msg-list mh-scan-prog mh-progs case-fold-search get-buffer-create generate-new-buffer-name " *temp*" ((byte-code "\301!\203\n \302!\210\301\207" [#1# buffer-name kill-buffer] 2)) mh-thread-set-tables apply call-process expand-file-name nil (t nil) "-width" "10000" "-format" "%(msg)\n%{message-id}\n%{references}\n%{in-reply-to}\n%{subject}\n" mapcar #[(x) "\301\302\"\207" [x format "%s"] 3] t --cl-block-nil-- (byte-code "m?\205\f \300\301\215\210\202  \207" [--cl-block-process-message-- (byte-code "`\306 {\307y\210\310!@`\306 {\307y\210`\306 {\307y\210`\306 {\307y\210`\306 {\307y\210\307+\311	,\"\204= \312\313\307\"\210	\250\204G \312\314\307\"\210\315\307-.\316\317\"\204] \316\320\"\203i \315-\321\225\307O\202O \316\322\"\204w \316\323\"\203\203 \315-\321\211\224O\202i \324\232\203\221 \325-\"\202\243 \325\311/\"\206\240 \326\211/#-\"+\2110@0A@+)\327\f!\330\331!\f\"1\3072\30731:\203\346 1@2\31642\"\203\335 23B31A\2111\202\304 3\237+\n\211\324\232\203\371 \332\324!\206\311\n5\"\206\326\n\2115#)\211	\311\n6\"\2117\203&\326\n7\311\n8\"B8#\210\326\n	6#\210\326	\n9#)\210*\333\334\"\n++\311\n:\"\211;\205T;A@\211<\203{\335<\233+\240\210\336<\233\240\210<A\n\240\210<AA\240\210<\202\332;\203\223;A\337\340\n\341\342\343+&\240\202\332\337\340\n\341\343+\342&\211<\211<\211A@\311\n:\"\211;\203\300;A<\240\210;\202\327\n=:>\344\345<\"?\326=?>#+*\210**\210,\211@A\203 @@@\2112A@)\307AB\211C\204\377\307\202=\346C!\203C\202=C\211\204\347\350!\210\311\n:\"\206<\nD:E\337\340\n\"<\344\345<\")F\326DFE#+)\346B!\203IB\202{B\211\204T\347\350!\210\311\n:\"\206z\nD:E\337\340\n\"<\344\345<\")F\326DFE#+)G\211H\203\200\351GH\"\204\200\351HG\"\204\200GB\346B!\203\245B\202\327B\211\204\260\347\350!\210\311\n:\"\206\326\nD:E\337\340\n\"<\344\345<\")F\326DFE#+)G\352G8\211H\205\"\336H\233\336H8I\307J\307KI:\203I@JGJ=\204JKBKIA\211I\202\365K\237+\240\210GAA\307\240*\210)A\204?GL\336H\233L\336H8B\240\210)\202x\336H8\204[GM\336H\233M\336H8B\240\210)\202x\336H8\211NA\203oNA\211N\202bNG\307B\241\210)GAAH\240\210H?\205GB\346B!\203\226B\202\310B\211\204\241\347\350!\210\311\n:\"\206\307\nD:E\337\340\n\"<\344\345<\")F\326DFE#+)G\352G8\211H\205\336H\233\336H8I\307J\307KI:\203I@JGJ=\204\376JKBKIA\211I\202\346K\237+\240\210GAA\307\240+*\210+@A\211@\202\341@@\205\336\nB\346B!\2035B\202gB\211\204@\347\350!\210\311\n:\"\206f\nD:E\337\340\n\"<\344\345<\")F\326DFE#+)G\352G8\211H\205\262\336H\233\336H8I\307J\307KI:\203\246I@JGJ=\204\235JKBKIA\211I\202\205K\237+\240\210GAA\307\240*\210)@@\n\307AB\211C\204\310\307\202\346C!\203\324C\202C\211\204\337\347\350!\210\311\n:\"\206\nD:E\337\340\n\"<\344\345<\")F\326DFE#+)\346B!\203B\202DB\211\204\347\350!\210\311\n:\"\206C\nD:E\337\340\n\"<\344\345<\")F\326DFE#+)G\211H\203I\351GH\"\204I\351HG\"\204IGB\346B!\203nB\202\240B\211\204y\347\350!\210\311\n:\"\206\237\nD:E\337\340\n\"<\344\345<\")F\326DFE#+)G\352G8\211H\205\353\336H\233\336H8I\307J\307KI:\203\337I@JGJ=\204\326JKBKIA\211I\202\276K\237+\240\210GAA\307\240*\210)A\204GL\336H\233L\336H8B\240\210)\202A\336H8\204$GM\336H\233M\336H8B\240\210)\202A\336H8\211NA\2038NA\211N\202+NG\307B\241\210)GAAH\240\210H?\205\335GB\346B!\203_B\202\221B\211\204j\347\350!\210\311\n:\"\206\220\nD:E\337\340\n\"<\344\345<\")F\326DFE#+)G\352G8\211H\205\334\336H\233\336H8I\307J\307KI:\203\320I@JGJ=\204\307JKBKIA\211I\202\257K\237+\240\210GAA\307\240+-.\207" [index-line index id refs in-reply-to subject line-end-position nil read-from-string gethash throw --cl-block-process-message-- --cl-block-nil-- t string-match "^[ 	]*\\(re\\|fwd?\\)\\(\\[[0-9]*\\]\\)?:[ 	]*" "^[ 	]*\\[[^\\]][ 	]*" 0 "(fwd)$" "[ 	]+$" "" values cl-puthash mh-thread-process-in-reply-to append split-string copy-sequence mapcar mh-thread-canonicalize-id 4 3 mh-thread-make-message :id :references :subject :subject-re-p mh-thread-make-container :message mh-thread-container-p error "1" mh-thread-ancestor-p 2 subject-re-p mh-thread-scan-line-map subject-pruned-flag case-fold-search mh-thread-subject-hash #2=#:G3133 #3=#:G3134 x #4=#:G3135 mh-message-id-regexp mh-thread-id-hash mh-thread-id-index-map old-index mh-thread-duplicates mh-thread-index-id-map mh-thread-id-table container message #5=#:--x--3065 #6=#:--h--3066 #7=#:--store--3068 ancestors at-end-p child parent #8=#:--x--3039 #9=#:--h--3040 #10=#:--store--3042 child-container parent-container #11=#:G3046 elem #12=#:G3047 #13=#:--arg1--3054 #14=#:--arg1--3058 last-child] 12)] 2) maphash #[(k v) "\3028?\205\f 	B\211\207" [v roots 2] 2] mh-thread-prune-containers clrhash mh-thread-container-subject gethash mh-thread-container-p error "1" mh-thread-make-message :id mh-thread-make-container :message cl-puthash 2 3 mh-thread-ancestor-p 4 SUBJECT roots mh-thread-id-table mh-thread-subject-container-hash results root #15=#:--dolist-temp--3109 subject parent child id #8# #9# message #10# child-container parent-container #11# elem #12# at-end-p #13# #14# last-child mh-thread-history history] 15 (#$ . 56133)])
#@93 Update thread tree for FOLDER.
All messages after START-POINT are added to the thread tree.
(defalias 'mh-thread-inc #[(folder start-point) "\306 \210\307 \210b\210\310m\2043 \311\310!\211\247\203, \n	B\n\f\312 \313#\210+\310y\210)\202 \314	\"\310\315 ed|\210\316!\210\317 \210\320 \210\321!,\207" [start-point msg-list index #1=#:--x--3136 mh-thread-scan-line-map #2=#:--h--3137 mh-thread-rewind-pruning mh-remove-all-notation nil mh-get-msg-num mh-thread-parse-scan-line cl-puthash mh-thread-generate buffer-modified-p mh-thread-print-scan-lines mh-notate-deleted-and-refiled mh-notate-cur set-buffer-modified-p #3=#:--store--3139 folder old-buffer-modified-flag buffer-read-only thread-tree] 5 (#$ . 63450)])
#@188 Generate scan lines.
TREE is the hierarchical tree of messages, SCAN-LINE-MAP maps message indices
to the corresponding scan lines and LEVEL used to determine indentation of
the message.
(defalias 'mh-thread-generate-scan-lines #[(tree level) "\204 \306\207\307!\203$A@\211A@\310\n\"\310\n\"\311\\\312\306 \306!\313\314\315\fB!\"\306\"\211#\203\365 #@\211\"\203\354 \203l \316\232\203l \317$\"\203l \311\\\311\\\312 \316\232\203\206 $\311$8\203\206 \311$8$\202v \203\220 \202\222 %\3208\203\244  \204\244 \206\250 %\316\232&\"@\321\211\322%\"\323\"&\203\276 \324\202\277 \325\"\211'A@)&\203\320 \326\202\321 \327\330\"\211'AA)@(%Z\"\331\261\210*\312!\306#A\211#\204@ *!\204\377 \3328\306)\211*\203 *@)\333)\"\210*A\211*\204.\n\306\207\311\\+\306,\211-\203I-@,\333,+\"\210-A\211-\2044+\306\207" [tree message id mh-thread-id-index-map index mh-thread-duplicates nil mh-thread-container-p gethash 2 t mapcar #[(x) "\302	\"\207" [x mh-thread-scan-line-map gethash] 3] reverse 0 mh-thread-ancestor-p 4 format "%%%ss" "" "[" "<" "]" ">" truncate-string-to-width "\n" 3 mh-thread-generate-scan-lines duplicates level new-level dupl-flag force-angle-flag increment-level-flag scan-line #1=#:--dolist-temp--3140 mh-thread-last-ancestor lev square-flag x mh-thread-body-width child #2=#:--dolist-temp--3141 nlevel ch #3=#:--dolist-temp--3142] 11 (#$ . 64194)])
#@159 Parse a scan line.
If optional argument STRING is given then that is assumed to be the scan line.
Otherwise uses the line at point as the scan line to parse.
(defalias 'mh-thread-parse-scan-line #[(&optional string) "\206\n \306\307 \310 \"	\n\\	\f\\\311O\211\f\312ZO\313OF,\207" [string mh-cmd-note mh-scan-field-from-start-offset address-start mh-scan-field-from-end-offset body-start buffer-substring-no-properties line-beginning-position line-end-position 0 2 nil first-string] 6 (#$ . 65663)])
#@110 In threaded view update `mh-thread-scan-line-map'.
MSG is the message being notated with NOTATION at OFFSET.
(defalias 'mh-thread-update-scan-line-map #[(msg notation offset) "\206 \306\307!	\205 \310	\"\307\307	\f:\2034 \f@\211\205( \310\"	B	\fA\211\202 	\237+\n\n\203F \n@\fI\210\n\307\211\203l @\211\203c @\fI\210A\211\204Q -\307\207" [msg mh-thread-scan-line-map cur-scan-line mh-thread-scan-line-map-stack #1=#:G3143 map mh-get-msg-num nil gethash #2=#:G3144 old-scan-lines offset notation line #3=#:--dolist-temp--3148] 4 (#$ . 66182)])
#@66 Add COUNT spaces to each scan line in `mh-thread-scan-line-map'.
(defalias 'mh-thread-add-spaces #[(count) "\306\211\307\"\310\"m?\205; \311\312!\313\314\n\"8\n\247\2034 \n\315\306\316	\f#!\317#\210+*\320y\210\202 )\207" [count spaces msg-num mh-thread-scan-line-map old-line #1=#:--x--3152 format "%%%ss" "" mh-get-msg-num nil 3 gethash mh-thread-parse-scan-line "%s%s" cl-puthash 1 #2=#:--h--3153 #3=#:--store--3155] 5 (#$ . 66771)])
#@51 Print scan lines in THREAD-TREE in threaded mode.
(defalias 'mh-thread-print-scan-lines #[(thread-tree) "\306 Z	SZ\307\f\204 \310\311\"\202\217 \312 \307:\203\214 @\313 \307A\307:\203c @\314\"\211\203Y \315#\210)A\211\202; *\316!\317V\203\202 o\203u \320\202v \321@\321\261\210\310\311\"\210*A\211\202 *\322 *\207" [mh-cmd-note mh-scan-field-subject-start-offset mh-thread-last-ancestor mh-thread-body-width mh-index-data thread-tree window-width nil mh-thread-generate-scan-lines -2 mh-index-group-by-folder make-hash-table gethash cl-puthash hash-table-count 0 "" "\n" mh-index-create-imenu-index #1=#:G3156 x mh-thread-scan-line-map old-map #2=#:G3157 msg v] 6 (#$ . 67230)])
#@33 Generate thread view of folder.
(defalias 'mh-thread-folder #[nil "\306\307\310 \"\210\311 \210eb\210\312 \210\313edB\247\203< \314edB\315\211#\203/edB\211\316 \317\n\f#\210+	B)\202/edB:\203\230 edB@\247\203\230 edBA\247\203\230 \212edB@b\210\320 \210`edBAX\203\224 m\204\224 \321!\203\216 \322\315!\211 !\316 \"\317 \"!#\210+	B)\323y\210\202] )\202/edB\203\255 edB9\203\255 \324edB!\202\301 edB;\203\276 \325#edB\"\202\301 edB\326 $\211%\313\211&\203\344 &@\317	\315$#\210&A\211&\204\320 *\212eb\210\320 \210`dX\203.m\204.\321!\203(\322\315!'\327'$\"\203''\211()\316 *\317(*)#\210+	B))\323y\210\202\354 +\330!+\331\310 +\",ed|\210\332,!\210\333 \210\334 \210\335 \210\306\336\310 \"+\207" [msg-list msg #1=#:--x--3162 mh-thread-scan-line-map #2=#:--h--3163 #3=#:--store--3165 message "Threading %s..." buffer-name mh-thread-initialize mh-remove-all-notation nil mh-goto-msg t mh-thread-parse-scan-line cl-puthash beginning-of-line looking-at mh-get-msg-num 1 mh-seq-to-msgs mh-translate-range make-hash-table gethash mh-coalesce-msg-list mh-thread-generate mh-thread-print-scan-lines mh-notate-user-sequences mh-notate-deleted-and-refiled mh-notate-cur "Threading %s...done" mh-scan-valid-regexp #4=#:--x--3166 #5=#:--h--3167 #6=#:--store--3169 mh-current-folder #7=#:seq-hash-table #8=#:msgs #9=#:--dolist-temp--3170 v #10=#:--x--3171 #11=#:--h--3172 #12=#:--store--3174 range thread-tree] 6 (#$ . 67976)])
#@33 Toggle threaded view of folder.
(defalias 'mh-toggle-threads #[nil "\306\307!\310 \307\311>\203P \312\311!\204 \313\314!\210\307eb\210m\2045 \306\307!\211\203. \fB)\307y\210\202 \315\316\317\320\f!\"\321#\210)\203W \322 \210\323 \210\202W \324 \210\311B\n\203a \325\n\321\211#\210\326	!\210\327\307!+\207" [buffer-read-only old-buffer-modified-flag msg-at-point mh-view-ops msg-list index mh-get-msg-num nil buffer-modified-p unthread mh-valid-view-change-operation-p error "Can't unthread folder" mh-scan-folder mapcar #[(x) "\301\302\"\207" [x format "%s"] 3] mh-coalesce-msg-list t mh-index-insert-folder-headers mh-notate-cur mh-thread-folder mh-goto-msg set-buffer-modified-p mh-recenter mh-current-folder mh-index-data] 7 (#$ . 69450) nil])
#@53 Forget the message INDEX from the threading tables.
(defalias 'mh-thread-forget-message #[(index) "\306	\"\306\n\"\306\n\"\n\307	\"\210\307\"\210\247\203& \f\232\202) \f=\2038 \n\2048 \307\n\"\202y \247\203C \f\232\202F \f=\203c \310\n\n@#\210\310\n@\n	#\210\310\n\nA#\202y \n\f\311\n\"\310\f#++\207" [index mh-thread-index-id-map id mh-thread-id-index-map id-index mh-thread-duplicates gethash remhash cl-puthash remove duplicates mh-thread-scan-line-map #1=#:--x--3191 #2=#:--h--3192 #3=#:--store--3194] 4 (#$ . 70220)])
#@65 Find the number of spaces by which current message is indented.
(defalias 'mh-thread-current-indentation-level #[nil "\212	\\\n\\\305\\\306\307 \210\fu\210\310\311f\312\"\203\" T\311u\210\202 +\207" [mh-cmd-note mh-scan-date-flag-width mh-scan-date-width level address-start-offset 1 0 beginning-of-line char-equal nil 32] 3 (#$ . 70785)])
#@98 Jump to next sibling.
With non-nil optional argument PREVIOUS-FLAG jump to the previous sibling.
(defalias 'mh-thread-next-sibling #[(&optional previous-flag) "\306>\204 \307\310!\210\202 m\203 \307\311!\210\312 \210`\313\314 \n\204] \f\203+ \315\202, \316y\317\232\203] m\204] \314 \211	\232\203D \320\202Y 	W\203Y \321\322\f\203T \323\202U \324\"\210\325)\202 \n\320=\203h \326 \202\202 \n\325=\203s b\202\202 \321\322\f\203} \323\202~ \324\"\210b+\207" [mh-view-ops my-level done point previous-flag level unthread error "Folder isn't threaded" "No message at point" beginning-of-line nil mh-thread-current-indentation-level -1 1 0 success message "No %s sibling" "previous" "next" failure mh-maybe-show] 4 (#$ . 71138) nil])
#@27 Jump to previous sibling.
(defalias 'mh-thread-previous-sibling #[nil "\300\301!\207" [mh-thread-next-sibling t] 2 (#$ . 71887) nil])
#@44 Jump to immediate ancestor in thread tree.
(defalias 'mh-thread-immediate-ancestor #[nil "\303 \210`\304 \305Z\306	\307W?\2053 \204+ \310y\307\232\203+ 	\304 \232\203 \311\211\203 \2042 \nb\210+\207" [done ancestor-level point beginning-of-line mh-thread-current-indentation-level 2 nil 0 -1 t] 4 (#$ . 72027)])
#@156 Jump to the ancestor of current message.
If optional argument THREAD-ROOT-FLAG is non-nil then jump to the root of the
thread tree the message belongs to.
(defalias 'mh-thread-ancestor #[(&optional thread-root-flag) "\303 \210\304>\204 \305\306!\210\202 m\203 \305\307!\210\310 \n\203) \311 \204 \312 \202: 	\313\232\2035 \314\315!\202: \311 \210\312 )\207" [mh-view-ops current-level thread-root-flag beginning-of-line unthread error "Folder isn't threaded" "No message at point" mh-thread-current-indentation-level mh-thread-immediate-ancestor mh-maybe-show 1 message "Message has no ancestor"] 2 (#$ . 72355) "P"])
#@206 Return a region containing the current message and its children.
The result is returned as a list of two elements. The first is the point at the
start of the region and the second is the point at the end.
(defalias 'mh-thread-find-children #[nil "\306 \210m?\205. 	\\\n\\\307\\\310 \311\211`\312\211\313T\"\314\"\311y\210\315\316\215\210`,D\207" [mh-cmd-note mh-scan-date-flag-width mh-scan-date-width begin spaces level beginning-of-line 1 mh-thread-current-indentation-level nil format "%%%ss" "" --cl-block-nil-- (byte-code "m?\205& u\210\302	\303`\304 \"\"\305\232\204  \306 \210\307u\210\310\311\312\"\210\312y\210\202  \207" [address-start-offset spaces string-match buffer-substring-no-properties line-end-position 0 beginning-of-line -1 throw --cl-block-nil-- nil] 5) address-start-offset] 4 (#$ . 72986)])
#@68 Mark current message and all its children for subsequent deletion.
(defalias 'mh-thread-delete #[nil "\304>\204\n \305\306!\207m\203 \305\307!\207\310 \212	@b\210\311 \210`	\211A@)X\203< m\204< \312!\2036 \313\314!\210\315y\210\202 )\316 )\207" [mh-view-ops region x mh-scan-valid-regexp unthread error "Folder isn't threaded" "No message at point" mh-thread-find-children beginning-of-line looking-at mh-delete-a-msg nil 1 mh-next-msg] 3 (#$ . 73818) nil])
#@67 Mark current message and all its children for refiling to FOLDER.
(defalias 'mh-thread-refile #[(folder) "\305>\204\n \306\307!\207m\203 \306\310!\207\311 \212	@b\210\312 \210`	\211A@)X\203= m\204= \313!\2037 \314\315\f\"\210\316y\210\202 )\317 )\207" [mh-view-ops region x mh-scan-valid-regexp folder unthread error "Folder isn't threaded" "No message at point" mh-thread-find-children beginning-of-line looking-at mh-refile-a-msg nil 1 mh-next-msg] 4 (#$ . 74288) (list (intern (mh-prompt-for-refile-folder)))])
#@44 Toggle tick mark of all messages in RANGE.
(defalias 'mh-toggle-tick #[(range) "\204 \306\307!\210\310!\211A\311\311\247\203f \312\313\211#\203\226\211\n\235\203I \fB	\314	A\"\241\210	A\204? \311\315\316 \"\210\202b BDB\317\316 \"\210))\202\226:\203\340 @\247\203\340 A\247\203\340 \212@b\210\320 \210`AX\203\334 m\204\334 \321 !\203\326 \322\313!\211\n\235\203\274 \fB	\314	A\"\241\210	A\204\262 \311\315\316 \"\210\202\325 BDB\317\316 \"\210))\323y\210\202 )\202\226\203\357 9\203\357 \324!\202\375 ;\203\374 \325!\"\202\375 \326 \"\211#\311\211$\203#$@\327\313\"#\210$A\211$\204*\212eb\210\320 \210`dX\203\225m\204\225\321 !\203\217\322\313!%\330%\"\"\203\216%\211\n\235\203t\fB	\314	A\"\241\210	A\204j\311\315\316 \"\210\202\215BDB\317\316 \"\210)))\323y\210\202++\331\311\313$\210\332\f\"\210&\205\260\333\"\210\334\f\",\207" [mh-tick-seq tick-seq tick-seq-msgs ticked unticked range error "Enable ticking by customizing `mh-tick-seq'" mh-find-seq nil mh-goto-msg t delq mh-remove-sequence-notation mh-colors-in-use-p mh-add-sequence-notation beginning-of-line looking-at mh-get-msg-num 1 mh-seq-to-msgs mh-translate-range make-hash-table cl-puthash gethash mh-add-msgs-to-seq mh-undefine-sequence mh-index-add-to-sequence mh-index-delete-from-sequence msg mh-last-seq-used mh-seq-list mh-scan-valid-regexp mh-current-folder #1=#:seq-hash-table #2=#:msgs #3=#:--dolist-temp--3195 v mh-index-data] 6 (#$ . 74814) (list (mh-interactive-range "Tick"))])
#@97 Limit to messages in `mh-tick-seq'.

Use \<mh-folder-mode-map>\[mh-widen] to undo this command.
(defalias 'mh-narrow-to-tick #[nil "\204 \301\302!\207\303!A\204 \304\305\"\207\306!\207" [mh-tick-seq error "Enable ticking by customizing `mh-tick-seq'" mh-find-seq message "No messages in %s sequence" mh-narrow-to-seq] 3 (#$ . 76421) nil])
(provide 'mh-seq)
