Mercurial > emacs
annotate lisp/mh-e/mh-seq.el @ 88237:a98285deef68
(set-rmail-inbox-list): Rewrite to only set inbox
list temporarily for a session.
author | Henrik Enberg <henrik.enberg@telia.com> |
---|---|
date | Fri, 20 Jan 2006 16:27:37 +0000 |
parents | d7ddb3e565de |
children |
rev | line source |
---|---|
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1 ;;; mh-seq.el --- MH-E sequences support |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
2 |
88155 | 3 ;; Copyright (C) 1993, 1995, |
4 ;; 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
5 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
6 ;; Author: Bill Wohler <wohler@newt.com> |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
7 ;; Maintainer: Bill Wohler <wohler@newt.com> |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
8 ;; Keywords: mail |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
9 ;; See: mh-e.el |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
10 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
11 ;; This file is part of GNU Emacs. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
12 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
13 ;; GNU Emacs is free software; you can redistribute it and/or modify |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
14 ;; it under the terms of the GNU General Public License as published by |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
15 ;; the Free Software Foundation; either version 2, or (at your option) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
16 ;; any later version. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
17 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
18 ;; GNU Emacs is distributed in the hope that it will be useful, |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
19 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
20 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
21 ;; GNU General Public License for more details. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
22 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
23 ;; You should have received a copy of the GNU General Public License |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
24 ;; along with GNU Emacs; see the file COPYING. If not, write to the |
88155 | 25 ;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
26 ;; Boston, MA 02110-1301, USA. | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
27 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
28 ;;; Commentary: |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
29 ;; |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
30 ;; This tries to implement the algorithm described at: |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
31 ;; http://www.jwz.org/doc/threading.html |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
32 ;; It is also a start to implementing the IMAP Threading extension RFC. The |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
33 ;; implementation lacks the reference and subject canonicalization of the |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
34 ;; RFC. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
35 ;; |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
36 ;; In the presentation buffer, children messages are shown indented with |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
37 ;; either [ ] or < > around them. Square brackets ([ ]) denote that the |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
38 ;; algorithm can point out some headers which when taken together implies |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
39 ;; that the unindented message is an ancestor of the indented message. If |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
40 ;; no such proof exists then angles (< >) are used. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
41 ;; |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
42 ;; Some issues and problems are as follows: |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
43 ;; |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
44 ;; (1) Scan truncates the fields at length 512. So longer references: |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
45 ;; headers get mutilated. The same kind of MH format string works when |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
46 ;; composing messages. Is there a way to avoid this? My scan command |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
47 ;; is as follows: |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
48 ;; scan +folder -width 10000 \ |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
49 ;; -format "%(msg)\n%{message-id}\n%{references}\n%{subject}\n" |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
50 ;; I would really appreciate it if someone would help me with this. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
51 ;; |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
52 ;; (2) Implement heuristics to recognize message identifiers in |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
53 ;; In-Reply-To: header. Right now it just assumes that the last text |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
54 ;; between angles (< and >) is the message identifier. There is the |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
55 ;; chance that this will incorrectly use an email address like a |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
56 ;; message identifier. |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
57 ;; |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
58 ;; (3) Error checking of found message identifiers should be done. |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
59 ;; |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
60 ;; (4) Since this breaks the assumption that message indices increase as |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
61 ;; one goes down the buffer, the binary search based mh-goto-msg |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
62 ;; doesn't work. I have a simpler replacement which may be less |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
63 ;; efficient. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
64 ;; |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
65 ;; (5) Better canonicalizing for message identifier and subject strings. |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
66 ;; |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
67 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
68 ;; Internal support for MH-E package. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
69 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
70 ;;; Change Log: |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
71 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
72 ;;; Code: |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
73 |
88155 | 74 ;;(message "> mh-seq") |
75 (eval-when-compile (require 'mh-acros)) | |
76 (mh-require-cl) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
77 |
88155 | 78 (require 'mh-buffers) |
79 (require 'mh-e) | |
80 ;;(message "< mh-seq") | |
81 | |
82 | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
83 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
84 ;;; Data structures (used in message threading)... |
88155 | 85 |
86 (mh-defstruct (mh-thread-message (:conc-name mh-message-) | |
87 (:constructor mh-thread-make-message)) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
88 (id nil) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
89 (references ()) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
90 (subject "") |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
91 (subject-re-p nil)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
92 |
88155 | 93 (mh-defstruct (mh-thread-container (:conc-name mh-container-) |
94 (:constructor mh-thread-make-container)) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
95 message parent children |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
96 (real-child-p t)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
97 |
88155 | 98 |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
99 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
100 ;;; Internal variables: |
88155 | 101 |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
102 (defvar mh-last-seq-used nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
103 "Name of seq to which a msg was last added.") |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
104 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
105 (defvar mh-non-seq-mode-line-annotation nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
106 "Saved value of `mh-mode-line-annotation' when narrowed to a seq.") |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
107 |
88155 | 108 |
109 | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
110 ;;; Maps and hashes... |
88155 | 111 |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
112 (defvar mh-thread-id-hash nil |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
113 "Hashtable used to canonicalize message identifiers.") |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
114 (defvar mh-thread-subject-hash nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
115 "Hashtable used to canonicalize subject strings.") |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
116 (defvar mh-thread-id-table nil |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
117 "Thread ID table maps from message identifiers to message containers.") |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
118 (defvar mh-thread-id-index-map nil |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
119 "Table to look up message index number from message identifier.") |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
120 (defvar mh-thread-index-id-map nil |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
121 "Table to look up message identifier from message index.") |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
122 (defvar mh-thread-scan-line-map nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
123 "Map of message index to various parts of the scan line.") |
88155 | 124 (defvar mh-thread-scan-line-map-stack nil |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
125 "Old map of message index to various parts of the scan line. |
88155 | 126 This is the original map that is stored when the folder is |
127 narrowed.") | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
128 (defvar mh-thread-subject-container-hash nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
129 "Hashtable used to group messages by subject.") |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
130 (defvar mh-thread-duplicates nil |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
131 "Hashtable used to associate messages with the same message identifier.") |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
132 (defvar mh-thread-history () |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
133 "Variable to remember the transformations to the thread tree. |
88155 | 134 When new messages are added, these transformations are rewound, |
135 then the links are added from the newly seen messages. Finally | |
136 the transformations are redone to get the new thread tree. This | |
137 makes incremental threading easier.") | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
138 (defvar mh-thread-body-width nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
139 "Width of scan substring that contains subject and body of message.") |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
140 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
141 (make-variable-buffer-local 'mh-thread-id-hash) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
142 (make-variable-buffer-local 'mh-thread-subject-hash) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
143 (make-variable-buffer-local 'mh-thread-id-table) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
144 (make-variable-buffer-local 'mh-thread-id-index-map) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
145 (make-variable-buffer-local 'mh-thread-index-id-map) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
146 (make-variable-buffer-local 'mh-thread-scan-line-map) |
88155 | 147 (make-variable-buffer-local 'mh-thread-scan-line-map-stack) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
148 (make-variable-buffer-local 'mh-thread-subject-container-hash) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
149 (make-variable-buffer-local 'mh-thread-duplicates) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
150 (make-variable-buffer-local 'mh-thread-history) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
151 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
152 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
153 (defun mh-delete-seq (sequence) |
88155 | 154 "Delete SEQUENCE. |
155 | |
156 You are prompted for the sequence to delete. Note that this | |
157 deletes only the sequence, not the messages in the sequence. If | |
158 you want to delete the messages, use \"\\[universal-argument] | |
159 \\[mh-delete-msg]\"." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
160 (interactive (list (mh-read-seq-default "Delete" t))) |
88155 | 161 (let ((msg-list (mh-seq-to-msgs sequence)) |
162 (internal-flag (mh-internal-seq sequence)) | |
163 (folders-changed (list mh-current-folder))) | |
164 (mh-iterate-on-range msg sequence | |
165 (mh-remove-sequence-notation msg internal-flag)) | |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
166 (mh-undefine-sequence sequence '("all")) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
167 (mh-delete-seq-locally sequence) |
88155 | 168 (when mh-index-data |
169 (setq folders-changed | |
170 (append folders-changed | |
171 (mh-index-delete-from-sequence sequence msg-list)))) | |
172 (when (and (eq sequence mh-unseen-seq) (mh-speed-flists-active-p)) | |
173 (apply #'mh-speed-flists t folders-changed)))) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
174 |
88155 | 175 ;; Shush compiler. |
176 (eval-when-compile (defvar view-exit-action)) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
177 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
178 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
179 (defun mh-list-sequences () |
88155 | 180 "List all sequences in folder. |
181 | |
182 The list appears in a buffer named \"*MH-E Sequences*\"." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
183 (interactive) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
184 (let ((folder mh-current-folder) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
185 (temp-buffer mh-sequences-buffer) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
186 (seq-list mh-seq-list) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
187 (max-len 0)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
188 (with-output-to-temp-buffer temp-buffer |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
189 (save-excursion |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
190 (set-buffer temp-buffer) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
191 (erase-buffer) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
192 (message "Listing sequences ...") |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
193 (insert "Sequences in folder " folder ":\n") |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
194 (let ((seq-list seq-list)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
195 (while seq-list |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
196 (setq max-len |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
197 (max (length (symbol-name (mh-seq-name (pop seq-list)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
198 max-len))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
199 (setq max-len (+ 2 max-len))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
200 (while seq-list |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
201 (let ((name (mh-seq-name (car seq-list))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
202 (sorted-seq-msgs |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
203 (mh-coalesce-msg-list |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
204 (sort (copy-sequence (mh-seq-msgs (car seq-list))) '<))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
205 name-spec) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
206 (insert (setq name-spec (format (format "%%%ss:" max-len) name))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
207 (while sorted-seq-msgs |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
208 (let ((next-element (format " %s" (pop sorted-seq-msgs)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
209 (when (>= (+ (current-column) (length next-element)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
210 (window-width)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
211 (insert "\n") |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
212 (insert (format (format "%%%ss" (length name-spec)) ""))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
213 (insert next-element))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
214 (insert "\n")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
215 (setq seq-list (cdr seq-list))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
216 (goto-char (point-min)) |
88155 | 217 (view-mode-enter) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
218 (setq view-exit-action 'kill-buffer) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
219 (message "Listing sequences...done"))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
220 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
221 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
222 (defun mh-msg-is-in-seq (message) |
88155 | 223 "Display the sequences in which the current message appears. |
224 | |
225 Use a prefix argument to display the sequences in which another | |
226 MESSAGE appears." | |
227 (interactive "P") | |
228 (if (not message) | |
229 (setq message (mh-get-msg-num t))) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
230 (let* ((dest-folder (loop for seq in mh-refile-list |
88155 | 231 when (member message (cdr seq)) return (car seq) |
232 finally return nil)) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
233 (deleted-flag (unless dest-folder (member message mh-delete-list)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
234 (message "Message %d%s is in sequences: %s" |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
235 message |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
236 (cond (dest-folder (format " (to be refiled to %s)" dest-folder)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
237 (deleted-flag (format " (to be deleted)")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
238 (t "")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
239 (mapconcat 'concat |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
240 (mh-list-to-string (mh-seq-containing-msg message t)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
241 " ")))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
242 |
88155 | 243 ;; Shush compiler |
244 (eval-when-compile | |
245 (defvar tool-bar-map) | |
246 (defvar tool-bar-mode)) | |
247 | |
248 (make-variable-buffer-local 'mh-non-seq-mode-line-annotation) | |
249 | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
250 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
251 (defun mh-narrow-to-seq (sequence) |
88155 | 252 "Restrict display to messages in SEQUENCE. |
253 | |
254 You are prompted for the name of the sequence. What this command | |
255 does is show only those messages that are in the selected | |
256 sequence in the MH-Folder buffer. In addition, it limits further | |
257 MH-E searches to just those messages. | |
258 | |
259 When you want to widen the view to all your messages again, use | |
260 \\[mh-widen]." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
261 (interactive (list (mh-read-seq "Narrow to" t))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
262 (with-mh-folder-updating (t) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
263 (cond ((mh-seq-to-msgs sequence) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
264 (mh-remove-all-notation) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
265 (let ((eob (point-max)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
266 (msg-at-cursor (mh-get-msg-num nil))) |
88155 | 267 (push mh-thread-scan-line-map mh-thread-scan-line-map-stack) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
268 (setq mh-thread-scan-line-map (make-hash-table :test #'eql)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
269 (mh-copy-seq-to-eob sequence) |
88155 | 270 (push (buffer-substring-no-properties (point-min) eob) |
271 mh-folder-view-stack) | |
272 (delete-region (point-min) eob) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
273 (mh-notate-deleted-and-refiled) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
274 (mh-notate-cur) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
275 (when msg-at-cursor (mh-goto-msg msg-at-cursor t t)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
276 (setq mh-non-seq-mode-line-annotation mh-mode-line-annotation) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
277 (setq mh-mode-line-annotation (symbol-name sequence)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
278 (mh-make-folder-mode-line) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
279 (mh-recenter nil) |
88155 | 280 (when (and (boundp 'tool-bar-mode) tool-bar-mode) |
281 (set (make-local-variable 'tool-bar-map) | |
282 mh-folder-seq-tool-bar-map) | |
283 (when (buffer-live-p (get-buffer mh-show-buffer)) | |
284 (save-excursion | |
285 (set-buffer (get-buffer mh-show-buffer)) | |
286 (set (make-local-variable 'tool-bar-map) | |
287 mh-show-seq-tool-bar-map)))) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
288 (push 'widen mh-view-ops))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
289 (t |
88155 | 290 (error "No messages in sequence %s" (symbol-name sequence)))))) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
291 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
292 ;;;###mh-autoload |
88155 | 293 (defun mh-put-msg-in-seq (range sequence) |
294 "Add RANGE to SEQUENCE\\<mh-folder-mode-map>. | |
295 | |
296 Give this command a RANGE and you can add all the messages in a | |
297 sequence to another sequence (for example, | |
298 \"\\[universal-argument] \\[mh-put-msg-in-seq] SourceSequence RET | |
299 DestSequence RET\"). Check the documentation of | |
300 `mh-interactive-range' to see how RANGE is read in interactive | |
301 use." | |
302 (interactive (list (mh-interactive-range "Add messages from") | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
303 (mh-read-seq-default "Add to" nil))) |
88155 | 304 (unless (mh-valid-seq-p sequence) |
305 (error "Can't put message in invalid sequence %s" sequence)) | |
306 (let* ((internal-seq-flag (mh-internal-seq sequence)) | |
307 (original-msgs (mh-seq-msgs (mh-find-seq sequence))) | |
308 (folders (list mh-current-folder)) | |
309 (msg-list (mh-range-to-msg-list range))) | |
310 (mh-add-msgs-to-seq msg-list sequence nil t) | |
311 (mh-iterate-on-range m range | |
312 (unless (memq m original-msgs) | |
313 (mh-add-sequence-notation m internal-seq-flag))) | |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
314 (if (not internal-seq-flag) |
88155 | 315 (setq mh-last-seq-used sequence)) |
316 (when mh-index-data | |
317 (setq folders | |
318 (append folders (mh-index-add-to-sequence sequence msg-list)))) | |
319 (when (and (eq sequence mh-unseen-seq) (mh-speed-flists-active-p)) | |
320 (apply #'mh-speed-flists t folders)))) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
321 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
322 (defun mh-valid-view-change-operation-p (op) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
323 "Check if the view change operation can be performed. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
324 OP is one of 'widen and 'unthread." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
325 (cond ((eq (car mh-view-ops) op) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
326 (pop mh-view-ops)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
327 (t nil))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
328 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
329 ;;;###mh-autoload |
88155 | 330 (defun mh-widen (&optional all-flag) |
331 "Remove last restriction. | |
332 | |
333 Each limit or sequence restriction can be undone in turn with | |
334 this command. Give this command a prefix argument ALL-FLAG to | |
335 remove all limits and sequence restrictions." | |
336 (interactive "P") | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
337 (let ((msg (mh-get-msg-num nil))) |
88155 | 338 (when mh-folder-view-stack |
339 (cond (all-flag | |
340 (while (cdr mh-view-ops) | |
341 (setq mh-view-ops (cdr mh-view-ops))) | |
342 (when (eq (car mh-view-ops) 'widen) | |
343 (setq mh-view-ops (cdr mh-view-ops)))) | |
344 ((mh-valid-view-change-operation-p 'widen) nil) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
345 ((memq 'widen mh-view-ops) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
346 (while (not (eq (car mh-view-ops) 'widen)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
347 (setq mh-view-ops (cdr mh-view-ops))) |
88155 | 348 (setq mh-view-ops (cdr mh-view-ops))) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
349 (t (error "Widening is not applicable"))) |
88155 | 350 ;; If ALL-FLAG is non-nil then rewind stacks |
351 (when all-flag | |
352 (while (cdr mh-thread-scan-line-map-stack) | |
353 (setq mh-thread-scan-line-map-stack | |
354 (cdr mh-thread-scan-line-map-stack))) | |
355 (while (cdr mh-folder-view-stack) | |
356 (setq mh-folder-view-stack (cdr mh-folder-view-stack)))) | |
357 (setq mh-thread-scan-line-map (pop mh-thread-scan-line-map-stack)) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
358 (with-mh-folder-updating (t) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
359 (delete-region (point-min) (point-max)) |
88155 | 360 (insert (pop mh-folder-view-stack)) |
361 (mh-remove-all-notation) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
362 (setq mh-mode-line-annotation mh-non-seq-mode-line-annotation) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
363 (mh-make-folder-mode-line)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
364 (if msg |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
365 (mh-goto-msg msg t t)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
366 (mh-notate-deleted-and-refiled) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
367 (mh-notate-user-sequences) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
368 (mh-notate-cur) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
369 (mh-recenter nil))) |
88155 | 370 (when (and (null mh-folder-view-stack) (boundp 'tool-bar-mode) tool-bar-mode) |
371 (set (make-local-variable 'tool-bar-map) mh-folder-tool-bar-map) | |
372 (when (buffer-live-p (get-buffer mh-show-buffer)) | |
373 (save-excursion | |
374 (set-buffer (get-buffer mh-show-buffer)) | |
375 (set (make-local-variable 'tool-bar-map) mh-show-tool-bar-map))))) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
376 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
377 ;; FIXME? We may want to clear all notations and add one for current-message |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
378 ;; and process user sequences. |
88155 | 379 ;;;###mh-autoload |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
380 (defun mh-notate-deleted-and-refiled () |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
381 "Notate messages marked for deletion or refiling. |
88155 | 382 Messages to be deleted are given by `mh-delete-list' while |
383 messages to be refiled are present in `mh-refile-list'." | |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
384 (let ((refiled-hash (make-hash-table)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
385 (deleted-hash (make-hash-table))) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
386 (dolist (msg mh-delete-list) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
387 (setf (gethash msg deleted-hash) t)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
388 (dolist (dest-msg-list mh-refile-list) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
389 (dolist (msg (cdr dest-msg-list)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
390 (setf (gethash msg refiled-hash) t))) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
391 (mh-iterate-on-messages-in-region msg (point-min) (point-max) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
392 (cond ((gethash msg refiled-hash) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
393 (mh-notate nil mh-note-refiled mh-cmd-note)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
394 ((gethash msg deleted-hash) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
395 (mh-notate nil mh-note-deleted mh-cmd-note)))))) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
396 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
397 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
398 |
88155 | 399 ;;; Commands to manipulate sequences. |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
400 |
88155 | 401 ;; Sequences are stored in an alist of the form: |
402 ;; ((seq-name msgs ...) (seq-name msgs ...) ...) | |
403 | |
404 (defvar mh-sequence-history ()) | |
405 | |
406 ;;;###mh-autoload | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
407 (defun mh-read-seq-default (prompt not-empty) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
408 "Read and return sequence name with default narrowed or previous sequence. |
88155 | 409 PROMPT is the prompt to use when reading. If NOT-EMPTY is non-nil |
410 then a non-empty sequence is read." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
411 (mh-read-seq prompt not-empty |
88155 | 412 (or mh-last-seq-used |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
413 (car (mh-seq-containing-msg (mh-get-msg-num nil) nil))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
414 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
415 (defun mh-read-seq (prompt not-empty &optional default) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
416 "Read and return a sequence name. |
88155 | 417 Prompt with PROMPT, raise an error if the sequence is empty and |
418 the NOT-EMPTY flag is non-nil, and supply an optional DEFAULT | |
419 sequence. A reply of '%' defaults to the first sequence | |
420 containing the current message." | |
421 (let* ((input (completing-read (format "%s sequence%s: " prompt | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
422 (if default |
88155 | 423 (format " (default %s)" default) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
424 "")) |
88155 | 425 (mh-seq-names mh-seq-list) |
426 nil nil nil 'mh-sequence-history)) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
427 (seq (cond ((equal input "%") |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
428 (car (mh-seq-containing-msg (mh-get-msg-num t) nil))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
429 ((equal input "") default) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
430 (t (intern input)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
431 (msgs (mh-seq-to-msgs seq))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
432 (if (and (null msgs) not-empty) |
88155 | 433 (error "No messages in sequence %s" seq)) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
434 seq)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
435 |
88155 | 436 |
437 | |
438 ;;; Functions to read ranges with completion... | |
439 | |
440 (defvar mh-range-seq-names) | |
441 (defvar mh-range-history ()) | |
442 (defvar mh-range-completion-map (copy-keymap minibuffer-local-completion-map)) | |
443 (define-key mh-range-completion-map " " 'self-insert-command) | |
444 | |
445 (defun mh-range-completion-function (string predicate flag) | |
446 "Programmable completion of message ranges. | |
447 STRING is the user input that is to be completed. PREDICATE if non-nil is a | |
448 function used to filter the possible choices and FLAG determines whether the | |
449 completion is over." | |
450 (let* ((candidates mh-range-seq-names) | |
451 (last-char (and (not (equal string "")) | |
452 (aref string (1- (length string))))) | |
453 (last-word (cond ((null last-char) "") | |
454 ((memq last-char '(? ?- ?:)) "") | |
455 (t (car (last (split-string string "[ -:]+")))))) | |
456 (prefix (substring string 0 (- (length string) (length last-word))))) | |
457 (cond ((eq flag nil) | |
458 (let ((res (try-completion last-word candidates predicate))) | |
459 (cond ((null res) nil) | |
460 ((eq res t) t) | |
461 (t (concat prefix res))))) | |
462 ((eq flag t) | |
463 (all-completions last-word candidates predicate)) | |
464 ((eq flag 'lambda) | |
465 (loop for x in candidates | |
466 when (equal x last-word) return t | |
467 finally return nil))))) | |
468 | |
469 ;;;###mh-autoload | |
470 (defun mh-read-range (prompt &optional folder default | |
471 expand-flag ask-flag number-as-range-flag) | |
472 "Read a message range with PROMPT. | |
473 | |
474 If FOLDER is non-nil then a range is read from that folder, otherwise | |
475 use `mh-current-folder'. | |
476 | |
477 If DEFAULT is a string then use that as default range to return. If | |
478 DEFAULT is nil then ask user with default answer a range based on the | |
479 sequences that seem relevant. Finally if DEFAULT is t, try to avoid | |
480 prompting the user. Unseen messages, if present, are returned. If the | |
481 folder has fewer than `mh-large-folder' messages then \"all\" messages | |
482 are returned. Finally as a last resort prompt the user. | |
483 | |
484 If EXPAND-FLAG is non-nil then a list of message numbers corresponding | |
485 to the input is returned. If this list is empty then an error is | |
486 raised. If EXPAND-FLAG is nil just return the input string. In this | |
487 case we don't check if the range is empty. | |
488 | |
489 If ASK-FLAG is non-nil, then the user is always queried for a range of | |
490 messages. If ASK-FLAG is nil, then the function checks if the unseen | |
491 sequence is non-empty. If that is the case, `mh-unseen-seq', or the | |
492 list of messages in it depending on the value of EXPAND, is returned. | |
493 Otherwise if the folder has fewer than `mh-large-folder' messages then | |
494 the list of messages corresponding to \"all\" is returned. If neither | |
495 of the above holds then as a last resort the user is queried for a | |
496 range of messages. | |
497 | |
498 If NUMBER-AS-RANGE-FLAG is non-nil, then if a number, N is read as | |
499 input, it is interpreted as the range \"last:N\". | |
500 | |
501 This function replaces the existing function `mh-read-msg-range'. | |
502 Calls to: | |
503 | |
504 (mh-read-msg-range folder flag) | |
505 | |
506 should be replaced with: | |
507 | |
508 (mh-read-range \"Suitable prompt\" folder t nil flag | |
509 mh-interpret-number-as-range-flag)" | |
510 (setq default (or default mh-last-seq-used | |
511 (car (mh-seq-containing-msg (mh-get-msg-num nil) t))) | |
512 prompt (format "%s range" prompt)) | |
513 (let* ((folder (or folder mh-current-folder)) | |
514 (guess (eq default t)) | |
515 (counts (and guess (mh-folder-size folder))) | |
516 (unseen (and counts (> (cadr counts) 0))) | |
517 (large (and counts mh-large-folder (> (car counts) mh-large-folder))) | |
518 (default (cond ((and guess large) (format "last:%s" mh-large-folder)) | |
519 ((and guess (not large)) "all") | |
520 ((stringp default) default) | |
521 ((symbolp default) (symbol-name default)))) | |
522 (prompt (cond ((and guess large default) | |
523 (format "%s (folder has %s messages, default %s)" | |
524 prompt (car counts) default)) | |
525 ((and guess large) | |
526 (format "%s (folder has %s messages)" | |
527 prompt (car counts))) | |
528 (default | |
529 (format "%s (default %s)" prompt default)))) | |
530 (minibuffer-local-completion-map mh-range-completion-map) | |
531 (seq-list (if (eq folder mh-current-folder) | |
532 mh-seq-list | |
533 (mh-read-folder-sequences folder nil))) | |
534 (mh-range-seq-names | |
535 (append '(("first") ("last") ("all") ("prev") ("next")) | |
536 (mh-seq-names seq-list))) | |
537 (input (cond ((and (not ask-flag) unseen) (symbol-name mh-unseen-seq)) | |
538 ((and (not ask-flag) (not large)) "all") | |
539 (t (completing-read (format "%s: " prompt) | |
540 'mh-range-completion-function nil nil | |
541 nil 'mh-range-history default)))) | |
542 msg-list) | |
543 (when (and number-as-range-flag | |
544 (string-match "^[ \t]*\\([0-9]+\\)[ \t]*$" input)) | |
545 (setq input (concat "last:" (match-string 1 input)))) | |
546 (cond ((not expand-flag) input) | |
547 ((assoc (intern input) seq-list) | |
548 (cdr (assoc (intern input) seq-list))) | |
549 ((setq msg-list (mh-translate-range folder input)) msg-list) | |
550 (t (error "No messages in range %s" input))))) | |
551 | |
552 ;;;###mh-autoload | |
553 (defun mh-translate-range (folder expr) | |
554 "In FOLDER, translate the string EXPR to a list of messages numbers." | |
555 (save-excursion | |
556 (let ((strings (delete "" (split-string expr "[ \t\n]"))) | |
557 (result ())) | |
558 (ignore-errors | |
559 (apply #'mh-exec-cmd-quiet nil "mhpath" folder strings) | |
560 (set-buffer mh-temp-buffer) | |
561 (goto-char (point-min)) | |
562 (while (re-search-forward "/\\([0-9]*\\)$" nil t) | |
563 (push (car (read-from-string (match-string 1))) result)) | |
564 (nreverse result))))) | |
565 | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
566 (defun mh-seq-names (seq-list) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
567 "Return an alist containing the names of the SEQ-LIST." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
568 (mapcar (lambda (entry) (list (symbol-name (mh-seq-name entry)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
569 seq-list)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
570 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
571 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
572 (defun mh-rename-seq (sequence new-name) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
573 "Rename SEQUENCE to have NEW-NAME." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
574 (interactive (list (mh-read-seq "Old" t) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
575 (intern (read-string "New sequence name: ")))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
576 (let ((old-seq (mh-find-seq sequence))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
577 (or old-seq |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
578 (error "Sequence %s does not exist" sequence)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
579 ;; create new sequence first, since it might raise an error. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
580 (mh-define-sequence new-name (mh-seq-msgs old-seq)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
581 (mh-undefine-sequence sequence (mh-seq-msgs old-seq)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
582 (rplaca old-seq new-name))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
583 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
584 ;;;###mh-autoload |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
585 (defun mh-notate-cur () |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
586 "Mark the MH sequence cur. |
88155 | 587 In addition to notating the current message with `mh-note-cur' |
588 the function uses `overlay-arrow-position' to put a marker in the | |
589 fringe." | |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
590 (let ((cur (car (mh-seq-to-msgs 'cur)))) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
591 (when (and cur (mh-goto-msg cur t t)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
592 (beginning-of-line) |
88155 | 593 (when (looking-at mh-scan-good-msg-regexp) |
594 (mh-notate nil mh-note-cur mh-cmd-note)) | |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
595 (setq mh-arrow-marker (set-marker mh-arrow-marker (point))) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
596 (setq overlay-arrow-position mh-arrow-marker)))) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
597 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
598 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
599 (defun mh-add-to-sequence (seq msgs) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
600 "The sequence SEQ is augmented with the messages in MSGS." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
601 ;; Add to a SEQUENCE each message the list of MSGS. |
88155 | 602 (if (and (mh-valid-seq-p seq) (not (mh-folder-name-p seq))) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
603 (if msgs |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
604 (apply 'mh-exec-cmd "mark" mh-current-folder "-add" |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
605 "-sequence" (symbol-name seq) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
606 (mh-coalesce-msg-list msgs))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
607 |
88155 | 608 (defvar mh-thread-last-ancestor) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
609 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
610 (defun mh-copy-seq-to-eob (seq) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
611 "Copy SEQ to the end of the buffer." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
612 ;; It is quite involved to write something which will work at any place in |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
613 ;; the buffer, so we will write something which works only at the end of |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
614 ;; the buffer. If we ever need to insert sequences in the middle of the |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
615 ;; buffer, this will need to be fixed. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
616 (save-excursion |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
617 (let* ((msgs (mh-seq-to-msgs seq)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
618 (coalesced-msgs (mh-coalesce-msg-list msgs))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
619 (goto-char (point-max)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
620 (save-restriction |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
621 (narrow-to-region (point) (point)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
622 (mh-regenerate-headers coalesced-msgs t) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
623 (cond ((memq 'unthread mh-view-ops) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
624 ;; Populate restricted scan-line map |
88155 | 625 (mh-remove-all-notation) |
626 (mh-iterate-on-range msg (cons (point-min) (point-max)) | |
627 (setf (gethash msg mh-thread-scan-line-map) | |
628 (mh-thread-parse-scan-line))) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
629 ;; Remove scan lines and read results from pre-computed tree |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
630 (delete-region (point-min) (point-max)) |
88155 | 631 (mh-thread-print-scan-lines |
632 (mh-thread-generate mh-current-folder ())) | |
633 (mh-notate-user-sequences)) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
634 (mh-index-data |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
635 (mh-index-insert-folder-headers))))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
636 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
637 ;;;###mh-autoload |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
638 (defmacro mh-iterate-on-messages-in-region (var begin end &rest body) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
639 "Iterate over region. |
88155 | 640 |
641 VAR is bound to the message on the current line as we loop | |
642 starting from BEGIN till END. In each step BODY is executed. | |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
643 |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
644 If VAR is nil then the loop is executed without any binding." |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
645 (unless (symbolp var) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
646 (error "Can not bind the non-symbol %s" var)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
647 (let ((binding-needed-flag var)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
648 `(save-excursion |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
649 (goto-char ,begin) |
88155 | 650 (beginning-of-line) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
651 (while (and (<= (point) ,end) (not (eobp))) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
652 (when (looking-at mh-scan-valid-regexp) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
653 (let ,(if binding-needed-flag `((,var (mh-get-msg-num t))) ()) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
654 ,@body)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
655 (forward-line 1))))) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
656 |
88155 | 657 (put 'mh-iterate-on-messages-in-region 'lisp-indent-hook 'defun) |
658 | |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
659 ;;;###mh-autoload |
88155 | 660 (defmacro mh-iterate-on-range (var range &rest body) |
661 "Iterate an operation over a region or sequence. | |
662 | |
663 VAR is bound to each message in turn in a loop over RANGE, which | |
664 can be a message number, a list of message numbers, a sequence, a | |
665 region in a cons cell, or a MH range (something like last:20) in | |
666 a string. In each iteration, BODY is executed. | |
667 | |
668 The parameter RANGE is usually created with | |
669 `mh-interactive-range' in order to provide a uniform interface to | |
670 MH-E functions." | |
671 (unless (symbolp var) | |
672 (error "Can not bind the non-symbol %s" var)) | |
673 (let ((binding-needed-flag var) | |
674 (msgs (make-symbol "msgs")) | |
675 (seq-hash-table (make-symbol "seq-hash-table"))) | |
676 `(cond ((numberp ,range) | |
677 (when (mh-goto-msg ,range t t) | |
678 (let ,(if binding-needed-flag `((,var ,range)) ()) | |
679 ,@body))) | |
680 ((and (consp ,range) | |
681 (numberp (car ,range)) (numberp (cdr ,range))) | |
682 (mh-iterate-on-messages-in-region ,var | |
683 (car ,range) (cdr ,range) | |
684 ,@body)) | |
685 (t (let ((,msgs (cond ((and ,range (symbolp ,range)) | |
686 (mh-seq-to-msgs ,range)) | |
687 ((stringp ,range) | |
688 (mh-translate-range mh-current-folder | |
689 ,range)) | |
690 (t ,range))) | |
691 (,seq-hash-table (make-hash-table))) | |
692 (dolist (msg ,msgs) | |
693 (setf (gethash msg ,seq-hash-table) t)) | |
694 (mh-iterate-on-messages-in-region v (point-min) (point-max) | |
695 (when (gethash v ,seq-hash-table) | |
696 (let ,(if binding-needed-flag `((,var v)) ()) | |
697 ,@body)))))))) | |
698 | |
699 (put 'mh-iterate-on-range 'lisp-indent-hook 'defun) | |
700 | |
701 ;;;###mh-autoload | |
702 (defun mh-range-to-msg-list (range) | |
703 "Return a list of messages for RANGE. | |
704 | |
705 Check the documentation of `mh-interactive-range' to see how | |
706 RANGE is read in interactive use." | |
707 (let (msg-list) | |
708 (mh-iterate-on-range msg range | |
709 (push msg msg-list)) | |
710 (nreverse msg-list))) | |
711 | |
712 ;;;###mh-autoload | |
713 (defun mh-interactive-range (range-prompt &optional default) | |
714 "Return interactive specification for message, sequence, range or region. | |
715 By convention, the name of this argument is RANGE. | |
716 | |
717 If variable `transient-mark-mode' is non-nil and the mark is active, | |
718 then this function returns a cons-cell of the region. | |
719 | |
720 If optional prefix argument is provided, then prompt for message range | |
721 with RANGE-PROMPT. A list of messages in that range is returned. | |
722 | |
723 If a MH range is given, say something like last:20, then a list | |
724 containing the messages in that range is returned. | |
725 | |
726 If DEFAULT non-nil then it is returned. | |
727 | |
728 Otherwise, the message number at point is returned. | |
729 | |
730 This function is usually used with `mh-iterate-on-range' in order to | |
731 provide a uniform interface to MH-E functions." | |
732 (cond ((mh-mark-active-p t) (cons (region-beginning) (region-end))) | |
733 (current-prefix-arg (mh-read-range range-prompt nil nil t t)) | |
734 (default default) | |
735 (t (mh-get-msg-num t)))) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
736 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
737 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
738 |
88155 | 739 ;;; Commands to handle new 'subject sequence ("Poor man's threading" by psg) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
740 |
88155 | 741 ;; XXX: The function mh-subject-to-sequence-unthreaded uses the magic number |
742 ;; 41 for the max size of the subject part. Avoiding this would be desirable. | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
743 (defun mh-subject-to-sequence (all) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
744 "Put all following messages with same subject in sequence 'subject. |
88155 | 745 If arg ALL is t, move to beginning of folder buffer to collect all |
746 messages. | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
747 If arg ALL is nil, collect only messages fron current one on forward. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
748 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
749 Return number of messages put in the sequence: |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
750 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
751 nil -> there was no subject line. |
88155 | 752 |
753 0 -> there were no later messages with the same | |
754 subject (sequence not made) | |
755 | |
756 >1 -> the total number of messages including current one." | |
757 (if (memq 'unthread mh-view-ops) | |
758 (mh-subject-to-sequence-threaded all) | |
759 (mh-subject-to-sequence-unthreaded all))) | |
760 | |
761 (defun mh-subject-to-sequence-unthreaded (all) | |
762 "Put all following messages with same subject in sequence 'subject. | |
763 | |
764 This function only works with an unthreaded folder. If arg ALL is | |
765 t, move to beginning of folder buffer to collect all messages. If | |
766 arg ALL is nil, collect only messages fron current one on | |
767 forward. | |
768 | |
769 Return number of messages put in the sequence: | |
770 | |
771 nil -> there was no subject line. | |
772 0 -> there were no later messages with the same | |
773 subject (sequence not made) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
774 >1 -> the total number of messages including current one." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
775 (if (not (eq major-mode 'mh-folder-mode)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
776 (error "Not in a folder buffer")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
777 (save-excursion |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
778 (beginning-of-line) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
779 (if (or (not (looking-at mh-scan-subject-regexp)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
780 (not (match-string 3)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
781 (string-equal "" (match-string 3))) |
88155 | 782 (progn (message "No subject line") |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
783 nil) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
784 (let ((subject (match-string-no-properties 3)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
785 (list)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
786 (if (> (length subject) 41) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
787 (setq subject (substring subject 0 41))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
788 (save-excursion |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
789 (if all |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
790 (goto-char (point-min))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
791 (while (re-search-forward mh-scan-subject-regexp nil t) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
792 (let ((this-subject (match-string-no-properties 3))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
793 (if (> (length this-subject) 41) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
794 (setq this-subject (substring this-subject 0 41))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
795 (if (string-equal this-subject subject) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
796 (setq list (cons (mh-get-msg-num t) list)))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
797 (cond |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
798 (list |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
799 ;; If we created a new sequence, add the initial message to it too. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
800 (if (not (member (mh-get-msg-num t) list)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
801 (setq list (cons (mh-get-msg-num t) list))) |
88155 | 802 (if (assoc 'subject mh-seq-list) (mh-delete-seq 'subject)) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
803 ;; sort the result into a sequence |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
804 (let ((sorted-list (sort (copy-sequence list) 'mh-lessp))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
805 (while sorted-list |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
806 (mh-add-msgs-to-seq (car sorted-list) 'subject nil) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
807 (setq sorted-list (cdr sorted-list))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
808 (safe-length list))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
809 (t |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
810 0)))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
811 |
88155 | 812 (defun mh-subject-to-sequence-threaded (all) |
813 "Put all messages with the same subject in the 'subject sequence. | |
814 | |
815 This function works when the folder is threaded. In this | |
816 situation the subject could get truncated and so the normal | |
817 matching doesn't work. | |
818 | |
819 The parameter ALL is non-nil then all the messages in the buffer | |
820 are considered, otherwise only the messages after the current one | |
821 are taken into account." | |
822 (let* ((cur (mh-get-msg-num nil)) | |
823 (subject (mh-thread-find-msg-subject cur)) | |
824 region msgs) | |
825 (if (null subject) | |
826 (and (message "No subject line") nil) | |
827 (setq region (cons (if all (point-min) (point)) (point-max))) | |
828 (mh-iterate-on-range msg region | |
829 (when (eq (mh-thread-find-msg-subject msg) subject) | |
830 (push msg msgs))) | |
831 (setq msgs (sort msgs #'mh-lessp)) | |
832 (if (null msgs) | |
833 0 | |
834 (when (assoc 'subject mh-seq-list) | |
835 (mh-delete-seq 'subject)) | |
836 (mh-add-msgs-to-seq msgs 'subject) | |
837 (length msgs))))) | |
838 | |
839 (defun mh-thread-find-msg-subject (msg) | |
840 "Find canonicalized subject of MSG. | |
841 This function can only be used the folder is threaded." | |
842 (ignore-errors | |
843 (mh-message-subject | |
844 (mh-container-message (gethash (gethash msg mh-thread-index-id-map) | |
845 mh-thread-id-table))))) | |
846 | |
847 (defun mh-edit-pick-expr (default) | |
848 "With prefix arg edit a pick expression. | |
849 If no prefix arg is given, then return DEFAULT." | |
850 (let ((default-string (loop for x in default concat (format " %s" x)))) | |
851 (if (or current-prefix-arg (equal default-string "")) | |
852 (mh-pick-args-list (read-string "Pick expression: " | |
853 default-string)) | |
854 default))) | |
855 | |
856 (defun mh-pick-args-list (s) | |
857 "Form list by grouping elements in string S suitable for pick arguments. | |
858 For example, the string \"-subject a b c -from Joe User | |
859 <user@domain.com>\" is converted to (\"-subject\" \"a b c\" | |
860 \"-from\" \"Joe User <user@domain.com>\"" | |
861 (let ((full-list (split-string s)) | |
862 current-arg collection arg-list) | |
863 (while full-list | |
864 (setq current-arg (car full-list)) | |
865 (if (null (string-match "^-" current-arg)) | |
866 (setq collection | |
867 (if (null collection) | |
868 current-arg | |
869 (format "%s %s" collection current-arg))) | |
870 (when collection | |
871 (setq arg-list (append arg-list (list collection))) | |
872 (setq collection nil)) | |
873 (setq arg-list (append arg-list (list current-arg)))) | |
874 (setq full-list (cdr full-list))) | |
875 (when collection | |
876 (setq arg-list (append arg-list (list collection)))) | |
877 arg-list)) | |
878 | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
879 ;;;###mh-autoload |
88155 | 880 (defun mh-narrow-to-subject (&optional pick-expr) |
881 "Limit to messages with same subject. | |
882 With a prefix argument, edit PICK-EXPR. | |
883 | |
884 Use \\<mh-folder-mode-map>\\[mh-widen] to undo this command." | |
885 (interactive | |
886 (list (mh-edit-pick-expr (mh-current-message-header-field 'subject)))) | |
887 (mh-narrow-to-header-field 'subject pick-expr)) | |
888 | |
889 ;;;###mh-autoload | |
890 (defun mh-narrow-to-from (&optional pick-expr) | |
891 "Limit to messages with the same \"From:\" field. | |
892 With a prefix argument, edit PICK-EXPR. | |
893 | |
894 Use \\<mh-folder-mode-map>\\[mh-widen] to undo this command." | |
895 (interactive | |
896 (list (mh-edit-pick-expr (mh-current-message-header-field 'from)))) | |
897 (mh-narrow-to-header-field 'from pick-expr)) | |
898 | |
899 ;;;###mh-autoload | |
900 (defun mh-narrow-to-cc (&optional pick-expr) | |
901 "Limit to messages with the same \"Cc:\" field. | |
902 With a prefix argument, edit PICK-EXPR. | |
903 | |
904 Use \\<mh-folder-mode-map>\\[mh-widen] to undo this command." | |
905 (interactive | |
906 (list (mh-edit-pick-expr (mh-current-message-header-field 'cc)))) | |
907 (mh-narrow-to-header-field 'cc pick-expr)) | |
908 | |
909 ;;;###mh-autoload | |
910 (defun mh-narrow-to-to (&optional pick-expr) | |
911 "Limit to messages with the same \"To:\" field. | |
912 With a prefix argument, edit PICK-EXPR. | |
913 | |
914 Use \\<mh-folder-mode-map>\\[mh-widen] to undo this command." | |
915 (interactive | |
916 (list (mh-edit-pick-expr (mh-current-message-header-field 'to)))) | |
917 (mh-narrow-to-header-field 'to pick-expr)) | |
918 | |
919 (defun mh-narrow-to-header-field (header-field pick-expr) | |
920 "Limit to messages whose HEADER-FIELD match PICK-EXPR. | |
921 The MH command pick is used to do the match." | |
922 (let ((folder mh-current-folder) | |
923 (original (mh-coalesce-msg-list | |
924 (mh-range-to-msg-list (cons (point-min) (point-max))))) | |
925 (msg-list ())) | |
926 (with-temp-buffer | |
927 (apply #'mh-exec-cmd-output "pick" nil folder | |
928 (append original (list "-list") pick-expr)) | |
929 (goto-char (point-min)) | |
930 (while (not (eobp)) | |
931 (let ((num (read-from-string | |
932 (buffer-substring (point) (line-end-position))))) | |
933 (when (numberp (car num)) (push (car num) msg-list)) | |
934 (forward-line)))) | |
935 (if (null msg-list) | |
936 (message "No matches") | |
937 (when (assoc 'header mh-seq-list) (mh-delete-seq 'header)) | |
938 (mh-add-msgs-to-seq msg-list 'header) | |
939 (mh-narrow-to-seq 'header)))) | |
940 | |
941 (defun mh-current-message-header-field (header-field) | |
942 "Return a pick regexp to match HEADER-FIELD of the message at point." | |
943 (let ((num (mh-get-msg-num nil))) | |
944 (when num | |
945 (let ((folder mh-current-folder)) | |
946 (with-temp-buffer | |
947 (insert-file-contents-literally (mh-msg-filename num folder)) | |
948 (goto-char (point-min)) | |
949 (when (search-forward "\n\n" nil t) | |
950 (narrow-to-region (point-min) (point))) | |
951 (let* ((field (or (message-fetch-field (format "%s" header-field)) | |
952 "")) | |
953 (field-option (format "-%s" header-field)) | |
954 (patterns (loop for x in (split-string field "[ ]*,[ ]*") | |
955 unless (equal x "") | |
956 collect (if (string-match "<\\(.*@.*\\)>" x) | |
957 (match-string 1 x) | |
958 x)))) | |
959 (when patterns | |
960 (loop with accum = `(,field-option ,(car patterns)) | |
961 for e in (cdr patterns) | |
962 do (setq accum `(,field-option ,e "-or" ,@accum)) | |
963 finally return accum)))))))) | |
964 | |
965 ;;;###mh-autoload | |
966 (defun mh-narrow-to-range (range) | |
967 "Limit to RANGE. | |
968 | |
969 Check the documentation of `mh-interactive-range' to see how | |
970 RANGE is read in interactive use. | |
971 | |
972 Use \\<mh-folder-mode-map>\\[mh-widen] to undo this command." | |
973 (interactive (list (mh-interactive-range "Narrow to"))) | |
974 (when (assoc 'range mh-seq-list) (mh-delete-seq 'range)) | |
975 (mh-add-msgs-to-seq (mh-range-to-msg-list range) 'range) | |
976 (mh-narrow-to-seq 'range)) | |
977 | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
978 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
979 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
980 (defun mh-delete-subject () |
88155 | 981 "Delete messages with same subject\\<mh-folder-mode-map>. |
982 | |
983 To delete messages faster, you can use this command to delete all | |
984 the messages with the same subject as the current message. This | |
985 command puts these messages in a sequence named \"subject\". You | |
986 can undo this action by using \\[mh-undo] with a prefix argument | |
987 and then specifying the \"subject\" sequence." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
988 (interactive) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
989 (let ((count (mh-subject-to-sequence nil))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
990 (cond |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
991 ((not count) ; No subject line, delete msg anyway |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
992 (mh-delete-msg (mh-get-msg-num t))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
993 ((= 0 count) ; No other msgs, delete msg anyway. |
88155 | 994 (message "No other messages with same Subject following this one") |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
995 (mh-delete-msg (mh-get-msg-num t))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
996 (t ; We have a subject sequence. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
997 (message "Marked %d messages for deletion" count) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
998 (mh-delete-msg 'subject))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
999 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1000 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1001 (defun mh-delete-subject-or-thread () |
88155 | 1002 "Delete messages with same subject or thread\\<mh-folder-mode-map>. |
1003 | |
1004 To delete messages faster, you can use this command to delete all | |
1005 the messages with the same subject as the current message. This | |
1006 command puts these messages in a sequence named \"subject\". You | |
1007 can undo this action by using \\[mh-undo] with a prefix argument | |
1008 and then specifying the \"subject\" sequence. | |
1009 | |
1010 However, if the buffer is displaying a threaded view of the | |
1011 folder then this command behaves like \\[mh-thread-delete]." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1012 (interactive) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1013 (if (memq 'unthread mh-view-ops) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1014 (mh-thread-delete) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1015 (mh-delete-subject))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1016 |
88155 | 1017 |
1018 | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1019 ;;; Message threading: |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1020 |
88155 | 1021 (defmacro mh-thread-initialize-hash (var test) |
1022 "Initialize the hash table in VAR. | |
1023 TEST is the test to use when creating a new hash table." | |
1024 (unless (symbolp var) (error "Expected a symbol: %s" var)) | |
1025 `(if ,var (clrhash ,var) (setq ,var (make-hash-table :test ,test)))) | |
1026 | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1027 (defun mh-thread-initialize () |
88155 | 1028 "Make new hash tables, or clear them if already present." |
1029 (mh-thread-initialize-hash mh-thread-id-hash #'equal) | |
1030 (mh-thread-initialize-hash mh-thread-subject-hash #'equal) | |
1031 (mh-thread-initialize-hash mh-thread-id-table #'eq) | |
1032 (mh-thread-initialize-hash mh-thread-id-index-map #'eq) | |
1033 (mh-thread-initialize-hash mh-thread-index-id-map #'eql) | |
1034 (mh-thread-initialize-hash mh-thread-scan-line-map #'eql) | |
1035 (mh-thread-initialize-hash mh-thread-subject-container-hash #'eq) | |
1036 (mh-thread-initialize-hash mh-thread-duplicates #'eq) | |
1037 (setq mh-thread-history ())) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1038 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1039 (defsubst mh-thread-id-container (id) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1040 "Given ID, return the corresponding container in `mh-thread-id-table'. |
88155 | 1041 If no container exists then a suitable container is created and |
1042 the id-table is updated." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1043 (when (not id) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1044 (error "1")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1045 (or (gethash id mh-thread-id-table) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1046 (setf (gethash id mh-thread-id-table) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1047 (let ((message (mh-thread-make-message :id id))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1048 (mh-thread-make-container :message message))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1049 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1050 (defsubst mh-thread-remove-parent-link (child) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1051 "Remove parent link of CHILD if it exists." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1052 (let* ((child-container (if (mh-thread-container-p child) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1053 child (mh-thread-id-container child))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1054 (parent-container (mh-container-parent child-container))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1055 (when parent-container |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1056 (setf (mh-container-children parent-container) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1057 (loop for elem in (mh-container-children parent-container) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1058 unless (eq child-container elem) collect elem)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1059 (setf (mh-container-parent child-container) nil)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1060 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1061 (defsubst mh-thread-add-link (parent child &optional at-end-p) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1062 "Add links so that PARENT becomes a parent of CHILD. |
88155 | 1063 Doesn't make any changes if CHILD is already an ancestor of |
1064 PARENT. If optional argument AT-END-P is non-nil, the CHILD is | |
1065 added to the end of the children list of PARENT." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1066 (let ((parent-container (cond ((null parent) nil) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1067 ((mh-thread-container-p parent) parent) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1068 (t (mh-thread-id-container parent)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1069 (child-container (if (mh-thread-container-p child) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1070 child (mh-thread-id-container child)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1071 (when (and parent-container |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1072 (not (mh-thread-ancestor-p child-container parent-container)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1073 (not (mh-thread-ancestor-p parent-container child-container))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1074 (mh-thread-remove-parent-link child-container) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1075 (cond ((not at-end-p) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1076 (push child-container (mh-container-children parent-container))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1077 ((null (mh-container-children parent-container)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1078 (push child-container (mh-container-children parent-container))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1079 (t (let ((last-child (mh-container-children parent-container))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1080 (while (cdr last-child) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1081 (setq last-child (cdr last-child))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1082 (setcdr last-child (cons child-container nil))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1083 (setf (mh-container-parent child-container) parent-container)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1084 (unless parent-container |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1085 (mh-thread-remove-parent-link child-container)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1086 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1087 (defun mh-thread-ancestor-p (ancestor successor) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1088 "Return t if ANCESTOR is really an ancestor of SUCCESSOR and nil otherwise. |
88155 | 1089 In the limit, the function returns t if ANCESTOR and SUCCESSOR |
1090 are the same containers." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1091 (block nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1092 (while successor |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1093 (when (eq ancestor successor) (return t)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1094 (setq successor (mh-container-parent successor))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1095 nil)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1096 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1097 (defsubst mh-thread-get-message-container (message) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1098 "Return container which has MESSAGE in it. |
88155 | 1099 If there is no container present then a new container is |
1100 allocated." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1101 (let* ((id (mh-message-id message)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1102 (container (gethash id mh-thread-id-table))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1103 (cond (container (setf (mh-container-message container) message) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1104 container) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1105 (t (setf (gethash id mh-thread-id-table) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1106 (mh-thread-make-container :message message)))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1107 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1108 (defsubst mh-thread-get-message (id subject-re-p subject refs) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1109 "Return appropriate message. |
88155 | 1110 Otherwise update message already present to have the proper ID, |
1111 SUBJECT-RE-P, SUBJECT and REFS fields." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1112 (let* ((container (gethash id mh-thread-id-table)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1113 (message (if container (mh-container-message container) nil))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1114 (cond (message |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1115 (setf (mh-message-subject-re-p message) subject-re-p) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1116 (setf (mh-message-subject message) subject) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1117 (setf (mh-message-id message) id) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1118 (setf (mh-message-references message) refs) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1119 message) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1120 (container |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1121 (setf (mh-container-message container) |
88155 | 1122 (mh-thread-make-message :id id :references refs |
1123 :subject subject | |
1124 :subject-re-p subject-re-p))) | |
1125 (t (let ((message (mh-thread-make-message :id id :references refs | |
1126 :subject-re-p subject-re-p | |
1127 :subject subject))) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1128 (prog1 message |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1129 (mh-thread-get-message-container message))))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1130 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1131 (defsubst mh-thread-canonicalize-id (id) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1132 "Produce canonical string representation for ID. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1133 This allows cheap string comparison with EQ." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1134 (or (and (equal id "") (copy-sequence "")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1135 (gethash id mh-thread-id-hash) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1136 (setf (gethash id mh-thread-id-hash) id))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1137 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1138 (defsubst mh-thread-prune-subject (subject) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1139 "Prune leading Re:'s, Fwd:'s etc. and trailing (fwd)'s from SUBJECT. |
88155 | 1140 If the result after pruning is not the empty string then it is |
1141 canonicalized so that subjects can be tested for equality with | |
1142 eq. This is done so that all the messages without a subject are | |
1143 not put into a single thread." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1144 (let ((case-fold-search t) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1145 (subject-pruned-flag nil)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1146 ;; Prune subject leader |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1147 (while (or (string-match "^[ \t]*\\(re\\|fwd?\\)\\(\\[[0-9]*\\]\\)?:[ \t]*" |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1148 subject) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1149 (string-match "^[ \t]*\\[[^\\]][ \t]*" subject)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1150 (setq subject-pruned-flag t) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1151 (setq subject (substring subject (match-end 0)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1152 ;; Prune subject trailer |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1153 (while (or (string-match "(fwd)$" subject) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1154 (string-match "[ \t]+$" subject)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1155 (setq subject-pruned-flag t) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1156 (setq subject (substring subject 0 (match-beginning 0)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1157 ;; Canonicalize subject only if it is non-empty |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1158 (cond ((equal subject "") (values subject subject-pruned-flag)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1159 (t (values |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1160 (or (gethash subject mh-thread-subject-hash) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1161 (setf (gethash subject mh-thread-subject-hash) subject)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1162 subject-pruned-flag))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1163 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1164 (defun mh-thread-container-subject (container) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1165 "Return the subject of CONTAINER. |
88155 | 1166 If CONTAINER is empty return the subject info of one of its |
1167 children." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1168 (cond ((and (mh-container-message container) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1169 (mh-message-id (mh-container-message container))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1170 (mh-message-subject (mh-container-message container))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1171 (t (block nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1172 (dolist (kid (mh-container-children container)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1173 (when (and (mh-container-message kid) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1174 (mh-message-id (mh-container-message kid))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1175 (let ((kid-message (mh-container-message kid))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1176 (return (mh-message-subject kid-message))))) |
88155 | 1177 (error "This can't happen"))))) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1178 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1179 (defun mh-thread-rewind-pruning () |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1180 "Restore the thread tree to its state before pruning." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1181 (while mh-thread-history |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1182 (let ((action (pop mh-thread-history))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1183 (cond ((eq (car action) 'DROP) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1184 (mh-thread-remove-parent-link (cadr action)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1185 (mh-thread-add-link (caddr action) (cadr action))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1186 ((eq (car action) 'PROMOTE) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1187 (let ((node (cadr action)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1188 (parent (caddr action)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1189 (children (cdddr action))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1190 (dolist (child children) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1191 (mh-thread-remove-parent-link child) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1192 (mh-thread-add-link node child)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1193 (mh-thread-add-link parent node))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1194 ((eq (car action) 'SUBJECT) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1195 (let ((node (cadr action))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1196 (mh-thread-remove-parent-link node) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1197 (setf (mh-container-real-child-p node) t))))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1198 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1199 (defun mh-thread-prune-containers (roots) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1200 "Prune empty containers in the containers ROOTS." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1201 (let ((dfs-ordered-nodes ()) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1202 (work-list roots)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1203 (while work-list |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1204 (let ((node (pop work-list))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1205 (dolist (child (mh-container-children node)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1206 (push child work-list)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1207 (push node dfs-ordered-nodes))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1208 (while dfs-ordered-nodes |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1209 (let ((node (pop dfs-ordered-nodes))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1210 (cond ((gethash (mh-message-id (mh-container-message node)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1211 mh-thread-id-index-map) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1212 ;; Keep it |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1213 (setf (mh-container-children node) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1214 (mh-thread-sort-containers (mh-container-children node)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1215 ((and (mh-container-children node) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1216 (or (null (cdr (mh-container-children node))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1217 (mh-container-parent node))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1218 ;; Promote kids |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1219 (let ((children ())) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1220 (dolist (kid (mh-container-children node)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1221 (mh-thread-remove-parent-link kid) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1222 (mh-thread-add-link (mh-container-parent node) kid) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1223 (push kid children)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1224 (push `(PROMOTE ,node ,(mh-container-parent node) ,@children) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1225 mh-thread-history) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1226 (mh-thread-remove-parent-link node))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1227 ((mh-container-children node) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1228 ;; Promote the first orphan to parent and add the other kids as |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1229 ;; his children |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1230 (setf (mh-container-children node) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1231 (mh-thread-sort-containers (mh-container-children node))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1232 (let ((new-parent (car (mh-container-children node))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1233 (other-kids (cdr (mh-container-children node)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1234 (mh-thread-remove-parent-link new-parent) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1235 (dolist (kid other-kids) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1236 (mh-thread-remove-parent-link kid) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1237 (setf (mh-container-real-child-p kid) nil) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1238 (mh-thread-add-link new-parent kid t)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1239 (push `(PROMOTE ,node ,(mh-container-parent node) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1240 ,new-parent ,@other-kids) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1241 mh-thread-history) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1242 (mh-thread-remove-parent-link node))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1243 (t |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1244 ;; Drop it |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1245 (push `(DROP ,node ,(mh-container-parent node)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1246 mh-thread-history) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1247 (mh-thread-remove-parent-link node))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1248 (let ((results ())) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1249 (maphash #'(lambda (k v) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1250 (declare (ignore k)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1251 (when (and (null (mh-container-parent v)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1252 (gethash (mh-message-id (mh-container-message v)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1253 mh-thread-id-index-map)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1254 (push v results))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1255 mh-thread-id-table) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1256 (mh-thread-sort-containers results)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1257 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1258 (defun mh-thread-sort-containers (containers) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1259 "Sort a list of message CONTAINERS to be in ascending order wrt index." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1260 (sort containers |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1261 #'(lambda (x y) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1262 (when (and (mh-container-message x) (mh-container-message y)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1263 (let* ((id-x (mh-message-id (mh-container-message x))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1264 (id-y (mh-message-id (mh-container-message y))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1265 (index-x (gethash id-x mh-thread-id-index-map)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1266 (index-y (gethash id-y mh-thread-id-index-map))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1267 (and (integerp index-x) (integerp index-y) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1268 (< index-x index-y))))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1269 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1270 (defsubst mh-thread-group-by-subject (roots) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1271 "Group the set of message containers, ROOTS based on subject. |
88155 | 1272 Bug: Check for and make sure that something without Re: is made |
1273 the parent in preference to something that has it." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1274 (clrhash mh-thread-subject-container-hash) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1275 (let ((results ())) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1276 (dolist (root roots) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1277 (let* ((subject (mh-thread-container-subject root)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1278 (parent (gethash subject mh-thread-subject-container-hash))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1279 (cond (parent (mh-thread-remove-parent-link root) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1280 (mh-thread-add-link parent root t) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1281 (setf (mh-container-real-child-p root) nil) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1282 (push `(SUBJECT ,root) mh-thread-history)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1283 (t |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1284 (setf (gethash subject mh-thread-subject-container-hash) root) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1285 (push root results))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1286 (nreverse results))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1287 |
88155 | 1288 (defun mh-thread-process-in-reply-to (reply-to-header) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1289 "Extract message id's from REPLY-TO-HEADER. |
88155 | 1290 Ideally this should have some regexp which will try to guess if a |
1291 string between < and > is a message id and not an email address. | |
1292 For now it will take the last string inside angles." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1293 (let ((end (mh-search-from-end ?> reply-to-header))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1294 (when (numberp end) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1295 (let ((begin (mh-search-from-end ?< (substring reply-to-header 0 end)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1296 (when (numberp begin) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1297 (list (substring reply-to-header begin (1+ end)))))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1298 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1299 (defun mh-thread-set-tables (folder) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1300 "Use the tables of FOLDER in current buffer." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1301 (flet ((mh-get-table (symbol) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1302 (save-excursion |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1303 (set-buffer folder) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1304 (symbol-value symbol)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1305 (setq mh-thread-id-hash (mh-get-table 'mh-thread-id-hash)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1306 (setq mh-thread-subject-hash (mh-get-table 'mh-thread-subject-hash)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1307 (setq mh-thread-id-table (mh-get-table 'mh-thread-id-table)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1308 (setq mh-thread-id-index-map (mh-get-table 'mh-thread-id-index-map)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1309 (setq mh-thread-index-id-map (mh-get-table 'mh-thread-index-id-map)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1310 (setq mh-thread-scan-line-map (mh-get-table 'mh-thread-scan-line-map)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1311 (setq mh-thread-subject-container-hash |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1312 (mh-get-table 'mh-thread-subject-container-hash)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1313 (setq mh-thread-duplicates (mh-get-table 'mh-thread-duplicates)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1314 (setq mh-thread-history (mh-get-table 'mh-thread-history)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1315 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1316 (defsubst mh-thread-update-id-index-maps (id index) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1317 "Message with id, ID is the message in INDEX. |
88155 | 1318 The function also checks for duplicate messages (that is multiple |
1319 messages with the same ID). These messages are put in the | |
1320 `mh-thread-duplicates' hash table." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1321 (let ((old-index (gethash id mh-thread-id-index-map))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1322 (when old-index (push old-index (gethash id mh-thread-duplicates))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1323 (setf (gethash id mh-thread-id-index-map) index) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1324 (setf (gethash index mh-thread-index-id-map) id))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1325 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1326 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1327 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1328 ;;; Generate Threads... |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1329 |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1330 (defvar mh-message-id-regexp "^<.*@.*>$" |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1331 "Regexp to recognize whether a string is a message identifier.") |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1332 |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1333 (defun mh-thread-generate (folder msg-list) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1334 "Scan FOLDER to get info for threading. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1335 Only information about messages in MSG-LIST are added to the tree." |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1336 (with-temp-buffer |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1337 (mh-thread-set-tables folder) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1338 (when msg-list |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1339 (apply |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1340 #'call-process (expand-file-name mh-scan-prog mh-progs) nil '(t nil) nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1341 "-width" "10000" "-format" |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1342 "%(msg)\n%{message-id}\n%{references}\n%{in-reply-to}\n%{subject}\n" |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1343 folder (mapcar #'(lambda (x) (format "%s" x)) msg-list))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1344 (goto-char (point-min)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1345 (let ((roots ()) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1346 (case-fold-search t)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1347 (block nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1348 (while (not (eobp)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1349 (block process-message |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1350 (let* ((index-line |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1351 (prog1 (buffer-substring (point) (line-end-position)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1352 (forward-line))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1353 (index (car (read-from-string index-line))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1354 (id (prog1 (buffer-substring (point) (line-end-position)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1355 (forward-line))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1356 (refs (prog1 (buffer-substring (point) (line-end-position)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1357 (forward-line))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1358 (in-reply-to (prog1 (buffer-substring (point) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1359 (line-end-position)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1360 (forward-line))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1361 (subject (prog1 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1362 (buffer-substring (point) (line-end-position)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1363 (forward-line))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1364 (subject-re-p nil)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1365 (unless (gethash index mh-thread-scan-line-map) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1366 (return-from process-message)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1367 (unless (integerp index) (return)) ;Error message here |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1368 (multiple-value-setq (subject subject-re-p) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1369 (mh-thread-prune-subject subject)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1370 (setq in-reply-to (mh-thread-process-in-reply-to in-reply-to)) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1371 (setq refs (loop for x in (append (split-string refs) in-reply-to) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1372 when (string-match mh-message-id-regexp x) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1373 collect x)) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1374 (setq id (mh-thread-canonicalize-id id)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1375 (mh-thread-update-id-index-maps id index) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1376 (setq refs (mapcar #'mh-thread-canonicalize-id refs)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1377 (mh-thread-get-message id subject-re-p subject refs) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1378 (do ((ancestors refs (cdr ancestors))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1379 ((null (cdr ancestors)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1380 (when (car ancestors) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1381 (mh-thread-remove-parent-link id) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1382 (mh-thread-add-link (car ancestors) id))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1383 (mh-thread-add-link (car ancestors) (cadr ancestors))))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1384 (maphash #'(lambda (k v) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1385 (declare (ignore k)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1386 (when (null (mh-container-parent v)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1387 (push v roots))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1388 mh-thread-id-table) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1389 (setq roots (mh-thread-prune-containers roots)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1390 (prog1 (setq roots (mh-thread-group-by-subject roots)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1391 (let ((history mh-thread-history)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1392 (set-buffer folder) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1393 (setq mh-thread-history history)))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1394 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1395 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1396 (defun mh-thread-inc (folder start-point) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1397 "Update thread tree for FOLDER. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1398 All messages after START-POINT are added to the thread tree." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1399 (mh-thread-rewind-pruning) |
88155 | 1400 (mh-remove-all-notation) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1401 (goto-char start-point) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1402 (let ((msg-list ())) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1403 (while (not (eobp)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1404 (let ((index (mh-get-msg-num nil))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1405 (when (numberp index) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1406 (push index msg-list) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1407 (setf (gethash index mh-thread-scan-line-map) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1408 (mh-thread-parse-scan-line))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1409 (forward-line))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1410 (let ((thread-tree (mh-thread-generate folder msg-list)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1411 (buffer-read-only nil) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1412 (old-buffer-modified-flag (buffer-modified-p))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1413 (delete-region (point-min) (point-max)) |
88155 | 1414 (mh-thread-print-scan-lines thread-tree) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1415 (mh-notate-user-sequences) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1416 (mh-notate-deleted-and-refiled) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1417 (mh-notate-cur) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1418 (set-buffer-modified-p old-buffer-modified-flag)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1419 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1420 (defun mh-thread-generate-scan-lines (tree level) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1421 "Generate scan lines. |
88155 | 1422 TREE is the hierarchical tree of messages, SCAN-LINE-MAP maps |
1423 message indices to the corresponding scan lines and LEVEL used to | |
1424 determine indentation of the message." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1425 (cond ((null tree) nil) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1426 ((mh-thread-container-p tree) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1427 (let* ((message (mh-container-message tree)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1428 (id (mh-message-id message)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1429 (index (gethash id mh-thread-id-index-map)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1430 (duplicates (gethash id mh-thread-duplicates)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1431 (new-level (+ level 2)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1432 (dupl-flag t) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1433 (force-angle-flag nil) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1434 (increment-level-flag nil)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1435 (dolist (scan-line (mapcar (lambda (x) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1436 (gethash x mh-thread-scan-line-map)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1437 (reverse (cons index duplicates)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1438 (when scan-line |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1439 (when (and dupl-flag (equal level 0) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1440 (mh-thread-ancestor-p mh-thread-last-ancestor tree)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1441 (setq level (+ level 2) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1442 new-level (+ new-level 2) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1443 force-angle-flag t)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1444 (when (equal level 0) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1445 (setq mh-thread-last-ancestor tree) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1446 (while (mh-container-parent mh-thread-last-ancestor) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1447 (setq mh-thread-last-ancestor |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1448 (mh-container-parent mh-thread-last-ancestor)))) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1449 (let* ((lev (if dupl-flag level new-level)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1450 (square-flag (or (and (mh-container-real-child-p tree) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1451 (not force-angle-flag) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1452 dupl-flag) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1453 (equal lev 0)))) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1454 (insert (car scan-line) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1455 (format (format "%%%ss" lev) "") |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1456 (if square-flag "[" "<") |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1457 (cadr scan-line) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1458 (if square-flag "]" ">") |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1459 (truncate-string-to-width |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1460 (caddr scan-line) (- mh-thread-body-width lev)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1461 "\n")) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1462 (setq increment-level-flag t) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1463 (setq dupl-flag nil))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1464 (unless increment-level-flag (setq new-level level)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1465 (dolist (child (mh-container-children tree)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1466 (mh-thread-generate-scan-lines child new-level)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1467 (t (let ((nlevel (+ level 2))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1468 (dolist (ch tree) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1469 (mh-thread-generate-scan-lines ch nlevel)))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1470 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1471 ;; Another and may be better approach would be to generate all the info from |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1472 ;; the scan which generates the threading info. For now this will have to do. |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1473 (defun mh-thread-parse-scan-line (&optional string) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1474 "Parse a scan line. |
88155 | 1475 If optional argument STRING is given then that is assumed to be |
1476 the scan line. Otherwise uses the line at point as the scan line | |
1477 to parse." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1478 (let* ((string (or string |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1479 (buffer-substring-no-properties (line-beginning-position) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1480 (line-end-position)))) |
88155 | 1481 (address-start (+ mh-cmd-note mh-scan-field-from-start-offset)) |
1482 (body-start (+ mh-cmd-note mh-scan-field-from-end-offset)) | |
1483 (first-string (substring string 0 address-start))) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1484 (list first-string |
88155 | 1485 (substring string address-start (- body-start 2)) |
1486 (substring string body-start) | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1487 string))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1488 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1489 ;;;###mh-autoload |
88155 | 1490 (defun mh-thread-update-scan-line-map (msg notation offset) |
1491 "In threaded view update `mh-thread-scan-line-map'. | |
1492 MSG is the message being notated with NOTATION at OFFSET." | |
1493 (let* ((msg (or msg (mh-get-msg-num nil))) | |
1494 (cur-scan-line (and mh-thread-scan-line-map | |
1495 (gethash msg mh-thread-scan-line-map))) | |
1496 (old-scan-lines (loop for map in mh-thread-scan-line-map-stack | |
1497 collect (and map (gethash msg map))))) | |
1498 (when cur-scan-line | |
1499 (setf (aref (car cur-scan-line) offset) notation)) | |
1500 (dolist (line old-scan-lines) | |
1501 (when line (setf (aref (car line) offset) notation))))) | |
1502 | |
1503 ;;;###mh-autoload | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1504 (defun mh-thread-add-spaces (count) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1505 "Add COUNT spaces to each scan line in `mh-thread-scan-line-map'." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1506 (let ((spaces (format (format "%%%ss" count) ""))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1507 (while (not (eobp)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1508 (let* ((msg-num (mh-get-msg-num nil)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1509 (old-line (nth 3 (gethash msg-num mh-thread-scan-line-map)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1510 (when (numberp msg-num) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1511 (setf (gethash msg-num mh-thread-scan-line-map) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1512 (mh-thread-parse-scan-line (format "%s%s" spaces old-line))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1513 (forward-line 1)))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1514 |
88155 | 1515 (defun mh-thread-print-scan-lines (thread-tree) |
1516 "Print scan lines in THREAD-TREE in threaded mode." | |
1517 (let ((mh-thread-body-width (- (window-width) mh-cmd-note | |
1518 (1- mh-scan-field-subject-start-offset))) | |
1519 (mh-thread-last-ancestor nil)) | |
1520 (if (null mh-index-data) | |
1521 (mh-thread-generate-scan-lines thread-tree -2) | |
1522 (loop for x in (mh-index-group-by-folder) | |
1523 do (let* ((old-map mh-thread-scan-line-map) | |
1524 (mh-thread-scan-line-map (make-hash-table))) | |
1525 (setq mh-thread-last-ancestor nil) | |
1526 (loop for msg in (cdr x) | |
1527 do (let ((v (gethash msg old-map))) | |
1528 (when v | |
1529 (setf (gethash msg mh-thread-scan-line-map) v)))) | |
1530 (when (> (hash-table-count mh-thread-scan-line-map) 0) | |
1531 (insert (if (bobp) "" "\n") (car x) "\n") | |
1532 (mh-thread-generate-scan-lines thread-tree -2)))) | |
1533 (mh-index-create-imenu-index)))) | |
1534 | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1535 (defun mh-thread-folder () |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1536 "Generate thread view of folder." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1537 (message "Threading %s..." (buffer-name)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1538 (mh-thread-initialize) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1539 (goto-char (point-min)) |
88155 | 1540 (mh-remove-all-notation) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1541 (let ((msg-list ())) |
88155 | 1542 (mh-iterate-on-range msg (cons (point-min) (point-max)) |
1543 (setf (gethash msg mh-thread-scan-line-map) (mh-thread-parse-scan-line)) | |
1544 (push msg msg-list)) | |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1545 (let* ((range (mh-coalesce-msg-list msg-list)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1546 (thread-tree (mh-thread-generate (buffer-name) range))) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1547 (delete-region (point-min) (point-max)) |
88155 | 1548 (mh-thread-print-scan-lines thread-tree) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1549 (mh-notate-user-sequences) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1550 (mh-notate-deleted-and-refiled) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1551 (mh-notate-cur) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1552 (message "Threading %s...done" (buffer-name))))) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1553 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1554 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1555 (defun mh-toggle-threads () |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1556 "Toggle threaded view of folder." |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1557 (interactive) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1558 (let ((msg-at-point (mh-get-msg-num nil)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1559 (old-buffer-modified-flag (buffer-modified-p)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1560 (buffer-read-only nil)) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1561 (cond ((memq 'unthread mh-view-ops) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1562 (unless (mh-valid-view-change-operation-p 'unthread) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1563 (error "Can't unthread folder")) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1564 (let ((msg-list ())) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1565 (goto-char (point-min)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1566 (while (not (eobp)) |
88155 | 1567 (let ((index (mh-get-msg-num nil))) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1568 (when index |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1569 (push index msg-list))) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1570 (forward-line)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1571 (mh-scan-folder mh-current-folder |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1572 (mapcar #'(lambda (x) (format "%s" x)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1573 (mh-coalesce-msg-list msg-list)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1574 t)) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1575 (when mh-index-data |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1576 (mh-index-insert-folder-headers) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1577 (mh-notate-cur))) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1578 (t (mh-thread-folder) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1579 (push 'unthread mh-view-ops))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1580 (when msg-at-point (mh-goto-msg msg-at-point t t)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1581 (set-buffer-modified-p old-buffer-modified-flag) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1582 (mh-recenter nil))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1583 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1584 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1585 (defun mh-thread-forget-message (index) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1586 "Forget the message INDEX from the threading tables." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1587 (let* ((id (gethash index mh-thread-index-id-map)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1588 (id-index (gethash id mh-thread-id-index-map)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1589 (duplicates (gethash id mh-thread-duplicates))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1590 (remhash index mh-thread-index-id-map) |
88155 | 1591 (remhash index mh-thread-scan-line-map) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1592 (cond ((and (eql index id-index) (null duplicates)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1593 (remhash id mh-thread-id-index-map)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1594 ((eql index id-index) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1595 (setf (gethash id mh-thread-id-index-map) (car duplicates)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1596 (setf (gethash (car duplicates) mh-thread-index-id-map) id) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1597 (setf (gethash id mh-thread-duplicates) (cdr duplicates))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1598 (t |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1599 (setf (gethash id mh-thread-duplicates) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1600 (remove index duplicates)))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1601 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1602 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1603 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1604 ;;; Operations on threads |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1605 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1606 (defun mh-thread-current-indentation-level () |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1607 "Find the number of spaces by which current message is indented." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1608 (save-excursion |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1609 (let ((address-start-offset (+ mh-cmd-note mh-scan-date-flag-width |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1610 mh-scan-date-width 1)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1611 (level 0)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1612 (beginning-of-line) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1613 (forward-char address-start-offset) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1614 (while (char-equal (char-after) ? ) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1615 (incf level) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1616 (forward-char)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1617 level))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1618 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1619 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1620 (defun mh-thread-next-sibling (&optional previous-flag) |
88155 | 1621 "Display next sibling. |
1622 | |
1623 With non-nil optional argument PREVIOUS-FLAG jump to the previous | |
1624 sibling." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1625 (interactive) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1626 (cond ((not (memq 'unthread mh-view-ops)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1627 (error "Folder isn't threaded")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1628 ((eobp) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1629 (error "No message at point"))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1630 (beginning-of-line) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1631 (let ((point (point)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1632 (done nil) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1633 (my-level (mh-thread-current-indentation-level))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1634 (while (and (not done) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1635 (equal (forward-line (if previous-flag -1 1)) 0) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1636 (not (eobp))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1637 (let ((level (mh-thread-current-indentation-level))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1638 (cond ((equal level my-level) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1639 (setq done 'success)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1640 ((< level my-level) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1641 (message "No %s sibling" (if previous-flag "previous" "next")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1642 (setq done 'failure))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1643 (cond ((eq done 'success) (mh-maybe-show)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1644 ((eq done 'failure) (goto-char point)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1645 (t (message "No %s sibling" (if previous-flag "previous" "next")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1646 (goto-char point))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1647 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1648 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1649 (defun mh-thread-previous-sibling () |
88155 | 1650 "Display previous sibling." |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1651 (interactive) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1652 (mh-thread-next-sibling t)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1653 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1654 (defun mh-thread-immediate-ancestor () |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1655 "Jump to immediate ancestor in thread tree." |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1656 (beginning-of-line) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1657 (let ((point (point)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1658 (ancestor-level (- (mh-thread-current-indentation-level) 2)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1659 (done nil)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1660 (if (< ancestor-level 0) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1661 nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1662 (while (and (not done) (equal (forward-line -1) 0)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1663 (when (equal ancestor-level (mh-thread-current-indentation-level)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1664 (setq done t))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1665 (unless done |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1666 (goto-char point)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1667 done))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1668 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1669 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1670 (defun mh-thread-ancestor (&optional thread-root-flag) |
88155 | 1671 "Display ancestor of current message. |
1672 | |
1673 If you do not care for the way a particular thread has turned, | |
1674 you can move up the chain of messages with this command. This | |
1675 command can also take a prefix argument THREAD-ROOT-FLAG to jump | |
1676 to the message that started everything." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1677 (interactive "P") |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1678 (beginning-of-line) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1679 (cond ((not (memq 'unthread mh-view-ops)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1680 (error "Folder isn't threaded")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1681 ((eobp) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1682 (error "No message at point"))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1683 (let ((current-level (mh-thread-current-indentation-level))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1684 (cond (thread-root-flag |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1685 (while (mh-thread-immediate-ancestor)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1686 (mh-maybe-show)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1687 ((equal current-level 1) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1688 (message "Message has no ancestor")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1689 (t (mh-thread-immediate-ancestor) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1690 (mh-maybe-show))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1691 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1692 (defun mh-thread-find-children () |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1693 "Return a region containing the current message and its children. |
88155 | 1694 The result is returned as a list of two elements. The first is |
1695 the point at the start of the region and the second is the point | |
1696 at the end." | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1697 (beginning-of-line) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1698 (if (eobp) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1699 nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1700 (let ((address-start-offset (+ mh-cmd-note mh-scan-date-flag-width |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1701 mh-scan-date-width 1)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1702 (level (mh-thread-current-indentation-level)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1703 spaces begin) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1704 (setq begin (point)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1705 (setq spaces (format (format "%%%ss" (1+ level)) "")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1706 (forward-line) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1707 (block nil |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1708 (while (not (eobp)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1709 (forward-char address-start-offset) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1710 (unless (equal (string-match spaces (buffer-substring-no-properties |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1711 (point) (line-end-position))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1712 0) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1713 (beginning-of-line) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1714 (backward-char) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1715 (return)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1716 (forward-line))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1717 (list begin (point))))) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1718 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1719 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1720 (defun mh-thread-delete () |
88155 | 1721 "Delete thread." |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1722 (interactive) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1723 (cond ((not (memq 'unthread mh-view-ops)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1724 (error "Folder isn't threaded")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1725 ((eobp) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1726 (error "No message at point")) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1727 (t (let ((region (mh-thread-find-children))) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1728 (mh-iterate-on-messages-in-region () (car region) (cadr region) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1729 (mh-delete-a-msg nil)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1730 (mh-next-msg))))) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1731 |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1732 ;;;###mh-autoload |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1733 (defun mh-thread-refile (folder) |
88155 | 1734 "Refile (output) thread into FOLDER." |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1735 (interactive (list (intern (mh-prompt-for-refile-folder)))) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1736 (cond ((not (memq 'unthread mh-view-ops)) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1737 (error "Folder isn't threaded")) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1738 ((eobp) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1739 (error "No message at point")) |
49578
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1740 (t (let ((region (mh-thread-find-children))) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1741 (mh-iterate-on-messages-in-region () (car region) (cadr region) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1742 (mh-refile-a-msg nil folder)) |
b35587af8747
Upgraded to MH-E version 7.2.
Bill Wohler <wohler@newt.com>
parents:
49459
diff
changeset
|
1743 (mh-next-msg))))) |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1744 |
88155 | 1745 |
1746 | |
1747 ;; Tick mark handling | |
1748 | |
1749 ;;;###mh-autoload | |
1750 (defun mh-toggle-tick (range) | |
1751 "Toggle tick mark of RANGE. | |
1752 | |
1753 This command adds messages to the \"tick\" sequence (which you can customize | |
1754 via the option `mh-tick-seq'). This sequence can be viewed later with the | |
1755 \\[mh-index-ticked-messages] command. | |
1756 | |
1757 Check the documentation of `mh-interactive-range' to see how RANGE is read in | |
1758 interactive use." | |
1759 (interactive (list (mh-interactive-range "Tick"))) | |
1760 (unless mh-tick-seq | |
1761 (error "Enable ticking by customizing `mh-tick-seq'")) | |
1762 (let* ((tick-seq (mh-find-seq mh-tick-seq)) | |
1763 (tick-seq-msgs (mh-seq-msgs tick-seq)) | |
1764 (ticked ()) | |
1765 (unticked ())) | |
1766 (mh-iterate-on-range msg range | |
1767 (cond ((member msg tick-seq-msgs) | |
1768 (push msg unticked) | |
1769 (setcdr tick-seq (delq msg (cdr tick-seq))) | |
1770 (when (null (cdr tick-seq)) (setq mh-last-seq-used nil)) | |
1771 (mh-remove-sequence-notation msg (mh-colors-in-use-p))) | |
1772 (t | |
1773 (push msg ticked) | |
1774 (setq mh-last-seq-used mh-tick-seq) | |
1775 (let ((mh-seq-list (cons `(,mh-tick-seq ,msg) mh-seq-list))) | |
1776 (mh-add-sequence-notation msg (mh-colors-in-use-p)))))) | |
1777 (mh-add-msgs-to-seq ticked mh-tick-seq nil t) | |
1778 (mh-undefine-sequence mh-tick-seq unticked) | |
1779 (when mh-index-data | |
1780 (mh-index-add-to-sequence mh-tick-seq ticked) | |
1781 (mh-index-delete-from-sequence mh-tick-seq unticked)))) | |
1782 | |
1783 ;;;###mh-autoload | |
1784 (defun mh-narrow-to-tick () | |
1785 "Limit to ticked messages. | |
1786 | |
1787 What this command does is show only those messages that are in | |
1788 the \"tick\" sequence (which you can customize via the | |
1789 `mh-tick-seq' option) in the MH-Folder buffer. In addition, it | |
1790 limits further MH-E searches to just those messages. When you | |
1791 want to widen the view to all your messages again, use | |
1792 \\[mh-widen]." | |
1793 (interactive) | |
1794 (cond ((not mh-tick-seq) | |
1795 (error "Enable ticking by customizing `mh-tick-seq'")) | |
1796 ((null (mh-seq-msgs (mh-find-seq mh-tick-seq))) | |
1797 (message "No messages in %s sequence" mh-tick-seq)) | |
1798 (t (mh-narrow-to-seq mh-tick-seq)))) | |
1799 | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1800 (provide 'mh-seq) |
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1801 |
88155 | 1802 ;; Local Variables: |
1803 ;; indent-tabs-mode: nil | |
1804 ;; sentence-end-double-space: nil | |
1805 ;; End: | |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1806 |
88155 | 1807 ;; arch-tag: 8e952711-01a2-485b-bf21-c9e3ad4de942 |
49459
06b77df47802
* mh-e: Created directory. ChangeLog will appear in a week when we
Bill Wohler <wohler@newt.com>
parents:
diff
changeset
|
1808 ;;; mh-seq.el ends here |