(buffer_posn_from_coords): Use Fset_buffer instead of setting
[bpt/emacs.git] / lisp / mh-e / mh-e.el
CommitLineData
c26cf6c8
RS
1;;; mh-e.el --- GNU Emacs interface to the MH mail system
2
e495eaec
BW
3;; Copyright (C) 1985, 1986, 1987, 1988,
4;; 1990, 1992, 1993, 1994, 1995, 1997, 1999,
ae940284 5;; 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
c26cf6c8 6
a1b4049d 7;; Author: Bill Wohler <wohler@newt.com>
6e65a812 8;; Maintainer: Bill Wohler <wohler@newt.com>
9e6f5938 9;; Version: 8.1
c26cf6c8
RS
10;; Keywords: mail
11
60370d40 12;; This file is part of GNU Emacs.
9b7bc076 13
5e809f55 14;; GNU Emacs is free software: you can redistribute it and/or modify
c26cf6c8 15;; it under the terms of the GNU General Public License as published by
5e809f55
GM
16;; the Free Software Foundation, either version 3 of the License, or
17;; (at your option) any later version.
c26cf6c8 18
9b7bc076 19;; GNU Emacs is distributed in the hope that it will be useful,
c26cf6c8
RS
20;; but WITHOUT ANY WARRANTY; without even the implied warranty of
21;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22;; GNU General Public License for more details.
23
24;; You should have received a copy of the GNU General Public License
5e809f55 25;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
c26cf6c8
RS
26
27;;; Commentary:
28
d2f8ce2f
BW
29;; MH-E is an Emacs interface to the MH mail system.
30
9e6f5938 31;; MH-E is supported in GNU Emacs 21 and 22, as well as XEmacs 21
d2f8ce2f
BW
32;; (except for versions 21.5.9-21.5.16). It is compatible with MH
33;; versions 6.8.4 and higher, all versions of nmh, and GNU mailutils
9e6f5938
BW
34;; 1.0 and higher. Gnus is also required; version 5.10 or higher is
35;; recommended.
d2f8ce2f
BW
36
37;; MH (Message Handler) is a powerful mail reader. See
38;; http://rand-mh.sourceforge.net/.
39
40;; N.B. MH must have been compiled with the MHE compiler flag or several
41;; features necessary for MH-E will be missing from MH commands, specifically
42;; the -build switch to repl and forw.
43
dda00b2c 44;; How to use:
a1b4049d
BW
45;; M-x mh-rmail to read mail. Type C-h m there for a list of commands.
46;; C-u M-x mh-rmail to visit any folder.
dda00b2c 47;; M-x mh-smail to send mail. From within the mail reader, "s" works, too.
b578f267 48
a1b4049d
BW
49;; Your .emacs might benefit from these bindings:
50;; (global-set-key "\C-cr" 'mh-rmail)
51;; (global-set-key "\C-xm" 'mh-smail)
52;; (global-set-key "\C-x4m" 'mh-smail-other-window)
b578f267 53
dda00b2c
BW
54;; If Emacs can't find mh-rmail or mh-smail, add the following to ~/.emacs:
55;; (require 'mh-autoloads)
56
57;; If you want to customize MH-E before explicitly loading it, add this:
58;; (require 'mh-cus-load)
59
a1b4049d
BW
60;; Mailing Lists:
61;; mh-e-users@lists.sourceforge.net
62;; mh-e-announce@lists.sourceforge.net
63;; mh-e-devel@lists.sourceforge.net
dda00b2c 64
a1b4049d
BW
65;; Subscribe by sending a "subscribe" message to
66;; <list>-request@lists.sourceforge.net, or by using the web interface at
67;; https://sourceforge.net/mail/?group_id=13357
68
69;; Bug Reports:
70;; https://sourceforge.net/tracker/?group_id=13357&atid=113357
dda00b2c
BW
71;; Include the output of M-x mh-version in the bug report unless
72;; you're 110% sure we won't ask for it.
a1b4049d
BW
73
74;; Feature Requests:
dda00b2c 75;; https://sourceforge.net/tracker/?group_id=13357&atid=363357
a1b4049d
BW
76
77;; Support:
78;; https://sourceforge.net/tracker/?group_id=13357&atid=213357
b578f267 79
717e06e5 80;;; Change Log:
b578f267
EN
81
82;; Original version for Gosling emacs by Brian Reid, Stanford, 1982.
83;; Modified by James Larus, BBN, July 1984 and UCB, 1984 & 1985.
f0d73c14
BW
84;; Rewritten for GNU Emacs, James Larus, 1985.
85;; Modified by Stephen Gildea, 1988.
86;; Maintenance picked up by Bill Wohler and the
87;; SourceForge Crew <http://mh-e.sourceforge.net/>, 2001.
a1b4049d 88
c26cf6c8
RS
89;;; Code:
90
dda00b2c
BW
91;; Provide functions to the rest of MH-E. However, mh-e.el must not
92;; use any definitions in files that require mh-e from mh-loaddefs,
93;; for if it does it will introduce a require loop.
94(require 'mh-loaddefs)
c3d9274a 95
f0d73c14 96(mh-require-cl)
a1b4049d 97
ebb4d60b
BW
98(require 'mh-buffers)
99(require 'mh-compat)
100
dda00b2c
BW
101(mh-do-in-xemacs
102 (require 'mh-xemacs))
103
30545916
BW
104(mh-font-lock-add-keywords
105 'emacs-lisp-mode
106 (eval-when-compile
107 `((,(concat "(\\("
108 ;; Function declarations (use font-lock-function-name-face).
c90c4cf1 109 "\\(def\\(un\\|macro\\)-mh\\)\\|"
30545916 110 ;; Variable declarations (use font-lock-variable-name-face).
c90c4cf1 111 "\\(def\\(custom\\|face\\)-mh\\)\\|"
30545916 112 ;; Group declarations (use font-lock-type-face).
c90c4cf1 113 "\\(defgroup-mh\\)"
30545916
BW
114 "\\)\\>"
115 ;; Any whitespace and defined object.
116 "[ \t'\(]*"
117 "\\(setf[ \t]+\\sw+)\\|\\sw+\\)?")
118 (1 font-lock-keyword-face)
119 (7 (cond ((match-beginning 2) font-lock-function-name-face)
120 ((match-beginning 4) font-lock-variable-name-face)
121 (t font-lock-type-face))
122 nil t)))))
123
dda00b2c 124\f
c26cf6c8 125
dda00b2c 126;;; Global Variables
a1b4049d 127
dda00b2c
BW
128;; Try to keep variables local to a single file. Provide accessors if
129;; variables are shared. Use this section as a last resort.
cee9f5c6 130
9e6f5938 131(defconst mh-version "8.1" "Version number of MH-E.")
a1b4049d 132
dda00b2c 133;; Variants
c3d9274a 134
dda00b2c
BW
135(defvar mh-sys-path
136 '("/usr/local/nmh/bin" ; nmh default
137 "/usr/local/bin/mh/"
138 "/usr/local/mh/"
139 "/usr/bin/mh/" ; Ultrix 4.2, Linux
140 "/usr/new/mh/" ; Ultrix < 4.2
141 "/usr/contrib/mh/bin/" ; BSDI
142 "/usr/pkg/bin/" ; NetBSD
143 "/usr/local/bin/"
efa47761
BW
144 "/usr/local/bin/mu-mh/" ; GNU mailutils MH - default
145 "/usr/bin/mu-mh/") ; GNU mailutils MH - packaged
dda00b2c
BW
146 "List of directories to search for variants of the MH variant.
147The list `exec-path' is searched in addition to this list.
148There's no need for users to modify this list. Instead add extra
149directories to the customizable variable `mh-path'.")
a1b4049d 150
dda00b2c
BW
151(defvar mh-variants nil
152 "List describing known MH variants.
153Do not access this variable directly as it may not have yet been initialized.
154Use the function `mh-variants' instead.")
bdcfe844 155
dda00b2c
BW
156(defvar mh-variant-in-use nil
157 "The MH variant currently in use; a string with variant and version number.
158This differs from `mh-variant' when the latter is set to
159\"autodetect\".")
bdcfe844 160
dda00b2c
BW
161(defvar mh-progs nil
162 "Directory containing MH commands, such as inc, repl, and rmm.")
163
164;;;###autoload
165(put 'mh-progs 'risky-local-variable t)
166
167(defvar mh-lib nil
168 "Directory containing the MH library.
169This directory contains, among other things, the components file.")
170
171;;;###autoload
172(put 'mh-lib 'risky-local-variable t)
173
174(defvar mh-lib-progs nil
175 "Directory containing MH helper programs.
176This directory contains, among other things, the mhl program.")
177
178;;;###autoload
179(put 'mh-lib-progs 'risky-local-variable t)
c26cf6c8 180
dda00b2c 181;; Profile Components
c26cf6c8 182
dda00b2c
BW
183(defvar mh-draft-folder nil
184 "Cached value of the \"Draft-Folder:\" MH profile component.
185Name of folder containing draft messages.
1b7916fb 186Do not use a draft folder if nil.")
d1699462 187
dda00b2c
BW
188(defvar mh-inbox nil
189 "Cached value of the \"Inbox:\" MH profile component.
190Set to \"+inbox\" if no such component.
191Name of the Inbox folder.")
d1699462 192
dda00b2c
BW
193(defvar mh-user-path nil
194 "Cached value of the \"Path:\" MH profile component.
195User's mail folder directory.")
196
197;; Maps declared here so that they can be used in docstrings.
c26cf6c8
RS
198
199(defvar mh-folder-mode-map (make-keymap)
dda00b2c
BW
200 "Keymap for MH-Folder mode.")
201
202(defvar mh-folder-seq-tool-bar-map nil
203 "Keymap for MH-Folder tool bar.")
204
205(defvar mh-folder-tool-bar-map nil
206 "Keymap for MH-Folder tool bar.")
207
208(defvar mh-inc-spool-map (make-sparse-keymap)
209 "Keymap for MH-E's mh-inc-spool commands.")
210
211(defvar mh-letter-mode-map (copy-keymap text-mode-map)
212 "Keymap for MH-Letter mode.")
213
214(defvar mh-letter-tool-bar-map nil
215 "Keymap for MH-Letter tool bar.")
216
217(defvar mh-search-mode-map (make-sparse-keymap)
218 "Keymap for MH-Search mode.")
219
220(defvar mh-show-mode-map (make-sparse-keymap)
221 "Keymap MH-Show mode.")
222
223(defvar mh-show-seq-tool-bar-map nil
224 "Keymap for MH-Show tool bar.")
225
226(defvar mh-show-tool-bar-map nil
227 "Keymap for MH-Show tool bar.")
228
229;; MH-Folder Locals (alphabetical)
c26cf6c8 230
d1699462
BW
231(defvar mh-arrow-marker nil
232 "Marker for arrow display in fringe.")
233
dda00b2c
BW
234(defvar mh-colors-available-flag nil
235 "Non-nil means colors are available.")
236
237(defvar mh-current-folder nil
238 "Name of current folder, a string.")
239
d1699462
BW
240(defvar mh-delete-list nil
241 "List of message numbers to delete.
2dcf34f9
BW
242This variable can be used by
243`mh-before-commands-processed-hook'.")
3d7ca223 244
dda00b2c
BW
245(defvar mh-folder-view-stack nil
246 "Stack of previous folder views.")
247
248(defvar mh-index-data nil
249 "Info about index search results.")
250
251(defvar mh-index-previous-search nil)
252
253(defvar mh-index-msg-checksum-map nil)
254
255(defvar mh-index-checksum-origin-map nil)
256
257(defvar mh-index-sequence-search-flag nil)
258
259(defvar mh-mode-line-annotation nil
260 "Message range displayed in buffer.")
261
262(defvar mh-next-direction 'forward
263 "Direction to move to next message.")
264
265(defvar mh-previous-window-config nil
266 "Window configuration before MH-E command.")
267
d1699462
BW
268(defvar mh-refile-list nil
269 "List of folder names in `mh-seq-list'.
2dcf34f9
BW
270This variable can be used by
271`mh-before-commands-processed-hook'.")
c26cf6c8 272
dda00b2c
BW
273(defvar mh-seen-list nil
274 "List of displayed messages to be removed from the \"Unseen\" sequence.")
c26cf6c8 275
dda00b2c
BW
276(defvar mh-seq-list nil
277 "Alist of this folder's sequences.
278Elements have the form (SEQUENCE . MESSAGES).")
279
280(defvar mh-sequence-notation-history nil
281 "Remember original notation that is overwritten by `mh-note-seq'.")
282
283(defvar mh-show-buffer nil
284 "Buffer that displays message for this folder.")
2953de8c 285
dda00b2c
BW
286(defvar mh-showing-mode nil
287 "If non-nil, show the message in a separate window.")
288
289(defvar mh-view-ops nil
d1699462
BW
290 "Stack of operations that change the folder view.
291These operations include narrowing or threading.")
c26cf6c8 292
dda00b2c 293;; MH-Show Locals (alphabetical)
d1699462 294
dda00b2c
BW
295(defvar mh-globals-hash (make-hash-table)
296 "Keeps track of MIME data on a per buffer basis.")
c26cf6c8 297
dda00b2c
BW
298(defvar mh-show-folder-buffer nil
299 "Keeps track of folder whose message is being displayed.")
c3d9274a 300
dda00b2c 301;; MH-Letter Locals
c26cf6c8 302
dda00b2c
BW
303(defvar mh-folders-changed nil
304 "Lists which folders were affected by deletes and refiles.
305This list will always include the current folder
306`mh-current-folder'. This variable can be used by
307`mh-after-commands-processed-hook'.")
c26cf6c8 308
dda00b2c
BW
309(defvar mh-mail-header-separator "--------"
310 "*Line used by MH to separate headers from text in messages being composed.
c26cf6c8 311
dda00b2c
BW
312This variable should not be used directly in programs. Programs
313should use `mail-header-separator' instead.
314`mail-header-separator' is initialized to
315`mh-mail-header-separator' in `mh-letter-mode'; in other
316contexts, you may have to perform this initialization yourself.
a66894d8 317
dda00b2c
BW
318Do not make this a regular expression as it may be the argument
319to `insert' and it is passed through `regexp-quote' before being
320used by functions like `re-search-forward'.")
f0d73c14 321
dda00b2c
BW
322(defvar mh-sent-from-folder nil
323 "Folder of msg assoc with this letter.")
cee9f5c6 324
dda00b2c
BW
325(defvar mh-sent-from-msg nil
326 "Number of msg assoc with this letter.")
a1b4049d 327
dda00b2c 328;; Sequences
c26cf6c8 329
dda00b2c
BW
330(defvar mh-unseen-seq nil
331 "Cached value of the \"Unseen-Sequence:\" MH profile component.
332Name of the Unseen sequence.")
c26cf6c8 333
dda00b2c
BW
334(defvar mh-previous-seq nil
335 "Cached value of the \"Previous-Sequence:\" MH profile component.
336Name of the Previous sequence.")
2dcf34f9 337
dda00b2c 338;; Etc. (alphabetical)
c26cf6c8 339
dda00b2c
BW
340(defvar mh-flists-present-flag nil
341 "Non-nil means that we have \"flists\".")
2dcf34f9 342
dda00b2c
BW
343(defvar mh-index-data-file ".mhe_index"
344 "MH-E specific file where index seach info is stored.")
c26cf6c8 345
dda00b2c 346(defvar mh-letter-header-field-regexp "^\\([A-Za-z][A-Za-z0-9-]*\\):")
c26cf6c8 347
dda00b2c
BW
348(defvar mh-page-to-next-msg-flag nil
349 "Non-nil means next SPC or whatever goes to next undeleted message.")
c26cf6c8 350
dda00b2c
BW
351(defvar mh-pgp-support-flag (not (not (locate-library "mml2015")))
352 "Non-nil means PGP support is available.")
553fb735 353
dda00b2c
BW
354(defvar mh-signature-separator "-- \n"
355 "Text of a signature separator.
bdcfe844 356
dda00b2c
BW
357A signature separator is used to separate the body of a message
358from the signature. This can be used by user agents such as MH-E
359to render the signature differently or to suppress the inclusion
360of the signature in a reply. Use `mh-signature-separator-regexp'
361when searching for a separator.")
553fb735 362
dda00b2c
BW
363(defvar mh-signature-separator-regexp "^-- $"
364 "This regular expression matches the signature separator.
365See `mh-signature-separator'.")
553fb735 366
dda00b2c
BW
367(defvar mh-thread-scan-line-map nil
368 "Map of message index to various parts of the scan line.")
369(make-variable-buffer-local 'mh-thread-scan-line-map)
bdcfe844 370
dda00b2c
BW
371(defvar mh-thread-scan-line-map-stack nil
372 "Old map of message index to various parts of the scan line.
373This is the original map that is stored when the folder is
374narrowed.")
375(make-variable-buffer-local 'mh-thread-scan-line-map-stack)
553fb735 376
dda00b2c
BW
377(defvar mh-x-mailer-string nil
378 "*String containing the contents of the X-Mailer header field.
379If nil, this variable is initialized to show the version of MH-E,
380Emacs, and MH the first time a message is composed.")
553fb735 381
dda00b2c 382\f
553fb735 383
dda00b2c 384;;; MH-E Entry Points
c3d9274a
BW
385
386(eval-when-compile (require 'gnus))
387
388(defmacro mh-macro-expansion-time-gnus-version ()
389 "Return Gnus version available at macro expansion time.
2dcf34f9
BW
390The macro evaluates the Gnus version at macro expansion time. If
391MH-E was compiled then macro expansion happens at compile time."
392gnus-version)
c3d9274a
BW
393
394(defun mh-run-time-gnus-version ()
395 "Return Gnus version available at run time."
396 (require 'gnus)
397 gnus-version)
398
847b8219 399;;;###autoload
c26cf6c8 400(defun mh-version ()
bdcfe844 401 "Display version information about MH-E and the MH mail handling system."
c26cf6c8 402 (interactive)
3d7ca223 403 (set-buffer (get-buffer-create mh-info-buffer))
c26cf6c8 404 (erase-buffer)
c3d9274a
BW
405 ;; MH-E version.
406 (insert "MH-E " mh-version "\n\n")
407 ;; MH-E compilation details.
408 (insert "MH-E compilation details:\n")
409 (let* ((compiled-mhe (byte-code-function-p (symbol-function 'mh-version)))
410 (gnus-compiled-version (if compiled-mhe
411 (mh-macro-expansion-time-gnus-version)
412 "N/A")))
413 (insert " Byte compiled:\t\t" (if compiled-mhe "yes" "no") "\n"
414 " Gnus (compile-time):\t" gnus-compiled-version "\n"
415 " Gnus (run-time):\t" (mh-run-time-gnus-version) "\n\n"))
416 ;; Emacs version.
417 (insert (emacs-version) "\n\n")
a1b4049d 418 ;; MH version.
f0d73c14
BW
419 (if mh-variant-in-use
420 (insert mh-variant-in-use "\n"
421 " mh-progs:\t" mh-progs "\n"
422 " mh-lib:\t" mh-lib "\n"
423 " mh-lib-progs:\t" mh-lib-progs "\n\n")
424 (insert "No MH variant detected\n"))
a1b4049d
BW
425 ;; Linux version.
426 (condition-case ()
427 (call-process "uname" nil t nil "-a")
428 (file-error))
429 (goto-char (point-min))
3d7ca223 430 (display-buffer mh-info-buffer))
c26cf6c8 431
dda00b2c
BW
432\f
433
434;;; Support Routines
435
436(defun mh-list-to-string (l)
437 "Flatten the list L and make every element of the new list into a string."
438 (nreverse (mh-list-to-string-1 l)))
439
440(defun mh-list-to-string-1 (l)
441 "Flatten the list L and make every element of the new list into a string."
8d1ada53
BW
442 (let (new-list)
443 (dolist (element l)
444 (cond ((null element))
445 ((symbolp element)
446 (push (symbol-name element) new-list))
447 ((numberp element)
448 (push (int-to-string element) new-list))
449 ((equal element ""))
450 ((stringp element)
451 (push element new-list))
452 ((listp element)
453 (setq new-list (nconc (mh-list-to-string-1 element) new-list)))
454 (t
455 (error "Bad element: %s" element))))
dda00b2c 456 new-list))
847b8219 457
c26cf6c8
RS
458\f
459
dda00b2c
BW
460;;; MH-E Process Support
461
462(defvar mh-index-max-cmdline-args 500
463 "Maximum number of command line args.")
c26cf6c8 464
dda00b2c
BW
465(defun mh-xargs (cmd &rest args)
466 "Partial imitation of xargs.
467The current buffer contains a list of strings, one on each line.
468The function will execute CMD with ARGS and pass the first
469`mh-index-max-cmdline-args' strings to it. This is repeated till
470all the strings have been used."
471 (goto-char (point-min))
472 (let ((current-buffer (current-buffer)))
473 (with-temp-buffer
474 (let ((out (current-buffer)))
475 (set-buffer current-buffer)
476 (while (not (eobp))
477 (let ((arg-list (reverse args))
478 (count 0))
479 (while (and (not (eobp)) (< count mh-index-max-cmdline-args))
d5dc8c56
BW
480 (push (buffer-substring-no-properties (point)
481 (mh-line-end-position))
dda00b2c
BW
482 arg-list)
483 (incf count)
484 (forward-line))
485 (apply #'call-process cmd nil (list out nil) nil
486 (nreverse arg-list))))
487 (erase-buffer)
488 (insert-buffer-substring out)))))
489
490;; XXX This should be applied anywhere MH-E calls out to /bin/sh.
491(defun mh-quote-for-shell (string)
492 "Quote STRING for /bin/sh.
493Adds double-quotes around entire string and quotes the characters
494\\, `, and $ with a backslash."
495 (concat "\""
496 (loop for x across string
497 concat (format (if (memq x '(?\\ ?` ?$)) "\\%c" "%c") x))
498 "\""))
499
500(defun mh-exec-cmd (command &rest args)
501 "Execute mh-command COMMAND with ARGS.
502The side effects are what is desired. Any output is assumed to be
503an error and is shown to the user. The output is not read or
504parsed by MH-E."
c26cf6c8 505 (save-excursion
dda00b2c
BW
506 (set-buffer (get-buffer-create mh-log-buffer))
507 (let* ((initial-size (mh-truncate-log-buffer))
508 (start (point))
509 (args (mh-list-to-string args)))
510 (apply 'call-process (expand-file-name command mh-progs) nil t nil args)
511 (when (> (buffer-size) initial-size)
512 (save-excursion
513 (goto-char start)
514 (insert "Errors when executing: " command)
515 (loop for arg in args do (insert " " arg))
516 (insert "\n"))
517 (save-window-excursion
518 (switch-to-buffer-other-window mh-log-buffer)
519 (sit-for 5))))))
520
521(defun mh-exec-cmd-error (env command &rest args)
522 "In environment ENV, execute mh-command COMMAND with ARGS.
523ENV is nil or a string of space-separated \"var=value\" elements.
524Signals an error if process does not complete successfully."
c26cf6c8 525 (save-excursion
dda00b2c
BW
526 (set-buffer (get-buffer-create mh-temp-buffer))
527 (erase-buffer)
528 (let ((process-environment process-environment))
529 ;; XXX: We should purge the list that split-string returns of empty
530 ;; strings. This can happen in XEmacs if leading or trailing spaces
531 ;; are present.
532 (dolist (elem (if (stringp env) (split-string env " ") ()))
533 (push elem process-environment))
534 (mh-handle-process-error
535 command (apply #'call-process (expand-file-name command mh-progs)
536 nil t nil (mh-list-to-string args))))))
537
538(defun mh-exec-cmd-daemon (command filter &rest args)
539 "Execute MH command COMMAND in the background.
540
541If FILTER is non-nil then it is used to process the output
542otherwise the default filter `mh-process-daemon' is used. See
543`set-process-filter' for more details of FILTER.
544
545ARGS are passed to COMMAND as command line arguments."
546 (save-excursion
547 (set-buffer (get-buffer-create mh-log-buffer))
548 (mh-truncate-log-buffer))
549 (let* ((process-connection-type nil)
550 (process (apply 'start-process
551 command nil
552 (expand-file-name command mh-progs)
553 (mh-list-to-string args))))
554 (set-process-filter process (or filter 'mh-process-daemon))
555 process))
556
557(defun mh-exec-cmd-env-daemon (env command filter &rest args)
c76608f0 558 "In environment ENV, execute mh-command COMMAND in the background.
dda00b2c
BW
559
560ENV is nil or a string of space-separated \"var=value\" elements.
561Signals an error if process does not complete successfully.
562
563If FILTER is non-nil then it is used to process the output
564otherwise the default filter `mh-process-daemon' is used. See
565`set-process-filter' for more details of FILTER.
566
567ARGS are passed to COMMAND as command line arguments."
568 (let ((process-environment process-environment))
569 (dolist (elem (if (stringp env) (split-string env " ") ()))
570 (push elem process-environment))
571 (apply #'mh-exec-cmd-daemon command filter args)))
572
573(defun mh-process-daemon (process output)
574 "PROCESS daemon that puts OUTPUT into a temporary buffer.
575Any output from the process is displayed in an asynchronous
576pop-up window."
577 (with-current-buffer (get-buffer-create mh-log-buffer)
578 (insert-before-markers output)
579 (display-buffer mh-log-buffer)))
580
581(defun mh-exec-cmd-quiet (raise-error command &rest args)
582 "Signal RAISE-ERROR if COMMAND with ARGS fails.
583Execute MH command COMMAND with ARGS. ARGS is a list of strings.
584Return at start of mh-temp buffer, where output can be parsed and
585used.
586Returns value of `call-process', which is 0 for success, unless
587RAISE-ERROR is non-nil, in which case an error is signaled if
588`call-process' returns non-0."
589 (set-buffer (get-buffer-create mh-temp-buffer))
590 (erase-buffer)
591 (let ((value
592 (apply 'call-process
593 (expand-file-name command mh-progs) nil t nil
594 args)))
595 (goto-char (point-min))
596 (if raise-error
597 (mh-handle-process-error command value)
598 value)))
599
600(defun mh-exec-cmd-output (command display &rest args)
601 "Execute MH command COMMAND with DISPLAY flag and ARGS.
602Put the output into buffer after point.
603Set mark after inserted text.
604Output is expected to be shown to user, not parsed by MH-E."
605 (push-mark (point) t)
606 (apply 'call-process
607 (expand-file-name command mh-progs) nil t display
608 (mh-list-to-string args))
609
610 ;; The following is used instead of 'exchange-point-and-mark because the
611 ;; latter activates the current region (between point and mark), which
612 ;; turns on highlighting. So prior to this bug fix, doing "inc" would
613 ;; highlight a region containing the new messages, which is undesirable.
614 ;; The bug wasn't seen in emacs21 but still occurred in XEmacs21.4.
615 (mh-exchange-point-and-mark-preserving-active-mark))
616
617;; Shush compiler.
42f8c37f 618(defvar mark-active) ; XEmacs
dda00b2c
BW
619
620(defun mh-exchange-point-and-mark-preserving-active-mark ()
621 "Put the mark where point is now, and point where the mark is now.
622This command works even when the mark is not active, and
623preserves whether the mark is active or not."
624 (interactive nil)
625 (let ((is-active (and (boundp 'mark-active) mark-active)))
626 (let ((omark (mark t)))
627 (if (null omark)
628 (error "No mark set in this buffer"))
629 (set-mark (point))
630 (goto-char omark)
631 (if (boundp 'mark-active)
632 (setq mark-active is-active))
633 nil)))
634
635(defun mh-exec-lib-cmd-output (command &rest args)
636 "Execute MH library command COMMAND with ARGS.
637Put the output into buffer after point.
638Set mark after inserted text."
639 (apply 'mh-exec-cmd-output (expand-file-name command mh-lib-progs) nil args))
640
641(defun mh-handle-process-error (command status)
642 "Raise error if COMMAND returned non-zero STATUS, otherwise return STATUS."
643 (if (equal status 0)
644 status
645 (goto-char (point-min))
646 (insert (if (integerp status)
647 (format "%s: exit code %d\n" command status)
648 (format "%s: %s\n" command status)))
649 (save-excursion
650 (let ((error-message (buffer-substring (point-min) (point-max))))
651 (set-buffer (get-buffer-create mh-log-buffer))
652 (mh-truncate-log-buffer)
653 (insert error-message)))
654 (error "%s failed, check buffer %s for error message"
655 command mh-log-buffer)))
656
657\f
658
fde155f4
BW
659;;; MH-E Customization Support Routines
660
661;; Shush compiler (Emacs 21 and XEmacs).
662(defvar customize-package-emacs-version-alist)
663
664;; Temporary function and data structure used customization.
665;; These will be unbound after the options are defined.
666(defmacro mh-strip-package-version (args)
667 "Strip :package-version keyword and its value from ARGS.
668In Emacs versions that support the :package-version keyword,
669ARGS is returned unchanged."
670 `(if (boundp 'customize-package-emacs-version-alist)
671 ,args
672 (let (seen)
673 (loop for keyword in ,args
674 if (cond ((eq keyword ':package-version) (setq seen t) nil)
675 (seen (setq seen nil) nil)
676 (t t))
677 collect keyword))))
678
c90c4cf1 679(defmacro defgroup-mh (symbol members doc &rest args)
fde155f4
BW
680 "Declare SYMBOL as a customization group containing MEMBERS.
681See documentation for `defgroup' for a description of the arguments
682SYMBOL, MEMBERS, DOC and ARGS.
683This macro is used by Emacs versions that lack the :package-version
684keyword, introduced in Emacs 22."
685 (declare (doc-string 3))
686 `(defgroup ,symbol ,members ,doc ,@(mh-strip-package-version args)))
c90c4cf1 687(put 'defgroup-mh 'lisp-indent-function 'defun)
fde155f4 688
c90c4cf1 689(defmacro defcustom-mh (symbol value doc &rest args)
fde155f4
BW
690 "Declare SYMBOL as a customizable variable that defaults to VALUE.
691See documentation for `defcustom' for a description of the arguments
692SYMBOL, VALUE, DOC and ARGS.
693This macro is used by Emacs versions that lack the :package-version
694keyword, introduced in Emacs 22."
695 (declare (doc-string 3))
696 `(defcustom ,symbol ,value ,doc ,@(mh-strip-package-version args)))
c90c4cf1 697(put 'defcustom-mh 'lisp-indent-function 'defun)
fde155f4 698
c90c4cf1 699(defmacro defface-mh (face spec doc &rest args)
fde155f4
BW
700 "Declare FACE as a customizable face that defaults to SPEC.
701See documentation for `defface' for a description of the arguments
702FACE, SPEC, DOC and ARGS.
703This macro is used by Emacs versions that lack the :package-version
704keyword, introduced in Emacs 22."
705 (declare (doc-string 3))
706 `(defface ,face ,spec ,doc ,@(mh-strip-package-version args)))
c90c4cf1 707(put 'defface-mh 'lisp-indent-function 'defun)
fde155f4
BW
708
709\f
710
dda00b2c
BW
711;;; Variant Support
712
c90c4cf1 713(defcustom-mh mh-path nil
dda00b2c
BW
714 "*Additional list of directories to search for MH.
715See `mh-variant'."
716 :group 'mh-e
fde155f4 717 :type '(repeat (directory))
7bf0295e 718 :package-version '(MH-E . "8.0"))
dda00b2c
BW
719
720(defun mh-variants ()
721 "Return a list of installed variants of MH on the system.
722This function looks for MH in `mh-sys-path', `mh-path' and
723`exec-path'. The format of the list of variants that is returned
724is described by the variable `mh-variants'."
725 (if mh-variants
726 mh-variants
727 (let ((list-unique))
728 ;; Make a unique list of directories, keeping the given order.
729 ;; We don't want the same MH variant to be listed multiple times.
730 (loop for dir in (append mh-path mh-sys-path exec-path) do
731 (setq dir (file-chase-links (directory-file-name dir)))
732 (add-to-list 'list-unique dir))
733 (loop for dir in (nreverse list-unique) do
734 (when (and dir (file-directory-p dir) (file-readable-p dir))
735 (let ((variant (mh-variant-info dir)))
736 (if variant
737 (add-to-list 'mh-variants variant)))))
738 mh-variants)))
739
740(defun mh-variant-info (dir)
741 "Return MH variant found in DIR, or nil if none present."
3d7ca223 742 (save-excursion
dda00b2c
BW
743 (let ((tmp-buffer (get-buffer-create mh-temp-buffer)))
744 (set-buffer tmp-buffer)
745 (cond
746 ((mh-variant-mh-info dir))
747 ((mh-variant-nmh-info dir))
efa47761 748 ((mh-variant-gnu-mh-info dir))))))
dda00b2c
BW
749
750(defun mh-variant-mh-info (dir)
efa47761 751 "Return info for MH variant in DIR assuming a temporary buffer is set up."
dda00b2c
BW
752 ;; MH does not have the -version option.
753 ;; Its version number is included in the output of "-help" as:
754 ;;
755 ;; version: MH 6.8.4 #2[UCI] (burrito) of Fri Jan 15 20:01:39 EST 1999
756 ;; options: [ATHENA] [BIND] [DUMB] [LIBLOCKFILE] [LOCALE] [MAILGROUP] [MHE]
757 ;; [MHRC] [MIME] [MORE='"/usr/bin/sensible-pager"'] [NLINK_HACK]
758 ;; [NORUSERPASS] [OVERHEAD] [POP] [POPSERVICE='"pop-3"'] [RENAME]
759 ;; [RFC1342] [RPATHS] [RPOP] [SENDMTS] [SMTP] [SOCKETS]
760 ;; [SPRINTFTYPE=int] [SVR4] [SYS5] [SYS5DIR] [TERMINFO]
761 ;; [TYPESIG=void] [UNISTD] [UTK] [VSPRINTF]
762 (let ((mhparam (expand-file-name "mhparam" dir)))
763 (when (mh-file-command-p mhparam)
764 (erase-buffer)
765 (call-process mhparam nil '(t nil) nil "-help")
766 (goto-char (point-min))
767 (when (search-forward-regexp "version: MH \\(\\S +\\)" nil t)
768 (let ((version (format "MH %s" (match-string 1))))
769 (erase-buffer)
770 (call-process mhparam nil '(t nil) nil "libdir")
771 (goto-char (point-min))
772 (when (search-forward-regexp "^.*$" nil t)
773 (let ((libdir (match-string 0)))
774 `(,version
775 (variant mh)
776 (mh-lib-progs ,libdir)
777 (mh-lib ,libdir)
778 (mh-progs ,dir)
779 (flists nil)))))))))
780
efa47761
BW
781(defun mh-variant-gnu-mh-info (dir)
782 "Return info for GNU mailutils MH variant in DIR.
783This assumes that a temporary buffer is set up."
dda00b2c
BW
784 ;; 'mhparam -version' output:
785 ;; mhparam (GNU mailutils 0.3.2)
786 (let ((mhparam (expand-file-name "mhparam" dir)))
787 (when (mh-file-command-p mhparam)
788 (erase-buffer)
789 (call-process mhparam nil '(t nil) nil "-version")
790 (goto-char (point-min))
791 (when (search-forward-regexp "mhparam (\\(GNU [Mm]ailutils \\S +\\))"
792 nil t)
793 (let ((version (match-string 1))
794 (mh-progs dir))
795 `(,version
efa47761 796 (variant gnu-mh)
dda00b2c
BW
797 (mh-lib-progs ,(mh-profile-component "libdir"))
798 (mh-lib ,(mh-profile-component "etcdir"))
799 (mh-progs ,dir)
800 (flists ,(file-exists-p
801 (expand-file-name "flists" dir)))))))))
802
803(defun mh-variant-nmh-info (dir)
efa47761 804 "Return info for nmh variant in DIR assuming a temporary buffer is set up."
dda00b2c
BW
805 ;; `mhparam -version' outputs:
806 ;; mhparam -- nmh-1.1-RC1 [compiled on chaak at Fri Jun 20 11:03:28 PDT 2003]
807 (let ((mhparam (expand-file-name "mhparam" dir)))
808 (when (mh-file-command-p mhparam)
809 (erase-buffer)
810 (call-process mhparam nil '(t nil) nil "-version")
811 (goto-char (point-min))
812 (when (search-forward-regexp "mhparam -- nmh-\\(\\S +\\)" nil t)
813 (let ((version (format "nmh %s" (match-string 1)))
814 (mh-progs dir))
815 `(,version
816 (variant nmh)
817 (mh-lib-progs ,(mh-profile-component "libdir"))
818 (mh-lib ,(mh-profile-component "etcdir"))
819 (mh-progs ,dir)
820 (flists ,(file-exists-p
821 (expand-file-name "flists" dir)))))))))
822
823(defun mh-file-command-p (file)
824 "Return t if file FILE is the name of a executable regular file."
825 (and (file-regular-p file) (file-executable-p file)))
826
827(defun mh-variant-set-variant (variant)
efa47761 828 "Set up the system variables for the MH variant named VARIANT.
dda00b2c
BW
829If VARIANT is a string, use that key in the alist returned by the
830function `mh-variants'.
831If VARIANT is a symbol, select the first entry that matches that
832variant."
833 (cond
834 ((stringp variant) ;e.g. "nmh 1.1-RC1"
835 (when (assoc variant (mh-variants))
836 (let* ((alist (cdr (assoc variant (mh-variants))))
837 (lib-progs (cadr (assoc 'mh-lib-progs alist)))
838 (lib (cadr (assoc 'mh-lib alist)))
839 (progs (cadr (assoc 'mh-progs alist)))
840 (flists (cadr (assoc 'flists alist))))
841 ;;(set-default mh-variant variant)
842 (setq mh-x-mailer-string nil
843 mh-flists-present-flag flists
844 mh-lib-progs lib-progs
845 mh-lib lib
846 mh-progs progs
847 mh-variant-in-use variant))))
848 ((symbolp variant) ;e.g. 'nmh (pick the first match)
849 (loop for variant-list in (mh-variants)
850 when (eq variant (cadr (assoc 'variant (cdr variant-list))))
851 return (let* ((version (car variant-list))
852 (alist (cdr variant-list))
853 (lib-progs (cadr (assoc 'mh-lib-progs alist)))
854 (lib (cadr (assoc 'mh-lib alist)))
855 (progs (cadr (assoc 'mh-progs alist)))
856 (flists (cadr (assoc 'flists alist))))
857 ;;(set-default mh-variant flavor)
858 (setq mh-x-mailer-string nil
859 mh-flists-present-flag flists
860 mh-lib-progs lib-progs
861 mh-lib lib
862 mh-progs progs
863 mh-variant-in-use version)
864 t)))))
865
866(defun mh-variant-p (&rest variants)
867 "Return t if variant is any of VARIANTS.
efa47761 868Currently known variants are 'MH, 'nmh, and 'gnu-mh."
dda00b2c
BW
869 (let ((variant-in-use
870 (cadr (assoc 'variant (assoc mh-variant-in-use (mh-variants))))))
871 (not (null (member variant-in-use variants)))))
872
873(defun mh-profile-component (component)
874 "Return COMPONENT value from mhparam, or nil if unset."
875 (save-excursion
efa47761
BW
876 ;; MH and nmh use -components, GNU mailutils MH uses -component.
877 ;; Since MH and nmh work with an unambiguous prefix, the `s' is
878 ;; dropped here.
0c32f8c6 879 (mh-exec-cmd-quiet nil "mhparam" "-component" component)
dda00b2c
BW
880 (mh-profile-component-value component)))
881
882(defun mh-profile-component-value (component)
883 "Find and return the value of COMPONENT in the current buffer.
884Returns nil if the component is not in the buffer."
885 (let ((case-fold-search t))
886 (goto-char (point-min))
887 (cond ((not (re-search-forward (format "^%s:" component) nil t)) nil)
888 ((looking-at "[\t ]*$") nil)
3d7ca223 889 (t
dda00b2c
BW
890 (re-search-forward "[\t ]*\\([^\t \n].*\\)$" nil t)
891 (let ((start (match-beginning 1)))
892 (end-of-line)
893 (buffer-substring start (point)))))))
894
895(defun mh-variant-set (variant)
896 "Set the MH variant to VARIANT.
897Sets `mh-progs', `mh-lib', `mh-lib-progs' and
898`mh-flists-present-flag'.
899If the VARIANT is \"autodetect\", then first try nmh, then MH and
efa47761 900finally GNU mailutils MH."
dda00b2c
BW
901 (interactive
902 (list (completing-read
903 "MH variant: "
904 (mapcar (lambda (x) (list (car x))) (mh-variants))
905 nil t)))
efa47761
BW
906
907 ;; TODO Remove mu-mh backwards compatibility in 9.0.
908 (when (and (stringp variant)
909 (string-match "^mu-mh" variant))
910 (message
6807fdff 911 (format "%s\n%s; %s" "The variant name mu-mh has been renamed to gnu-mh"
efa47761
BW
912 "and will be removed in MH-E 9.0"
913 "try M-x customize-option mh-variant"))
914 (sit-for 5)
915 (setq variant (concat "gnu-mh" (substring variant (match-end 0)))))
916
dda00b2c
BW
917 (let ((valid-list (mapcar (lambda (x) (car x)) (mh-variants))))
918 (cond
919 ((eq variant 'none))
920 ((eq variant 'autodetect)
921 (cond
922 ((mh-variant-set-variant 'nmh)
923 (message "%s installed as MH variant" mh-variant-in-use))
924 ((mh-variant-set-variant 'mh)
925 (message "%s installed as MH variant" mh-variant-in-use))
efa47761 926 ((mh-variant-set-variant 'gnu-mh)
dda00b2c
BW
927 (message "%s installed as MH variant" mh-variant-in-use))
928 (t
929 (message "No MH variant found on the system"))))
930 ((member variant valid-list)
931 (when (not (mh-variant-set-variant variant))
932 (message "Warning: %s variant not found. Autodetecting..." variant)
933 (mh-variant-set 'autodetect)))
934 (t
efa47761
BW
935 (message "Unknown variant %s; use %s"
936 variant
dda00b2c
BW
937 (mapconcat '(lambda (x) (format "%s" (car x)))
938 (mh-variants) " or "))))))
939
c90c4cf1 940(defcustom-mh mh-variant 'autodetect
dda00b2c
BW
941 "*Specifies the variant used by MH-E.
942
943The default setting of this option is \"Auto-detect\" which means
944that MH-E will automatically choose the first of nmh, MH, or GNU
efa47761 945mailutils MH that it finds in the directories listed in
dda00b2c 946`mh-path' (which you can customize), `mh-sys-path', and
bc4c8031
BW
947`exec-path'. If MH-E can't find MH at all, you may have to
948customize `mh-path' and add the directory in which the command
949\"mhparam\" is located. If, on the other hand, you have both nmh
efa47761
BW
950and GNU mailutils MH installed (for example) and
951`mh-variant-in-use' was initialized to nmh but you want to use
952GNU mailutils MH, then you can set this option to \"gnu-mh\".
dda00b2c
BW
953
954When this variable is changed, MH-E resets `mh-progs', `mh-lib',
955`mh-lib-progs', `mh-flists-present-flag', and `mh-variant-in-use'
bc4c8031
BW
956accordingly. Prior to version 8, it was often necessary to set
957some of these variables in \"~/.emacs\"; now it is no longer
958necessary and can actually cause problems."
dda00b2c
BW
959 :type `(radio
960 (const :tag "Auto-detect" autodetect)
961 ,@(mapcar (lambda (x) `(const ,(car x))) (mh-variants)))
962 :set (lambda (symbol value)
963 (set-default symbol value) ;Done in mh-variant-set-variant!
964 (mh-variant-set value))
fde155f4 965 :group 'mh-e
7bf0295e 966 :package-version '(MH-E . "8.0"))
23347d76 967
23347d76
BW
968\f
969
dda00b2c 970;;; MH-E Customization
c26cf6c8 971
dda00b2c
BW
972;; All of the defgroups, defcustoms, and deffaces in MH-E are found
973;; here. This makes it possible to customize modules that aren't
974;; loaded yet. It also makes it easier to organize the customization
975;; groups.
a66894d8 976
dda00b2c
BW
977;; This section contains the following sub-sections:
978
979;; 1. MH-E Customization Groups
980
981;; These are the customization group definitions. Every group has a
982;; associated manual node. The ordering is alphabetical, except for
983;; the groups mh-faces and mh-hooks which are last .
984
985;; 2. MH-E Customization
986
987;; These are the actual customization variables. There is a
988;; sub-section for each group in the MH-E Customization Groups
989;; section, in the same order, separated by page breaks. Within
990;; each section, variables are sorted alphabetically.
991
992;; 3. Hooks
993
994;; All hooks must be placed in the mh-hook group; in addition, add
995;; the group associated with the manual node in which the hook is
996;; described. Since the mh-hook group appears near the end of this
997;; section, the hooks will appear at the end of these other groups.
998
999;; 4. Faces
1000
1001;; All faces must be placed in the mh-faces group; in addition, add
1002;; the group associated with the manual node in which the face is
1003;; described. Since the mh-faces group appears near the end of this
1004;; section, the faces will appear at the end of these other groups.
1005
1006(defun mh-customize (&optional delete-other-windows-flag)
1007 "Customize MH-E variables.
1008If optional argument DELETE-OTHER-WINDOWS-FLAG is non-nil, other
1009windows in the frame are removed."
1010 (interactive "P")
1011 (customize-group 'mh-e)
1012 (when delete-other-windows-flag
1013 (delete-other-windows)))
c26cf6c8 1014
23347d76
BW
1015(if (boundp 'customize-package-emacs-version-alist)
1016 (add-to-list 'customize-package-emacs-version-alist
70a1d47e
BW
1017 '(MH-E ("6.0" . "22.1") ("6.1" . "22.1") ("7.0" . "22.1")
1018 ("7.1" . "22.1") ("7.2" . "22.1") ("7.3" . "22.1")
1019 ("7.4" . "22.1") ("8.0" . "22.1"))))
23347d76 1020
bdcfe844
BW
1021\f
1022
dda00b2c
BW
1023;;; MH-E Customization Groups
1024
c90c4cf1 1025(defgroup-mh mh-e nil
dda00b2c
BW
1026 "Emacs interface to the MH mail system.
1027MH is the Rand Mail Handler. Other implementations include nmh
1028and GNU mailutils."
1029 :link '(custom-manual "(mh-e)Top")
23347d76 1030 :group 'mail
70a1d47e 1031 :package-version '(MH-E . "8.0"))
dda00b2c 1032
c90c4cf1 1033(defgroup-mh mh-alias nil
dda00b2c
BW
1034 "Aliases."
1035 :link '(custom-manual "(mh-e)Aliases")
1036 :prefix "mh-alias-"
23347d76 1037 :group 'mh-e
70a1d47e 1038 :package-version '(MH-E . "7.1"))
dda00b2c 1039
c90c4cf1 1040(defgroup-mh mh-folder nil
dda00b2c
BW
1041 "Organizing your mail with folders."
1042 :prefix "mh-"
1043 :link '(custom-manual "(mh-e)Folders")
23347d76 1044 :group 'mh-e
70a1d47e 1045 :package-version '(MH-E . "7.1"))
dda00b2c 1046
c90c4cf1 1047(defgroup-mh mh-folder-selection nil
dda00b2c
BW
1048 "Folder selection."
1049 :prefix "mh-"
1050 :link '(custom-manual "(mh-e)Folder Selection")
23347d76 1051 :group 'mh-e
70a1d47e 1052 :package-version '(MH-E . "8.0"))
dda00b2c 1053
c90c4cf1 1054(defgroup-mh mh-identity nil
dda00b2c
BW
1055 "Identities."
1056 :link '(custom-manual "(mh-e)Identities")
1057 :prefix "mh-identity-"
23347d76 1058 :group 'mh-e
70a1d47e 1059 :package-version '(MH-E . "7.1"))
dda00b2c 1060
c90c4cf1 1061(defgroup-mh mh-inc nil
dda00b2c
BW
1062 "Incorporating your mail."
1063 :prefix "mh-inc-"
1064 :link '(custom-manual "(mh-e)Incorporating Mail")
23347d76 1065 :group 'mh-e
70a1d47e 1066 :package-version '(MH-E . "8.0"))
dda00b2c 1067
c90c4cf1 1068(defgroup-mh mh-junk nil
dda00b2c
BW
1069 "Dealing with junk mail."
1070 :link '(custom-manual "(mh-e)Junk")
1071 :prefix "mh-junk-"
23347d76 1072 :group 'mh-e
70a1d47e 1073 :package-version '(MH-E . "7.3"))
dda00b2c 1074
c90c4cf1 1075(defgroup-mh mh-letter nil
dda00b2c
BW
1076 "Editing a draft."
1077 :prefix "mh-"
1078 :link '(custom-manual "(mh-e)Editing Drafts")
23347d76 1079 :group 'mh-e
70a1d47e 1080 :package-version '(MH-E . "7.1"))
dda00b2c 1081
c90c4cf1 1082(defgroup-mh mh-ranges nil
dda00b2c
BW
1083 "Ranges."
1084 :prefix "mh-"
1085 :link '(custom-manual "(mh-e)Ranges")
23347d76 1086 :group 'mh-e
70a1d47e 1087 :package-version '(MH-E . "8.0"))
dda00b2c 1088
c90c4cf1 1089(defgroup-mh mh-scan-line-formats nil
dda00b2c
BW
1090 "Scan line formats."
1091 :link '(custom-manual "(mh-e)Scan Line Formats")
1092 :prefix "mh-"
23347d76 1093 :group 'mh-e
70a1d47e 1094 :package-version '(MH-E . "8.0"))
dda00b2c 1095
c90c4cf1 1096(defgroup-mh mh-search nil
dda00b2c
BW
1097 "Searching."
1098 :link '(custom-manual "(mh-e)Searching")
1099 :prefix "mh-search-"
23347d76 1100 :group 'mh-e
70a1d47e 1101 :package-version '(MH-E . "8.0"))
dda00b2c 1102
c90c4cf1 1103(defgroup-mh mh-sending-mail nil
dda00b2c
BW
1104 "Sending mail."
1105 :prefix "mh-"
1106 :link '(custom-manual "(mh-e)Sending Mail")
23347d76 1107 :group 'mh-e
70a1d47e 1108 :package-version '(MH-E . "8.0"))
dda00b2c 1109
c90c4cf1 1110(defgroup-mh mh-sequences nil
dda00b2c
BW
1111 "Sequences."
1112 :prefix "mh-"
1113 :link '(custom-manual "(mh-e)Sequences")
23347d76 1114 :group 'mh-e
70a1d47e 1115 :package-version '(MH-E . "8.0"))
dda00b2c 1116
c90c4cf1 1117(defgroup-mh mh-show nil
dda00b2c
BW
1118 "Reading your mail."
1119 :prefix "mh-"
1120 :link '(custom-manual "(mh-e)Reading Mail")
23347d76 1121 :group 'mh-e
70a1d47e 1122 :package-version '(MH-E . "7.1"))
dda00b2c 1123
c90c4cf1 1124(defgroup-mh mh-speedbar nil
dda00b2c
BW
1125 "The speedbar."
1126 :prefix "mh-speed-"
1127 :link '(custom-manual "(mh-e)Speedbar")
23347d76 1128 :group 'mh-e
70a1d47e 1129 :package-version '(MH-E . "8.0"))
dda00b2c 1130
c90c4cf1 1131(defgroup-mh mh-thread nil
dda00b2c
BW
1132 "Threading."
1133 :prefix "mh-thread-"
1134 :link '(custom-manual "(mh-e)Threading")
23347d76 1135 :group 'mh-e
70a1d47e 1136 :package-version '(MH-E . "8.0"))
dda00b2c 1137
c90c4cf1 1138(defgroup-mh mh-tool-bar nil
dda00b2c
BW
1139 "The tool bar"
1140 :link '(custom-manual "(mh-e)Tool Bar")
1141 :prefix "mh-"
23347d76 1142 :group 'mh-e
70a1d47e 1143 :package-version '(MH-E . "8.0"))
dda00b2c 1144
c90c4cf1 1145(defgroup-mh mh-hooks nil
dda00b2c
BW
1146 "MH-E hooks."
1147 :link '(custom-manual "(mh-e)Top")
1148 :prefix "mh-"
23347d76 1149 :group 'mh-e
70a1d47e 1150 :package-version '(MH-E . "7.1"))
dda00b2c 1151
c90c4cf1 1152(defgroup-mh mh-faces nil
dda00b2c
BW
1153 "Faces used in MH-E."
1154 :link '(custom-manual "(mh-e)Top")
1155 :prefix "mh-"
1156 :group 'faces
23347d76 1157 :group 'mh-e
70a1d47e 1158 :package-version '(MH-E . "7.1"))
bdcfe844
BW
1159
1160\f
1161
23347d76 1162;;; MH-E Customization
dda00b2c 1163
23347d76 1164;; See Variant Support, above, for mh-e group.
dda00b2c
BW
1165
1166;;; Aliases (:group 'mh-alias)
1167
c90c4cf1 1168(defcustom-mh mh-alias-completion-ignore-case-flag t
dda00b2c
BW
1169 "*Non-nil means don't consider case significant in MH alias completion.
1170
1171As MH ignores case in the aliases, so too does MH-E. However, you
1172may turn off this option to make case significant which can be
1173used to segregate completion of your aliases. You might use
1174lowercase for mailing lists and uppercase for people."
1175 :type 'boolean
23347d76 1176 :group 'mh-alias
70a1d47e 1177 :package-version '(MH-E . "7.1"))
dda00b2c 1178
c90c4cf1 1179(defcustom-mh mh-alias-expand-aliases-flag nil
dda00b2c
BW
1180 "*Non-nil means to expand aliases entered in the minibuffer.
1181
1182In other words, aliases entered in the minibuffer will be
1183expanded to the full address in the message draft. By default,
1184this expansion is not performed."
1185 :type 'boolean
23347d76 1186 :group 'mh-alias
70a1d47e 1187 :package-version '(MH-E . "7.1"))
dda00b2c 1188
c90c4cf1 1189(defcustom-mh mh-alias-flash-on-comma t
dda00b2c
BW
1190 "*Specify whether to flash address or warn on translation.
1191
1192This option controls the behavior when a [comma] is pressed while
1193entering aliases or addresses. The default setting flashes the
1194address associated with an address in the minibuffer briefly, but
1195does not display a warning if the alias is not found."
1196 :type '(choice (const :tag "Flash but Don't Warn If No Alias" t)
1197 (const :tag "Flash and Warn If No Alias" 1)
1198 (const :tag "Don't Flash Nor Warn If No Alias" nil))
23347d76 1199 :group 'mh-alias
70a1d47e 1200 :package-version '(MH-E . "7.1"))
dda00b2c 1201
c90c4cf1 1202(defcustom-mh mh-alias-insert-file nil
dda00b2c
BW
1203 "*Filename used to store a new MH-E alias.
1204
1205The default setting of this option is \"Use Aliasfile Profile
1206Component\". This option can also hold the name of a file or a
1207list a file names. If this option is set to a list of file names,
1208or the \"Aliasfile:\" profile component contains more than one file
1209name, MH-E will prompt for one of them when MH-E adds an alias."
1210 :type '(choice (const :tag "Use Aliasfile Profile Component" nil)
1211 (file :tag "Alias File")
1212 (repeat :tag "List of Alias Files" file))
23347d76 1213 :group 'mh-alias
70a1d47e 1214 :package-version '(MH-E . "7.1"))
dda00b2c 1215
c90c4cf1 1216(defcustom-mh mh-alias-insertion-location 'sorted
dda00b2c
BW
1217 "Specifies where new aliases are entered in alias files.
1218
1219This option is set to \"Alphabetical\" by default. If you organize
1220your alias file in other ways, then adding aliases to the \"Top\"
1221or \"Bottom\" of your alias file might be more appropriate."
1222 :type '(choice (const :tag "Alphabetical" sorted)
1223 (const :tag "Top" top)
1224 (const :tag "Bottom" bottom))
23347d76 1225 :group 'mh-alias
70a1d47e 1226 :package-version '(MH-E . "7.1"))
dda00b2c 1227
c90c4cf1 1228(defcustom-mh mh-alias-local-users t
1a9aa7df 1229 "*Non-nil means local users are added to alias completion.
dda00b2c
BW
1230
1231Aliases are created from \"/etc/passwd\" entries with a user ID
1232larger than a magical number, typically 200. This can be a handy
1233tool on a machine where you and co-workers exchange messages.
1234These aliases have the form \"local.first.last\" if a real name is
1235present in the password file. Otherwise, the alias will have the
1236form \"local.login\".
1237
1238If you're on a system with thousands of users you don't know, and
1239the loading of local aliases slows MH-E down noticeably, then
1240turn this option off.
1241
1242This option also takes a string which is executed to generate the
1243password file. For example, use \"ypcat passwd\" to obtain the
1244NIS password file."
1245 :type '(choice (boolean) (string))
23347d76 1246 :group 'mh-alias
70a1d47e 1247 :package-version '(MH-E . "7.1"))
dda00b2c 1248
c90c4cf1 1249(defcustom-mh mh-alias-local-users-prefix "local."
dda00b2c
BW
1250 "*String prefixed to the real names of users from the password file.
1251This option can also be set to \"Use Login\".
1252
1253For example, consider the following password file entry:
1254
1255 psg:x:1000:1000:Peter S Galbraith,,,:/home/psg:/bin/tcsh
1256
1257The following settings of this option will produce the associated
1258aliases:
1259
1260 \"local.\" local.peter.galbraith
1261 \"\" peter.galbraith
1262 Use Login psg
1263
1264This option has no effect if variable `mh-alias-local-users' is
1265turned off."
1266 :type '(choice (const :tag "Use Login" nil)
1267 (string))
23347d76 1268 :group 'mh-alias
70a1d47e 1269 :package-version '(MH-E . "7.4"))
dda00b2c 1270
c90c4cf1 1271(defcustom-mh mh-alias-passwd-gecos-comma-separator-flag t
dda00b2c
BW
1272 "*Non-nil means the gecos field in the password file uses a comma separator.
1273
1274In the example in `mh-alias-local-users-prefix', commas are used
1275to separate different values within the so-called gecos field.
1276This is a fairly common usage. However, in the rare case that the
1277gecos field in your password file is not separated by commas and
1278whose contents may contain commas, you can turn this option off."
1279 :type 'boolean
23347d76 1280 :group 'mh-alias
70a1d47e 1281 :package-version '(MH-E . "7.4"))
7094eefe 1282
dda00b2c
BW
1283;;; Organizing Your Mail with Folders (:group 'mh-folder)
1284
c90c4cf1 1285(defcustom-mh mh-new-messages-folders t
dda00b2c
BW
1286 "Folders searched for the \"unseen\" sequence.
1287
1288Set this option to \"Inbox\" to search the \"+inbox\" folder or
1289\"All\" to search all of the top level folders. Otherwise, list
1290the folders that should be searched with the \"Choose Folders\"
1291menu item.
1292
1293See also `mh-recursive-folders-flag'."
1294 :type '(choice (const :tag "Inbox" t)
1295 (const :tag "All" nil)
1296 (repeat :tag "Choose Folders" (string :tag "Folder")))
23347d76 1297 :group 'mh-folder
70a1d47e 1298 :package-version '(MH-E . "8.0"))
dda00b2c 1299
c90c4cf1 1300(defcustom-mh mh-ticked-messages-folders t
dda00b2c
BW
1301 "Folders searched for `mh-tick-seq'.
1302
1303Set this option to \"Inbox\" to search the \"+inbox\" folder or
1304\"All\" to search all of the top level folders. Otherwise, list
1305the folders that should be searched with the \"Choose Folders\"
1306menu item.
1307
1308See also `mh-recursive-folders-flag'."
1309 :type '(choice (const :tag "Inbox" t)
1310 (const :tag "All" nil)
1311 (repeat :tag "Choose Folders" (string :tag "Folder")))
23347d76 1312 :group 'mh-folder
70a1d47e 1313 :package-version '(MH-E . "8.0"))
dda00b2c 1314
c90c4cf1 1315(defcustom-mh mh-large-folder 200
dda00b2c
BW
1316 "The number of messages that indicates a large folder.
1317
1318If a folder is deemed to be large, that is the number of messages
1319in it exceed this value, then confirmation is needed when it is
1320visited. Even when `mh-show-threads-flag' is non-nil, the folder
1321is not automatically threaded, if it is large. If set to nil all
1322folders are treated as if they are small."
1323 :type '(choice (const :tag "No Limit") integer)
23347d76 1324 :group 'mh-folder
70a1d47e 1325 :package-version '(MH-E . "7.0"))
dda00b2c 1326
c90c4cf1 1327(defcustom-mh mh-recenter-summary-flag nil
dda00b2c
BW
1328 "*Non-nil means to recenter the summary window.
1329
1330If this option is turned on, recenter the summary window when the
1331show window is toggled off."
1332 :type 'boolean
23347d76 1333 :group 'mh-folder
70a1d47e 1334 :package-version '(MH-E . "7.0"))
dda00b2c 1335
c90c4cf1 1336(defcustom-mh mh-recursive-folders-flag nil
dda00b2c
BW
1337 "*Non-nil means that commands which operate on folders do so recursively."
1338 :type 'boolean
23347d76 1339 :group 'mh-folder
70a1d47e 1340 :package-version '(MH-E . "7.0"))
dda00b2c 1341
c90c4cf1 1342(defcustom-mh mh-sortm-args nil
dda00b2c
BW
1343 "*Additional arguments for \"sortm\"\\<mh-folder-mode-map>.
1344
1345This option is consulted when a prefix argument is used with
1346\\[mh-sort-folder]. Normally default arguments to \"sortm\" are
1347specified in the MH profile. This option may be used to provide
1348an alternate view. For example, \"'(\"-nolimit\" \"-textfield\"
1349\"subject\")\" is a useful setting."
1350 :type 'string
23347d76 1351 :group 'mh-folder
70a1d47e 1352 :package-version '(MH-E . "8.0"))
dda00b2c
BW
1353
1354;;; Folder Selection (:group 'mh-folder-selection)
1355
c90c4cf1 1356(defcustom-mh mh-default-folder-for-message-function nil
dda00b2c
BW
1357 "Function to select a default folder for refiling or \"Fcc:\".
1358
bc4c8031
BW
1359When this function is called, the current buffer contains the message
1360being refiled and point is at the start of the message. This function
1361should return the default folder as a string with a leading \"+\"
1362sign. It can also return nil so that the last folder name is used as
1363the default, or an empty string to suppress the default entirely."
dda00b2c 1364 :type 'function
23347d76 1365 :group 'mh-folder-selection
70a1d47e 1366 :package-version '(MH-E . "8.0"))
dda00b2c 1367
c90c4cf1 1368(defcustom-mh mh-default-folder-list nil
dda00b2c
BW
1369 "*List of addresses and folders.
1370
1371The folder name associated with the first address found in this
1372list is used as the default for `mh-refile-msg' and similar
1373functions. Each element in this list contains a \"Check Recipient\"
1374item. If this item is turned on, then the address is checked
1375against the recipient instead of the sender. This is useful for
1376mailing lists.
1377
1378See `mh-prompt-for-refile-folder' and `mh-folder-from-address'
1379for more information."
1380 :type '(repeat (list (regexp :tag "Address")
1381 (string :tag "Folder")
1382 (boolean :tag "Check Recipient")))
23347d76 1383 :group 'mh-folder-selection
70a1d47e 1384 :package-version '(MH-E . "7.2"))
dda00b2c 1385
c90c4cf1 1386(defcustom-mh mh-default-folder-must-exist-flag t
dda00b2c
BW
1387 "*Non-nil means guessed folder name must exist to be used.
1388
1389If the derived folder does not exist, and this option is on, then
1390the last folder name used is suggested. This is useful if you get
1391mail from various people for whom you have an alias, but file
1392them all in the same project folder.
1393
1394See `mh-prompt-for-refile-folder' and `mh-folder-from-address'
1395for more information."
1396 :type 'boolean
23347d76 1397 :group 'mh-folder-selection
70a1d47e 1398 :package-version '(MH-E . "7.2"))
dda00b2c 1399
c90c4cf1 1400(defcustom-mh mh-default-folder-prefix ""
dda00b2c
BW
1401 "*Prefix used for folder names generated from aliases.
1402The prefix is used to prevent clutter in your mail directory.
1403
1404See `mh-prompt-for-refile-folder' and `mh-folder-from-address'
1405for more information."
1406 :type 'string
23347d76 1407 :group 'mh-folder-selection
70a1d47e 1408 :package-version '(MH-E . "7.2"))
c26cf6c8 1409
dda00b2c
BW
1410;;; Identities (:group 'mh-identity)
1411
1412(eval-and-compile
1413 (unless (fboundp 'mh-identity-make-menu-no-autoload)
1414 (defun mh-identity-make-menu-no-autoload ()
1415 "Temporary definition.
1416Real definition will take effect when mh-identity is loaded."
1417 nil)))
1418
c90c4cf1 1419(defcustom-mh mh-identity-list nil
dda00b2c
BW
1420 "*List of identities.
1421
1422To customize this option, click on the \"INS\" button and enter a label
1423such as \"Home\" or \"Work\". Then click on the \"INS\" button with the
1424label \"Add at least one item below\". Then choose one of the items in
1425the \"Value Menu\".
1426
1427You can specify an alternate \"From:\" header field using the \"From
1428Field\" menu item. You must include a valid email address. A standard
1429format is \"First Last <login@@host.domain>\". If you use an initial
1430with a period, then you must quote your name as in '\"First I. Last\"
1431<login@@host.domain>'. People usually list the name of the company
1432where they work using the \"Organization Field\" menu item. Set any
1433arbitrary header field and value in the \"Other Field\" menu item.
1434Unless the header field is a standard one, precede the name of your
1435field's label with \"X-\", as in \"X-Fruit-of-the-Day:\". The value of
1436\"Attribution Verb\" overrides the setting of
1437`mh-extract-from-attribution-verb'. Set your signature with the
1438\"Signature\" menu item. You can specify the contents of
1439`mh-signature-file-name', a file, or a function. Specify a different
1440key to sign or encrypt messages with the \"GPG Key ID\" menu item.
1441
1442You can select the identities you have added via the menu called
1443\"Identity\" in the MH-Letter buffer. You can also use
1444\\[mh-insert-identity]. To clear the fields and signature added by the
1445identity, select the \"None\" identity.
1446
1447The \"Identity\" menu contains two other items to save you from having
1448to set the identity on every message. The menu item \"Set Default for
1449Session\" can be used to set the default identity to the current
1450identity until you exit Emacs. The menu item \"Save as Default\" sets
1451the option `mh-identity-default' to the current identity setting. You
1452can also customize the `mh-identity-default' option in the usual
1453fashion."
1454 :type '(repeat (list :tag ""
1455 (string :tag "Label")
1456 (repeat :tag "Add at least one item below"
1457 (choice
1458 (cons :tag "From Field"
1459 (const "From")
1460 (string :tag "Value"))
1461 (cons :tag "Organization Field"
1462 (const "Organization")
1463 (string :tag "Value"))
1464 (cons :tag "Other Field"
1465 (string :tag "Field")
1466 (string :tag "Value"))
1467 (cons :tag "Attribution Verb"
1468 (const ":attribution-verb")
1469 (string :tag "Value"))
1470 (cons :tag "Signature"
1471 (const :tag "Signature"
1472 ":signature")
1473 (choice
1474 (const :tag "mh-signature-file-name"
1475 nil)
1476 (file)
1477 (function)))
1478 (cons :tag "GPG Key ID"
1479 (const :tag "GPG Key ID"
1480 ":pgg-default-user-id")
1481 (string :tag "Value"))))))
1482 :set (lambda (symbol value)
1483 (set-default symbol value)
1484 (mh-identity-make-menu-no-autoload))
23347d76 1485 :group 'mh-identity
70a1d47e 1486 :package-version '(MH-E . "7.1"))
dda00b2c 1487
c90c4cf1 1488(defcustom-mh mh-auto-fields-list nil
dda00b2c
BW
1489 "List of recipients for which header lines are automatically inserted.
1490
1491This option can be used to set the identity depending on the
1492recipient. To customize this option, click on the \"INS\" button and
1493enter a regular expression for the recipient's address. Click on the
1494\"INS\" button with the \"Add at least one item below\" label. Then choose
1495one of the items in the \"Value Menu\".
1496
1497The \"Identity\" menu item is used to select an identity from those
1498configured in `mh-identity-list'. All of the information for that
1499identity will be added if the recipient matches. The \"Fcc Field\" menu
1500item is used to select a folder that is used in the \"Fcc:\" header.
1501When you send the message, MH will put a copy of your message in this
1502folder. The \"Mail-Followup-To Field\" menu item is used to insert an
1503\"Mail-Followup-To:\" header field with the recipients you provide. If
1504the recipient's mail user agent supports this header field (as nmh
1505does), then their replies will go to the addresses listed. This is
1506useful if their replies go both to the list and to you and you don't
1507have a mechanism to suppress duplicates. If you reply to someone not
1508on the list, you must either remove the \"Mail-Followup-To:\" field, or
1509ensure the recipient is also listed there so that he receives replies
1510to your reply. Other header fields may be added using the \"Other
1511Field\" menu item.
1512
1513These fields can only be added after the recipient is known. Once the
1514header contains one or more recipients, run the
1515\\[mh-insert-auto-fields] command or choose the \"Identity -> Insert
1516Auto Fields\" menu item to insert these fields manually. However, you
1517can just send the message and the fields will be added automatically.
1518You are given a chance to see these fields and to confirm them before
1519the message is actually sent. You can do away with this confirmation
1520by turning off the option `mh-auto-fields-prompt-flag'.
1521
1522You should avoid using the same header field in `mh-auto-fields-list'
1523and `mh-identity-list' definitions that may apply to the same message
1524as the result is undefined."
1525 :type `(repeat
1526 (list :tag ""
1527 (string :tag "Recipient")
1528 (repeat :tag "Add at least one item below"
1529 (choice
1530 (cons :tag "Identity"
1531 (const ":identity")
1532 ,(append
1533 '(radio)
1534 (mapcar
1535 (function (lambda (arg) `(const ,arg)))
1536 (mapcar 'car mh-identity-list))))
1537 (cons :tag "Fcc Field"
1538 (const "fcc")
1539 (string :tag "Value"))
1540 (cons :tag "Mail-Followup-To Field"
1541 (const "Mail-Followup-To")
1542 (string :tag "Value"))
1543 (cons :tag "Other Field"
1544 (string :tag "Field")
1545 (string :tag "Value"))))))
23347d76 1546 :group 'mh-identity
70a1d47e 1547 :package-version '(MH-E . "7.3"))
dda00b2c 1548
c90c4cf1 1549(defcustom-mh mh-auto-fields-prompt-flag t
dda00b2c
BW
1550 "*Non-nil means to prompt before sending if fields inserted.
1551See `mh-auto-fields-list'."
1552 :type 'boolean
23347d76 1553 :group 'mh-identity
70a1d47e 1554 :package-version '(MH-E . "8.0"))
dda00b2c 1555
c90c4cf1 1556(defcustom-mh mh-identity-default nil
dda00b2c
BW
1557 "Default identity to use when `mh-letter-mode' is called.
1558See `mh-identity-list'."
1559 :type (append
1560 '(radio)
1561 (cons '(const :tag "None" nil)
1562 (mapcar (function (lambda (arg) `(const ,arg)))
1563 (mapcar 'car mh-identity-list))))
23347d76 1564 :group 'mh-identity
70a1d47e 1565 :package-version '(MH-E . "7.1"))
dda00b2c 1566
c90c4cf1 1567(defcustom-mh mh-identity-handlers
dda00b2c
BW
1568 '(("From" . mh-identity-handler-top)
1569 (":default" . mh-identity-handler-bottom)
1570 (":attribution-verb" . mh-identity-handler-attribution-verb)
1571 (":signature" . mh-identity-handler-signature)
1572 (":pgg-default-user-id" . mh-identity-handler-gpg-identity))
1573 "Handler functions for fields in `mh-identity-list'.
1574
1575This option is used to change the way that fields, signatures,
1576and attributions in `mh-identity-list' are added. To customize
1577`mh-identity-handlers', replace the name of an existing handler
1578function associated with the field you want to change with the
1579name of a function you have written. You can also click on an
1580\"INS\" button and insert a field of your choice and the name of
1581the function you have written to handle it.
1582
1583The \"Field\" field can be any field that you've used in your
1584`mh-identity-list'. The special fields \":attribution-verb\",
1585\":signature\", or \":pgg-default-user-id\" are used for the
1586`mh-identity-list' choices \"Attribution Verb\", \"Signature\", and
1587\"GPG Key ID\" respectively.
1588
1589The handler associated with the \":default\" field is used when no
1590other field matches.
1591
1592The handler functions are passed two or three arguments: the
1593FIELD itself (for example, \"From\"), or one of the special
1594fields (for example, \":signature\"), and the ACTION 'remove or
1595'add. If the action is 'add, an additional argument
1596containing the VALUE for the field is given."
1597 :type '(repeat (cons (string :tag "Field") function))
23347d76 1598 :group 'mh-identity
70a1d47e 1599 :package-version '(MH-E . "8.0"))
dda00b2c
BW
1600
1601;;; Incorporating Your Mail (:group 'mh-inc)
1602
c90c4cf1 1603(defcustom-mh mh-inc-prog "inc"
dda00b2c
BW
1604 "*Program to incorporate new mail into a folder.
1605
1606This program generates a one-line summary for each of the new
1607messages. Unless it is an absolute pathname, the file is assumed
1608to be in the `mh-progs' directory. You may also link a file to
1609\"inc\" that uses a different format. You'll then need to modify
1610several scan line format variables appropriately."
1611 :type 'string
23347d76 1612 :group 'mh-inc
70a1d47e 1613 :package-version '(MH-E . "6.0"))
dda00b2c
BW
1614
1615(eval-and-compile
1616 (unless (fboundp 'mh-inc-spool-make-no-autoload)
1617 (defun mh-inc-spool-make-no-autoload ()
1618 "Temporary definition.
1619Real definition will take effect when mh-inc is loaded."
1620 nil)))
1621
c90c4cf1 1622(defcustom-mh mh-inc-spool-list nil
dda00b2c
BW
1623 "*Alternate spool files.
1624
1625You can use the `mh-inc-spool-list' variable to direct MH-E to
1626retrieve mail from arbitrary spool files other than your system
1627mailbox, file it in folders other than your \"+inbox\", and assign
1628key bindings to incorporate this mail.
1629
1630Suppose you are subscribed to the \"mh-e-devel\" mailing list and
1631you use \"procmail\" to filter this mail into \"~/mail/mh-e\" with
1632the following recipe in \".procmailrc\":
1633
1634 MAILDIR=$HOME/mail
1635 :0:
1636 * ^From mh-e-devel-admin@stop.mail-abuse.org
1637 mh-e
1638
1639In order to incorporate \"~/mail/mh-e\" into \"+mh-e\" with an
1640\"I m\" (mh-inc-spool-mh-e) command, customize this option, and click
1641on the \"INS\" button. Enter a \"Spool File\" of \"~/mail/mh-e\", a
1642\"Folder\" of \"mh-e\", and a \"Key Binding\" of \"m\".
1643
1644You can use \"xbuffy\" to automate the incorporation of this mail
dc4d94d5 1645using the Emacs 22 command \"emacsclient\" as follows:
dda00b2c
BW
1646
1647 box ~/mail/mh-e
1648 title mh-e
1649 origMode
1650 polltime 10
1651 headertime 0
dc4d94d5
BW
1652 command emacsclient --eval '(mh-inc-spool-mh-e)'
1653
1654In XEmacs, the command \"gnuclient\" is used in a similar
1655fashion."
dda00b2c
BW
1656 :type '(repeat (list (file :tag "Spool File")
1657 (string :tag "Folder")
1658 (character :tag "Key Binding")))
1659 :set (lambda (symbol value)
1660 (set-default symbol value)
1661 (mh-inc-spool-make-no-autoload))
23347d76 1662 :group 'mh-inc
70a1d47e 1663 :package-version '(MH-E . "7.3"))
dda00b2c
BW
1664
1665;;; Dealing with Junk Mail (:group 'mh-junk)
1666
1667(defvar mh-junk-choice nil
1668 "Chosen spam fighting program.")
1669
1670;; Available spam filter interfaces
1671(defvar mh-junk-function-alist
1672 '((spamassassin mh-spamassassin-blacklist mh-spamassassin-whitelist)
1673 (bogofilter mh-bogofilter-blacklist mh-bogofilter-whitelist)
1674 (spamprobe mh-spamprobe-blacklist mh-spamprobe-whitelist))
1675 "Available choices of spam programs to use.
1676
1677This is an alist. For each element there are functions that
1678blacklist a message as spam and whitelist a message incorrectly
1679classified as spam.")
1680
1681(defun mh-junk-choose (symbol value)
1682 "Choose spam program to use.
1683
1684The function is always called with SYMBOL bound to
1685`mh-junk-program' and VALUE bound to the new value of
1686`mh-junk-program'. The function sets the variable
1687`mh-junk-choice' in addition to `mh-junk-program'."
1688 (set symbol value) ;XXX shouldn't this be set-default?
1689 (setq mh-junk-choice
1690 (or value
1691 (loop for element in mh-junk-function-alist
1692 until (executable-find (symbol-name (car element)))
1693 finally return (car element)))))
1694
c90c4cf1 1695(defcustom-mh mh-junk-background nil
dda00b2c
BW
1696 "If on, spam programs are run in background.
1697
1698By default, the programs are run in the foreground, but this can
1699be slow when junking large numbers of messages. If you have
1700enough memory or don't junk that many messages at the same time,
1a9aa7df
BW
1701you might try turning on this option.
1702
1703Note that this option is used as the \"display\" argument in the
1704call to `call-process'. Therefore, turning on this option means
1705setting its value to \"0\". You can also set its value to t to
1706direct the programs' output to the \"*MH-E Log*\" buffer; this
1707may be useful for debugging."
dda00b2c
BW
1708 :type '(choice (const :tag "Off" nil)
1709 (const :tag "On" 0))
23347d76 1710 :group 'mh-junk
70a1d47e 1711 :package-version '(MH-E . "8.0"))
dda00b2c 1712
c90c4cf1 1713(defcustom-mh mh-junk-disposition nil
dda00b2c
BW
1714 "Disposition of junk mail."
1715 :type '(choice (const :tag "Delete Spam" nil)
1716 (string :tag "Spam Folder"))
23347d76 1717 :group 'mh-junk
70a1d47e 1718 :package-version '(MH-E . "8.0"))
dda00b2c 1719
c90c4cf1 1720(defcustom-mh mh-junk-program nil
dda00b2c
BW
1721 "Spam program that MH-E should use.
1722
1723The default setting of this option is \"Auto-detect\" which means
1724that MH-E will automatically choose one of SpamAssassin,
1725bogofilter, or SpamProbe in that order. If, for example, you have
1726both SpamAssassin and bogofilter installed and you want to use
1727bogofilter, then you can set this option to \"Bogofilter\"."
1728 :type '(choice (const :tag "Auto-detect" nil)
1729 (const :tag "SpamAssassin" spamassassin)
1730 (const :tag "Bogofilter" bogofilter)
1731 (const :tag "SpamProbe" spamprobe))
1732 :set 'mh-junk-choose
23347d76 1733 :group 'mh-junk
70a1d47e 1734 :package-version '(MH-E . "7.3"))
dda00b2c
BW
1735
1736;;; Editing a Draft (:group 'mh-letter)
1737
c90c4cf1 1738(defcustom-mh mh-compose-insertion (if (locate-library "mml") 'mml 'mh)
dda00b2c
BW
1739 "Type of tags used when composing MIME messages.
1740
1741In addition to MH-style directives, MH-E also supports MML (MIME
1742Meta Language) tags. (see Info node `(emacs-mime)Composing').
1743This option can be used to choose between them. By default, this
1744option is set to \"MML\" if it is supported since it provides a
1745lot more functionality. This option can also be set to \"MH\" if
1746MH-style directives are preferred."
1747 :type '(choice (const :tag "MML" mml)
1748 (const :tag "MH" mh))
23347d76 1749 :group 'mh-letter
70a1d47e 1750 :package-version '(MH-E . "7.0"))
dda00b2c 1751
c90c4cf1 1752(defcustom-mh mh-compose-skipped-header-fields
dda00b2c
BW
1753 '("From" "Organization" "References" "In-Reply-To"
1754 "X-Face" "Face" "X-Image-URL" "X-Mailer")
1755 "List of header fields to skip over when navigating in draft."
1756 :type '(repeat (string :tag "Field"))
23347d76 1757 :group 'mh-letter
70a1d47e 1758 :package-version '(MH-E . "7.4"))
dda00b2c 1759
c90c4cf1 1760(defcustom-mh mh-compose-space-does-completion-flag nil
dda00b2c
BW
1761 "*Non-nil means \\<mh-letter-mode-map>\\[mh-letter-complete-or-space] does completion in message header."
1762 :type 'boolean
23347d76 1763 :group 'mh-letter
70a1d47e 1764 :package-version '(MH-E . "7.4"))
dda00b2c 1765
c90c4cf1 1766(defcustom-mh mh-delete-yanked-msg-window-flag nil
dda00b2c
BW
1767 "*Non-nil means delete any window displaying the message.
1768
1769This deletes the window containing the original message after
1770yanking it with \\<mh-letter-mode-map>\\[mh-yank-cur-msg] to make
1771more room on your screen for your reply."
1772 :type 'boolean
23347d76 1773 :group 'mh-letter
70a1d47e 1774 :package-version '(MH-E . "7.0"))
dda00b2c 1775
c90c4cf1 1776(defcustom-mh mh-extract-from-attribution-verb "wrote:"
dda00b2c
BW
1777 "*Verb to use for attribution when a message is yanked by \\<mh-letter-mode-map>\\[mh-yank-cur-msg].
1778
1779The attribution consists of the sender's name and email address
1780followed by the content of this option. This option can be set to
1781\"wrote:\", \"a écrit:\", and \"schrieb:\". You can also use the
1782\"Custom String\" menu item to enter your own verb."
1783 :type '(choice (const "wrote:")
1784 (const "a écrit:")
1785 (const "schrieb:")
1786 (string :tag "Custom String"))
23347d76 1787 :group 'mh-letter
70a1d47e 1788 :package-version '(MH-E . "7.0"))
dda00b2c 1789
c90c4cf1 1790(defcustom-mh mh-ins-buf-prefix "> "
dda00b2c
BW
1791 "*String to put before each line of a yanked or inserted message.
1792
1793The prefix \"> \" is the default setting of this option. I
1794suggest that you not modify this option since it is used by many
1795mailers and news readers: messages are far easier to read if
1796several included messages have all been indented by the same
1797string.
1798
1799This prefix is not inserted if you use one of the supercite
1800flavors of `mh-yank-behavior' or you have added a
1801`mail-citation-hook'."
1802 :type 'string
23347d76 1803 :group 'mh-letter
70a1d47e 1804 :package-version '(MH-E . "6.0"))
dda00b2c 1805
c90c4cf1 1806(defcustom-mh mh-letter-complete-function 'ispell-complete-word
dda00b2c
BW
1807 "*Function to call when completing outside of address or folder fields.
1808
1809In the body of the message,
1810\\<mh-letter-mode-map>\\[mh-letter-complete] runs this function,
1811which is set to \"ispell-complete-word\" by default."
1812 :type '(choice function (const nil))
23347d76 1813 :group 'mh-letter
70a1d47e 1814 :package-version '(MH-E . "7.1"))
dda00b2c 1815
c90c4cf1 1816(defcustom-mh mh-letter-fill-column 72
dda00b2c
BW
1817 "*Fill column to use in MH Letter mode.
1818
1819By default, this option is 72 to allow others to quote your
1820message without line wrapping."
1821 :type 'integer
23347d76 1822 :group 'mh-letter
70a1d47e 1823 :package-version '(MH-E . "6.0"))
dda00b2c 1824
c90c4cf1 1825(defcustom-mh mh-mml-method-default (if mh-pgp-support-flag "pgpmime" "none")
dda00b2c
BW
1826 "Default method to use in security tags.
1827
1828This option is used to select between a variety of mail security
1829mechanisms. The default is \"PGP (MIME)\" if it is supported\;
1830otherwise, the default is \"None\". Other mechanisms include
1831vanilla \"PGP\" and \"S/MIME\".
1832
1833The `pgg' customization group may have some settings which may
1834interest you (see Info node `(pgg)').
1835
1836In particular, I turn on the option `pgg-encrypt-for-me' so that
1837all messages I encrypt are encrypted with my public key as well.
1838If you keep a copy of all of your outgoing mail with a \"Fcc:\"
1839header field, this setting is vital so that you can read the mail
1840you write!"
1841 :type '(choice (const :tag "PGP (MIME)" "pgpmime")
1842 (const :tag "PGP" "pgp")
1843 (const :tag "S/MIME" "smime")
1844 (const :tag "None" "none"))
23347d76 1845 :group 'mh-letter
70a1d47e 1846 :package-version '(MH-E . "8.0"))
dda00b2c 1847
c90c4cf1 1848(defcustom-mh mh-signature-file-name "~/.signature"
dda00b2c
BW
1849 "*Source of user's signature.
1850
1851By default, the text of your signature is taken from the file
1852\"~/.signature\". You can read from other sources by changing this
1853option. This file may contain a vCard in which case an attachment is
1854added with the vCard.
1855
1856This option may also be a symbol, in which case that function is
1857called. You may not want a signature separator to be added for you;
1858instead you may want to insert one yourself. Options that you may find
1859useful to do this include `mh-signature-separator' (when inserting a
1860signature separator) and `mh-signature-separator-regexp' (for finding
1861said separator). The function `mh-signature-separator-p', which
1862reports t if the buffer contains a separator, may be useful as well.
1863
1864The signature is inserted into your message with the command
1865\\<mh-letter-mode-map>\\[mh-insert-signature] or with the option
1866`mh-identity-list'."
1867 :type 'file
23347d76 1868 :group 'mh-letter
70a1d47e 1869 :package-version '(MH-E . "6.0"))
dda00b2c 1870
c90c4cf1 1871(defcustom-mh mh-signature-separator-flag t
dda00b2c
BW
1872 "*Non-nil means a signature separator should be inserted.
1873
1874It is not recommended that you change this option since various
1875mail user agents, including MH-E, use the separator to present
1876the signature differently, and to suppress the signature when
1877replying or yanking a letter into a draft."
1878 :type 'boolean
23347d76 1879 :group 'mh-letter
70a1d47e 1880 :package-version '(MH-E . "8.0"))
dda00b2c 1881
c90c4cf1 1882(defcustom-mh mh-x-face-file "~/.face"
dda00b2c
BW
1883 "*File containing face header field to insert in outgoing mail.
1884
1885If the file starts with either of the strings \"X-Face:\", \"Face:\"
1886or \"X-Image-URL:\" then the contents are added to the message header
1887verbatim. Otherwise it is assumed that the file contains the value of
1888the \"X-Face:\" header field.
1889
1890The \"X-Face:\" header field, which is a low-resolution, black and
1891white image, can be generated using the \"compface\" command (see URL
1892`ftp://ftp.cs.indiana.edu/pub/faces/compface/compface.tar.Z'). The
1893\"Online X-Face Converter\" is a useful resource for quick conversion
1894of images into \"X-Face:\" header fields (see URL
1895`http://www.dairiki.org/xface/').
1896
1897Use the \"make-face\" script to convert a JPEG image to the higher
1898resolution, color, \"Face:\" header field (see URL
1899`http://quimby.gnus.org/circus/face/make-face').
1900
1901The URL of any image can be used for the \"X-Image-URL:\" field and no
1902processing of the image is required.
1903
1904To prevent the setting of any of these header fields, either set
1905`mh-x-face-file' to nil, or simply ensure that the file defined by
1906this option doesn't exist."
1907 :type 'file
23347d76 1908 :group 'mh-letter
70a1d47e 1909 :package-version '(MH-E . "7.0"))
dda00b2c 1910
c90c4cf1 1911(defcustom-mh mh-yank-behavior 'attribution
dda00b2c
BW
1912 "*Controls which part of a message is yanked by \\<mh-letter-mode-map>\\[mh-yank-cur-msg].
1913
1914To include the entire message, including the entire header, use
1915\"Body and Header\". Use \"Body\" to yank just the body without
1916the header. To yank only the portion of the message following the
1917point, set this option to \"Below Point\".
1918
1919Choose \"Invoke supercite\" to pass the entire message and header
1920through supercite.
1921
1922If the \"Body With Attribution\" setting is used, then the
1923message minus the header is yanked and a simple attribution line
1924is added at the top using the value of the option
1925`mh-extract-from-attribution-verb'. This is the default.
1926
1927If the \"Invoke supercite\" or \"Body With Attribution\" settings
1928are used, the \"-noformat\" argument is passed to the \"repl\"
1929program to override a \"-filter\" or \"-format\" argument. These
1930settings also have \"Automatically\" variants that perform the
1931action automatically when you reply so that you don't need to use
1932\\[mh-yank-cur-msg] at all. Note that this automatic action is
1933only performed if the show buffer matches the message being
1934replied to. People who use the automatic variants tend to turn on
1935the option `mh-delete-yanked-msg-window-flag' as well so that the
1936show window is never displayed.
1937
1938If the show buffer has a region, the option `mh-yank-behavior' is
1939ignored unless its value is one of Attribution variants in which
1940case the attribution is added to the yanked region.
1941
1942If this option is set to one of the supercite flavors, the hook
1943`mail-citation-hook' is ignored and `mh-ins-buf-prefix' is not
1944inserted."
1945 :type '(choice (const :tag "Body and Header" t)
1946 (const :tag "Body" body)
1947 (const :tag "Below Point" nil)
1948 (const :tag "Invoke supercite" supercite)
1949 (const :tag "Invoke supercite, Automatically" autosupercite)
1950 (const :tag "Body With Attribution" attribution)
1951 (const :tag "Body With Attribution, Automatically"
1952 autoattrib))
23347d76 1953 :group 'mh-letter
70a1d47e 1954 :package-version '(MH-E . "8.0"))
dda00b2c
BW
1955
1956;;; Ranges (:group 'mh-ranges)
1957
c90c4cf1 1958(defcustom-mh mh-interpret-number-as-range-flag t
dda00b2c
BW
1959 "*Non-nil means interpret a number as a range.
1960
1961Since one of the most frequent ranges used is \"last:N\", MH-E
1962will interpret input such as \"200\" as \"last:200\" if this
1963option is on (which is the default). If you need to scan just the
1964message 200, then use the range \"200:200\"."
1965 :type 'boolean
23347d76 1966 :group 'mh-ranges
70a1d47e 1967 :package-version '(MH-E . "7.4"))
dda00b2c
BW
1968
1969;;; Scan Line Formats (:group 'mh-scan-line-formats)
1970
1971(eval-and-compile
1972 (unless (fboundp 'mh-adaptive-cmd-note-flag-check)
1973 (defun mh-adaptive-cmd-note-flag-check (symbol value)
1974 "Temporary definition.
1975Real definition, below, uses variables that aren't defined yet."
1976 (set-default symbol value))))
1977
c90c4cf1 1978(defcustom-mh mh-adaptive-cmd-note-flag t
dda00b2c
BW
1979 "*Non-nil means that the message number width is determined dynamically.
1980
1981If you've created your own format to handle long message numbers,
1982you'll be pleased to know you no longer need it since MH-E adapts its
1983internal format based upon the largest message number if this option
1984is on (the default). This option may only be turned on when
1985`mh-scan-format-file' is set to \"Use MH-E scan Format\".
1986
1987If you prefer fixed-width message numbers, turn off this option and
1988call `mh-set-cmd-note' with the width specified by your format file
1989\(see `mh-scan-format-file'). For example, the default width is 4, so
1990you would use \"(mh-set-cmd-note 4)\"."
1991 :type 'boolean
1992 :group 'mh-scan-line-formats
23347d76 1993 :set 'mh-adaptive-cmd-note-flag-check
70a1d47e 1994 :package-version '(MH-E . "7.0"))
dda00b2c
BW
1995
1996(defun mh-scan-format-file-check (symbol value)
cb5bf6ba 1997 "Check if desired setting is valid.
dda00b2c
BW
1998Throw an error if user tries to set `mh-scan-format-file' to
1999anything but t when `mh-adaptive-cmd-note-flag' is on. Otherwise,
2000set SYMBOL to VALUE."
2001 (if (and (not (eq value t))
fd61b9ab 2002 mh-adaptive-cmd-note-flag)
dda00b2c
BW
2003 (error "%s %s" "You must turn off `mh-adaptive-cmd-note-flag'"
2004 "unless you use \"Use MH-E scan Format\"")
2005 (set-default symbol value)))
2006
c90c4cf1 2007(defcustom-mh mh-scan-format-file t
dda00b2c
BW
2008 "Specifies the format file to pass to the scan program.
2009
2010The default setting for this option is \"Use MH-E scan Format\". This
2011means that the format string will be taken from the either
2012`mh-scan-format-mh' or `mh-scan-format-nmh' depending on whether MH or
efa47761 2013nmh (or GNU mailutils MH) is in use. This setting also enables you to
dda00b2c
BW
2014turn on the `mh-adaptive-cmd-note-flag' option.
2015
2016You can also set this option to \"Use Default scan Format\" to get the
2017same output as you would get if you ran \"scan\" from the shell. If
2018you have a format file that you want MH-E to use but not MH, you can
2019set this option to \"Specify a scan Format File\" and enter the name
2020of your format file.
2021
2022If you change the format of the scan lines you'll need to tell MH-E
2023how to parse the new format. As you will see, quite a lot of variables
2024are involved to do that. Use \"\\[apropos] RET mh-scan.*regexp\" to
2025obtain a list of these variables. You will also have to call
2026`mh-set-cmd-note' if your notations are not in column 4 (columns in
2027Emacs start with 0)."
2028 :type '(choice (const :tag "Use MH-E scan Format" t)
2029 (const :tag "Use Default scan Format" nil)
2030 (file :tag "Specify a scan Format File"))
2031 :group 'mh-scan-line-formats
23347d76 2032 :set 'mh-scan-format-file-check
70a1d47e 2033 :package-version '(MH-E . "6.0"))
dda00b2c
BW
2034
2035(defun mh-adaptive-cmd-note-flag-check (symbol value)
cb5bf6ba 2036 "Check if desired setting is valid.
dda00b2c
BW
2037Throw an error if user tries to turn on
2038`mh-adaptive-cmd-note-flag' when `mh-scan-format-file' isn't t.
2039Otherwise, set SYMBOL to VALUE."
2040 (if (and value
2041 (not (eq mh-scan-format-file t)))
2042 (error "%s %s" "Can't turn on unless `mh-scan-format-file'"
2043 "is set to \"Use MH-E scan Format\"")
2044 (set-default symbol value)))
2045
c90c4cf1 2046(defcustom-mh mh-scan-prog "scan"
dda00b2c
BW
2047 "*Program used to scan messages.
2048
2049The name of the program that generates a listing of one line per
2050message is held in this option. Unless this variable contains an
2051absolute pathname, it is assumed to be in the `mh-progs'
2052directory. You may link another program to `scan' (see
2053\"mh-profile(5)\") to produce a different type of listing."
2054 :type 'string
23347d76 2055 :group 'mh-scan-line-formats
70a1d47e 2056 :package-version '(MH-E . "6.0"))
dda00b2c
BW
2057(make-variable-buffer-local 'mh-scan-prog)
2058
dda00b2c
BW
2059;;; Searching (:group 'mh-search)
2060
c90c4cf1 2061(defcustom-mh mh-search-program nil
dda00b2c
BW
2062 "Search program that MH-E shall use.
2063
2064The default setting of this option is \"Auto-detect\" which means
2065that MH-E will automatically choose one of swish++, swish-e,
2066mairix, namazu, pick and grep in that order. If, for example, you
2067have both swish++ and mairix installed and you want to use
2068mairix, then you can set this option to \"mairix\".
2069
2070More information about setting up an indexing program to use with
2071MH-E can be found in the documentation of `mh-search'."
2072 :type '(choice (const :tag "Auto-detect" nil)
2073 (const :tag "swish++" swish++)
2074 (const :tag "swish-e" swish)
2075 (const :tag "mairix" mairix)
2076 (const :tag "namazu" namazu)
2077 (const :tag "pick" pick)
2078 (const :tag "grep" grep))
23347d76 2079 :group 'mh-search
70a1d47e 2080 :package-version '(MH-E . "8.0"))
dda00b2c
BW
2081
2082;;; Sending Mail (:group 'mh-sending-mail)
2083
c90c4cf1 2084(defcustom-mh mh-compose-forward-as-mime-flag t
dda00b2c
BW
2085 "*Non-nil means that messages are forwarded as attachments.
2086
2087By default, this option is on which means that the forwarded
2088messages are included as attachments. If you would prefer to
2089forward your messages verbatim (as text, inline), then turn off
2090this option. Forwarding messages verbatim works well for short,
2091textual messages, but your recipient won't be able to view any
2092non-textual attachments that were in the forwarded message. Be
2093aware that if you have \"forw: -mime\" in your MH profile, then
2094forwarded messages will always be included as attachments
2095regardless of the settings of this option."
2096 :type 'boolean
23347d76 2097 :group 'mh-sending-mail
70a1d47e 2098 :package-version '(MH-E . "8.0"))
dda00b2c 2099
c90c4cf1 2100(defcustom-mh mh-compose-letter-function nil
dda00b2c
BW
2101 "Invoked when starting a new draft.
2102
2103However, it is the last function called before you edit your
2104message. The consequence of this is that you can write a function
2105to write and send the message for you. This function is passed
2106three arguments: the contents of the TO, SUBJECT, and CC header
2107fields."
2108 :type '(choice (const nil) function)
23347d76 2109 :group 'mh-sending-mail
70a1d47e 2110 :package-version '(MH-E . "6.0"))
dda00b2c 2111
c90c4cf1 2112(defcustom-mh mh-compose-prompt-flag nil
dda00b2c
BW
2113 "*Non-nil means prompt for header fields when composing a new draft."
2114 :type 'boolean
23347d76 2115 :group 'mh-sending-mail
70a1d47e 2116 :package-version '(MH-E . "7.4"))
dda00b2c 2117
c90c4cf1 2118(defcustom-mh mh-forward-subject-format "%s: %s"
dda00b2c
BW
2119 "*Format string for forwarded message subject.
2120
2121This option is a string which includes two escapes (\"%s\"). The
2122first \"%s\" is replaced with the sender of the original message,
2123and the second one is replaced with the original \"Subject:\"."
2124 :type 'string
23347d76 2125 :group 'mh-sending-mail
70a1d47e 2126 :package-version '(MH-E . "6.0"))
dda00b2c 2127
c90c4cf1 2128(defcustom-mh mh-insert-x-mailer-flag t
dda00b2c
BW
2129 "*Non-nil means append an \"X-Mailer:\" header field to the header.
2130
2131This header field includes the version of MH-E and Emacs that you
2132are using. If you don't want to participate in our marketing, you
2133can turn this option off."
2134 :type 'boolean
23347d76 2135 :group 'mh-sending-mail
70a1d47e 2136 :package-version '(MH-E . "7.0"))
dda00b2c 2137
c90c4cf1 2138(defcustom-mh mh-redist-full-contents-flag nil
dda00b2c
BW
2139 "*Non-nil means the \"dist\" command needs entire letter for redistribution.
2140
2141This option must be turned on if \"dist\" requires the whole
2142letter for redistribution, which is the case if \"send\" is
2143compiled with the BERK option (which many people abhor). If you
2144find that MH will not allow you to redistribute a message that
2145has been redistributed before, turn off this option."
2146 :type 'boolean
23347d76 2147 :group 'mh-sending-mail
70a1d47e 2148 :package-version '(MH-E . "8.0"))
dda00b2c 2149
c90c4cf1 2150(defcustom-mh mh-reply-default-reply-to nil
dda00b2c
BW
2151 "*Sets the person or persons to whom a reply will be sent.
2152
2153This option is set to \"Prompt\" by default so that you are
2154prompted for the recipient of a reply. If you find that most of
2155the time that you specify \"cc\" when you reply to a message, set
2156this option to \"cc\". Other choices include \"from\", \"to\", or
2157\"all\". You can always edit the recipients in the draft."
2158 :type '(choice (const :tag "Prompt" nil)
2159 (const "from")
2160 (const "to")
2161 (const "cc")
2162 (const "all"))
23347d76 2163 :group 'mh-sending-mail
70a1d47e 2164 :package-version '(MH-E . "6.0"))
dda00b2c 2165
c90c4cf1 2166(defcustom-mh mh-reply-show-message-flag t
dda00b2c
BW
2167 "*Non-nil means the MH-Show buffer is displayed when replying.
2168
2169If you include the message automatically, you can hide the
2170MH-Show buffer by turning off this option.
2171
2172See also `mh-reply'."
2173 :type 'boolean
23347d76 2174 :group 'mh-sending-mail
70a1d47e 2175 :package-version '(MH-E . "7.0"))
dda00b2c
BW
2176
2177;;; Sequences (:group 'mh-sequences)
2178
2179;; If `mh-unpropagated-sequences' becomes a defcustom, add the following to
2180;; the docstring: "Additional sequences that should not to be preserved can be
2181;; specified by setting `mh-unpropagated-sequences' appropriately." XXX
2182
c90c4cf1 2183(defcustom-mh mh-refile-preserves-sequences-flag t
dda00b2c
BW
2184 "*Non-nil means that sequences are preserved when messages are refiled.
2185
2186If a message is in any sequence (except \"Previous-Sequence:\"
2187and \"cur\") when it is refiled, then it will still be in those
2188sequences in the destination folder. If this behavior is not
2189desired, then turn off this option."
2190 :type 'boolean
23347d76 2191 :group 'mh-sequences
70a1d47e 2192 :package-version '(MH-E . "7.4"))
dda00b2c 2193
c90c4cf1 2194(defcustom-mh mh-tick-seq 'tick
dda00b2c
BW
2195 "The name of the MH sequence for ticked messages.
2196
2197You can customize this option if you already use the \"tick\"
2198sequence for your own use. You can also disable all of the
2199ticking functions by choosing the \"Disable Ticking\" item but
2200there isn't much advantage to that."
2201 :type '(choice (const :tag "Disable Ticking" nil)
2202 symbol)
23347d76 2203 :group 'mh-sequences
70a1d47e 2204 :package-version '(MH-E . "7.3"))
dda00b2c 2205
c90c4cf1 2206(defcustom-mh mh-update-sequences-after-mh-show-flag t
dda00b2c
BW
2207 "*Non-nil means flush MH sequences to disk after message is shown\\<mh-folder-mode-map>.
2208
2209Three sequences are maintained internally by MH-E and pushed out
2210to MH when a message is shown. They include the sequence
2211specified by your \"Unseen-Sequence:\" profile entry, \"cur\",
2212and the sequence listed by the option `mh-tick-seq' which is
2213\"tick\" by default. If you do not like this behavior, turn off
2214this option. You can then update the state manually with the
2215\\[mh-execute-commands], \\[mh-quit], or \\[mh-update-sequences]
2216commands."
2217 :type 'boolean
23347d76 2218 :group 'mh-sequences
70a1d47e 2219 :package-version '(MH-E . "7.0"))
dda00b2c
BW
2220
2221;;; Reading Your Mail (:group 'mh-show)
2222
c90c4cf1 2223(defcustom-mh mh-bury-show-buffer-flag t
dda00b2c
BW
2224 "*Non-nil means show buffer is buried.
2225
2226One advantage of not burying the show buffer is that one can
2227delete the show buffer more easily in an electric buffer list
2228because of its proximity to its associated MH-Folder buffer. Try
2229running \\[electric-buffer-list] to see what I mean."
2230 :type 'boolean
23347d76 2231 :group 'mh-show
70a1d47e 2232 :package-version '(MH-E . "7.0"))
dda00b2c 2233
c90c4cf1 2234(defcustom-mh mh-clean-message-header-flag t
dda00b2c
BW
2235 "*Non-nil means remove extraneous header fields.
2236
2237See also `mh-invisible-header-fields-default' and
2238`mh-invisible-header-fields'."
2239 :type 'boolean
23347d76 2240 :group 'mh-show
70a1d47e 2241 :package-version '(MH-E . "7.0"))
dda00b2c 2242
c90c4cf1 2243(defcustom-mh mh-decode-mime-flag (not (not (locate-library "mm-decode")))
dda00b2c
BW
2244 "*Non-nil means attachments are handled\\<mh-folder-mode-map>.
2245
2246MH-E can handle attachments as well if the Gnus `mm-decode'
2247library is present. If so, this option will be on. Otherwise,
2248you'll see the MIME body parts rather than text or attachments.
2249There isn't much point in turning off this option; however, you
2250can inspect it if it appears that the body parts are not being
2251interpreted correctly or toggle it with the command
2252\\[mh-toggle-mh-decode-mime-flag] to view the raw message.
2253
2254This option also controls the display of quoted-printable
2255messages and other graphical widgets. See the options
2256`mh-graphical-smileys-flag' and `mh-graphical-emphasis-flag'."
2257 :type 'boolean
23347d76 2258 :group 'mh-show
70a1d47e 2259 :package-version '(MH-E . "7.0"))
dda00b2c 2260
c90c4cf1 2261(defcustom-mh mh-display-buttons-for-alternatives-flag nil
dda00b2c
BW
2262 "*Non-nil means display buttons for all alternative attachments.
2263
2264Sometimes, a mail program will produce multiple alternatives of
2265the attachment in increasing degree of faithfulness to the
2266original content. By default, only the preferred alternative is
2267displayed. If this option is on, then the preferred part is shown
2268inline and buttons are shown for each of the other alternatives."
2269 :type 'boolean
23347d76 2270 :group 'mh-show
70a1d47e 2271 :package-version '(MH-E . "7.4"))
dda00b2c 2272
c90c4cf1 2273(defcustom-mh mh-display-buttons-for-inline-parts-flag nil
dda00b2c
BW
2274 "*Non-nil means display buttons for all inline attachments\\<mh-folder-mode-map>.
2275
2276The sender can request that attachments should be viewed inline so
2277that they do not really appear like an attachment at all to the
2278reader. Most of the time, this is desirable, so by default MH-E
2279suppresses the buttons for inline attachments. On the other hand, you
2280may receive code or HTML which the sender has added to his message as
2281inline attachments so that you can read them in MH-E. In this case, it
2282is useful to see the buttons so that you know you don't have to cut
2283and paste the code into a file; you can simply save the attachment.
2284
2285If you want to make the buttons visible for inline attachments, you
2286can use the command \\[mh-toggle-mime-buttons] to toggle the
2287visibility of these buttons. You can turn on these buttons permanently
2288by turning on this option.
2289
2290MH-E cannot display all attachments inline however. It can display
2291text (including HTML) and images."
2292 :type 'boolean
23347d76 2293 :group 'mh-show
70a1d47e 2294 :package-version '(MH-E . "7.0"))
dda00b2c 2295
c90c4cf1 2296(defcustom-mh mh-do-not-confirm-flag nil
dda00b2c
BW
2297 "*Non-nil means non-reversible commands do not prompt for confirmation.
2298
2299Commands such as `mh-pack-folder' prompt to confirm whether to
2300process outstanding moves and deletes or not before continuing.
2301Turning on this option means that these actions will be
2302performed--which is usually desired but cannot be
2303retracted--without question."
2304 :type 'boolean
23347d76 2305 :group 'mh-show
70a1d47e 2306 :package-version '(MH-E . "7.0"))
dda00b2c 2307
c90c4cf1 2308(defcustom-mh mh-fetch-x-image-url nil
dda00b2c
BW
2309 "*Control fetching of \"X-Image-URL:\" header field image.
2310
2311Ths option controls the fetching of the \"X-Image-URL:\" header
2312field image with the following values:
2313
2314Ask Before Fetching
2315 You are prompted before the image is fetched. MH-E will
2316 remember your reply and will either use the already fetched
2317 image the next time the same URL is encountered or silently
2318 skip it if you didn't fetch it the first time. This is a
2319 good setting.
2320
2321Never Fetch
2322 Images are never fetched and only displayed if they are
2323 already present in the cache. This is the default.
2324
2325There isn't a value of \"Always Fetch\" for privacy and DOS (denial of
2326service) reasons. For example, fetching a URL can tip off a spammer
2327that you've read his email (which is why you shouldn't blindly answer
2328yes if you've set this option to \"Ask Before Fetching\"). Someone may
2329also flood your network and fill your disk drive by sending a torrent
2330of messages, each specifying a unique URL to a very large file.
2331
2332The cache of images is found in the directory \".mhe-x-image-cache\"
2333within your MH directory. You can add your own face to the \"From:\"
2334field too. See Info node `(mh-e)Picture'.
2335
2336This setting only has effect if the option `mh-show-use-xface-flag' is
2337turned on."
2338
2339 :type '(choice (const :tag "Ask Before Fetching" ask)
2340 (const :tag "Never Fetch" nil))
23347d76 2341 :group 'mh-show
70a1d47e 2342 :package-version '(MH-E . "7.3"))
dda00b2c 2343
c90c4cf1 2344(defcustom-mh mh-graphical-smileys-flag t
dda00b2c
BW
2345 "*Non-nil means graphical smileys are displayed.
2346
2347It is a long standing custom to inject body language using a
2348cornucopia of punctuation, also known as the \"smileys\". MH-E
2349can render these as graphical widgets if this option is turned
2350on, which it is by default. Smileys include patterns such as :-)
2351and ;-).
2352
2353This option is disabled if the option `mh-decode-mime-flag' is
2354turned off."
2355 :type 'boolean
23347d76 2356 :group 'mh-show
70a1d47e 2357 :package-version '(MH-E . "7.0"))
dda00b2c 2358
c90c4cf1 2359(defcustom-mh mh-graphical-emphasis-flag t
dda00b2c
BW
2360 "*Non-nil means graphical emphasis is displayed.
2361
2362A few typesetting features are indicated in ASCII text with
2363certain characters. If your terminal supports it, MH-E can render
2364these typesetting directives naturally if this option is turned
2365on, which it is by default. For example, _underline_ will be
2366underlined, *bold* will appear in bold, /italics/ will appear in
2367italics, and so on. See the option `gnus-emphasis-alist' for the
2368whole list.
2369
2370This option is disabled if the option `mh-decode-mime-flag' is
2371turned off."
2372 :type 'boolean
23347d76 2373 :group 'mh-show
70a1d47e 2374 :package-version '(MH-E . "7.0"))
dda00b2c 2375
c90c4cf1 2376(defcustom-mh mh-highlight-citation-style 'gnus
dda00b2c
BW
2377 "Style for highlighting citations.
2378
2379If the sender of the message has cited other messages in his
2380message, then MH-E will highlight these citations to emphasize
2381the sender's actual response. This option can be customized to
2382change the highlighting style. The \"Multicolor\" method uses a
2383different color for each indentation while the \"Monochrome\"
2384method highlights all citations in red. To disable highlighting
2385of citations entirely, choose \"None\"."
2386 :type '(choice (const :tag "Multicolor" gnus)
2387 (const :tag "Monochrome" font-lock)
2388 (const :tag "None" nil))
23347d76 2389 :group 'mh-show
70a1d47e 2390 :package-version '(MH-E . "8.0"))
dda00b2c 2391
7911d1c8 2392;; These entries have been intentionally excluded by the developers.
c50115f1
JH
2393;; "Comments:" ; RFC 2822 - show this one
2394;; "Fax:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2395;; "Mail-System-Version:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2396;; "Mailer:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
5cb66178 2397;; "Organization:" ;
c50115f1
JH
2398;; "Phone:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2399;; "Reply-By:" ; RFC 2156
2400;; "Reply-To:" ; RFC 2822
7911d1c8 2401;; "Sender:" ;
c50115f1 2402;; "User-Agent:" ; Similar to X-Mailer, so display it.
5cb66178 2403;; "X-Mailer:" ;
7911d1c8
BW
2404;; "X-Operator:" ; Similar to X-Mailer, so display it
2405
2406;; Keep fields alphabetized (set sort-fold-case to t first).
2407;; Mention source, if known.
dda00b2c 2408(defvar mh-invisible-header-fields-internal
c50115f1
JH
2409 '(
2410 "Abuse-Reports-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
7911d1c8
BW
2411 "Accept-Language:"
2412 "AcceptLanguage:"
4690fe3f 2413 "Accreditor:" ; Habeas
243256f8
JH
2414 "Also-Control:" ; H. Spencer: News Article Format and Transmission, June 1994
2415 "Alternate-recipient:" ; RFC 2156
2416 "Approved-By:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2417 "Approved:" ; RFC 1036
2418 "Article-Names:" ; H. Spencer: News Article Format and Transmission, June 1994
2419 "Article-Updates:" ; H. Spencer: News Article Format and Transmission, June 1994
2420 "Authentication-Results:"
2421 "Auto-forwarded:" ; RFC 2156
2422 "Autoforwarded:" ; RFC 2156
dda00b2c 2423 "Bestservhost:"
90404d5a 2424 "Bytes:"
243256f8 2425 "Cancel-Key:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2426 "Cancel-Lock:" ; NNTP posts
b6fd8984 2427 "Comment:" ; Shows up with DomainKeys
243256f8
JH
2428 "Content-" ; RFC 2045, 1123, 1766, 1864, 2045, 2110, 2156, 2183, 2912
2429 "Control:" ; RFC 1036
2430 "Conversion-With-Loss:" ; RFC 2156
2431 "Conversion:" ; RFC 2156
243256f8
JH
2432 "Delivered-To:" ; Egroups/yahoogroups mailing list manager
2433 "Delivery-Date:" ; RFC 2156
dda00b2c 2434 "Delivery:"
243256f8
JH
2435 "Discarded-X400-" ; RFC 2156
2436 "Disclose-Recipients:" ; RFC 2156
2437 "Disposition-Notification-Options:" ; RFC 2298
2438 "Disposition-Notification-To:" ; RFC 2298
2439 "Distribution:" ; RFC 1036
7911d1c8 2440 "DKIM-" ; http://antispam.yahoo.com/domainkeys
7911d1c8 2441 "DL-Expansion-History:" ; RFC 2156
243256f8 2442 "DomainKey-" ; http://antispam.yahoo.com/domainkeys
7911d1c8 2443 "DomainKey-Signature:"
243256f8 2444 "Encoding:" ; RFC 1505
dda00b2c 2445 "Envelope-to:"
243256f8
JH
2446 "Errors-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2447 "Expires:" ; RFC 1036
2448 "Expiry-Date:" ; RFC 2156
dda00b2c 2449 "Face:" ; Gnus Face header
243256f8
JH
2450 "Followup-To:" ; RFC 1036
2451 "For-Approval:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2452 "For-Comment:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2453 "For-Handdling:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c
BW
2454 "Forwarded:" ; MH
2455 "From " ; sendmail
243256f8
JH
2456 "Generate-Delivery-Report:" ; RFC 2156
2457 "Importance:" ; RFC 2156, 2421
2458 "In-Reply-To:" ; RFC 2822
2459 "Incomplete-Copy:" ; RFC 2156
2460 "Keywords:" ; RFC 2822
2461 "Language:" ; RFC 2156
2462 "Lines:" ; RFC 1036
2463 "List-" ; RFC 2369, 2919
2464 "Mail-Copies-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2465 "Mail-Followup-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2466 "Mail-from:" ; MH
7911d1c8 2467 "Mail-Reply-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
243256f8
JH
2468 "Mailing-List:" ; Egroups/yahoogroups mailing list manager
2469 "Message-Content:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2470 "Message-Id:" ; RFC 822
243256f8 2471 "Message-Type:" ; RFC 2156
dda00b2c 2472 "Mime-Version" ; RFC 2045
7911d1c8 2473 "Msgid:"
7911d1c8 2474 "NNTP-" ; News
243256f8 2475 "Obsoletes:" ; RFC 2156
dda00b2c 2476 "Old-Return-Path:"
243256f8
JH
2477 "OpenPGP:"
2478 "Original-Encoded-Information-Types:" ; RFC 2156
dda00b2c 2479 "Original-Lines:" ; mail to news
dda00b2c 2480 "Original-Newsgroups:" ; mail to news
7911d1c8 2481 "Original-NNTP-" ; mail to news
dda00b2c
BW
2482 "Original-Path:" ; mail to news
2483 "Original-Received:" ; mail to news
243256f8 2484 "Original-Recipt:" ; RFC 2298
dda00b2c
BW
2485 "Original-To:" ; mail to news
2486 "Original-X-" ; mail to news
243256f8
JH
2487 "Origination-Client:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2488 "Originator:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c
BW
2489 "P1-Content-Type:" ; X400
2490 "P1-Message-Id:" ; X400
2491 "P1-Recipient:" ; X400
243256f8 2492 "Path:" ; RFC 1036
243256f8
JH
2493 "Pics-Label:" ; W3C
2494 "Posted-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2495 "Precedence:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2496 "Prev-Resent" ; MH
243256f8
JH
2497 "Prevent-NonDelivery-Report:" ; RFC 2156
2498 "Priority:" ; RFC 2156
2499 "Read-Receipt-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2500 "Received-SPF:" ; Gmail
243256f8
JH
2501 "Received:" ; RFC 822
2502 "References:" ; RFC 2822
2503 "Registered-Mail-Reply-Requested-By:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2504 "Remailed-" ; MH
243256f8 2505 "Replaces:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2506 "Replied:" ; MH
243256f8 2507 "Resent-" ; RFC 2822
dda00b2c 2508 "Return-Path:" ; RFC 822
243256f8
JH
2509 "Return-Receipt-Requested:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2510 "Return-Receipt-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
4690fe3f 2511 "Seal-Send-Time:"
7911d1c8 2512 "See-Also:" ; H. Spencer: News Article Format and Transmission, June 1994
243256f8
JH
2513 "Sensitivity:" ; RFC 2156, 2421
2514 "Speach-Act:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2515 "Status:" ; sendmail
243256f8
JH
2516 "Supersedes:" ; H. Spencer: News Article Format and Transmission, June 1994
2517 "Telefax:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2518 "Thread-"
7911d1c8
BW
2519 "Thread-Index:"
2520 "Thread-Topic:"
243256f8
JH
2521 "Translated-By:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2522 "Translation-Of:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2523 "Ua-Content-Id:" ; X400
dda00b2c 2524 "Via:" ; MH
dda00b2c 2525 "X-Abuse-and-DMCA-"
7911d1c8 2526 "X-Abuse-Info:"
dda00b2c
BW
2527 "X-Accept-Language:" ; Netscape/Mozilla
2528 "X-Ack:"
243256f8 2529 "X-Admin:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2530 "X-Administrivia-To:"
7911d1c8 2531 "X-AMAZON" ; Amazon.com
dda00b2c 2532 "X-AntiAbuse:" ; cPanel
c50115f1 2533 "X-Antivirus-Scanner:"
7911d1c8 2534 "X-AOL-IP:" ; AOL WebMail
dda00b2c
BW
2535 "X-Apparently-From:" ; MS Outlook
2536 "X-Apparently-To:" ; Egroups/yahoogroups mailing list manager
c50115f1 2537 "X-Attribution:"
243256f8 2538 "X-AuditID:"
c50115f1 2539 "X-Authenticated-Info:" ; Verizon.net?
efd5b7df 2540 "X-Authenticated-Sender:" ; AT&T Message Center (webmail)
dda00b2c 2541 "X-Authentication-Warning:" ; sendmail
7911d1c8 2542 "X-Authority-Analysis:"
efd5b7df 2543 "X-Barracuda-" ; Barracuda spam scores
dda00b2c 2544 "X-Beenthere:" ; Mailman mailing list manager
243256f8 2545 "X-Bigfish:"
dda00b2c 2546 "X-Bogosity:" ; bogofilter
201a821a 2547 "X-Brightmail-Tracker:" ; Brightmail
243256f8 2548 "X-BrightmailFiltered:" ; Brightmail
efd5b7df 2549 "X-Bugzilla-" ; Bugzilla
90404d5a 2550 "X-Campaignid:"
c50115f1 2551 "X-Comment:" ; AT&T Mailennium
243256f8
JH
2552 "X-Complaints-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2553 "X-Confirm-Reading-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
7911d1c8 2554 "X-Content-Filtered-By:"
dda00b2c 2555 "X-ContentStamp:" ; NetZero
90404d5a 2556 "X-Country-Chain:" ; http://www.declude.com/x-note.htm
c50115f1
JH
2557 "X-Cr-Hashedpuzzle:"
2558 "X-Cr-Puzzleid:"
dda00b2c 2559 "X-Cron-Env:"
7911d1c8 2560 "X-DCC-Usenix-Metrics:"
90404d5a 2561 "X-Declude-" ; http://www.declude.com/x-note.htm
7911d1c8 2562 "X-Dedicated:"
dda00b2c 2563 "X-Delivered"
7911d1c8
BW
2564 "X-DH-Virus-"
2565 "X-DMCA"
2566 "X-Domain:"
2567 "X-Echelon-Distraction"
efd5b7df 2568 "X-EFL-Spamscore:" ; MIT alumni spam filtering
7911d1c8 2569 "X-eGroups-" ; Egroups/yahoogroups mailing list manager
5cb66178 2570 "X-EID:"
dda00b2c 2571 "X-ELNK-Trace:" ; Earthlink mailer
243256f8 2572 "X-Enigmail-Version:"
dda00b2c 2573 "X-Envelope-Date:" ; GNU mailutils
243256f8 2574 "X-Envelope-From:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2575 "X-Envelope-Sender:"
243256f8 2576 "X-Envelope-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
c50115f1 2577 "X-EviteMessageId:" ; evite.com
dda00b2c 2578 "X-Evolution:" ; Evolution mail client
243256f8
JH
2579 "X-ExtLoop"
2580 "X-Face:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
90404d5a 2581 "X-fmx-"
dda00b2c
BW
2582 "X-Folder:" ; Spam
2583 "X-From-Line"
2584 "X-Gmail-" ; Gmail
2585 "X-Gnus-Mail-Source:" ; gnus
243256f8 2586 "X-Google-" ; Google mail
7911d1c8 2587 "X-Google-Sender-Auth:"
dda00b2c 2588 "X-Greylist:" ; milter-greylist-1.2.1
243256f8 2589 "X-Habeas-SWE-" ; Spam
201a821a 2590 "X-Hashcash:" ; hashcash
7911d1c8
BW
2591 "X-HPL-"
2592 "X-HR-"
2593 "X-HTTP-UserAgent:"
2cefb8a7 2594 "X-Hz" ; Hertz
90404d5a 2595 "X-Identity:" ; http://www.declude.com/x-note.htm
243256f8 2596 "X-Image-URL:"
7911d1c8 2597 "X-IMAP:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2598 "X-Info:" ; NTMail
243256f8 2599 "X-IronPort-" ; IronPort AV
7911d1c8
BW
2600 "X-ISI-4-30-3-MailScanner:"
2601 "X-J2-"
dda00b2c 2602 "X-Juno-" ; Juno
7911d1c8 2603 "X-Key:"
243256f8 2604 "X-List-Host:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c
BW
2605 "X-List-Subscribe:" ; Unknown mailing list managers
2606 "X-List-Unsubscribe:" ; Unknown mailing list managers
2607 "X-Listprocessor-" ; ListProc(tm) by CREN
243256f8
JH
2608 "X-Listserver:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2609 "X-Loop:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
c50115f1 2610 "X-Lrde-Mailscanner:"
dda00b2c 2611 "X-Lumos-SenderID:" ; Roving ConstantContact
efd5b7df 2612 "X-Mail-from:" ; fastmail.fm
7911d1c8 2613 "X-MAIL-INFO:" ; NetZero
90404d5a 2614 "X-Mailer_"
dda00b2c 2615 "X-Mailing-List:" ; Unknown mailing list managers
efd5b7df 2616 "X-Mailman-Approved-At:" ; Mailman mailing list manager
dda00b2c 2617 "X-Mailman-Version:" ; Mailman mailing list manager
7911d1c8 2618 "X-MailScanner" ; ListProc(tm) by CREN
243256f8 2619 "X-Mailutils-Message-Id" ; GNU Mailutils
dda00b2c 2620 "X-Majordomo:" ; Majordomo mailing list manager
7911d1c8
BW
2621 "X-MB-Message-" ; AOL WebMail
2622 "X-MDaemon-Deliver-To:"
2623 "X-MDRemoteIP:"
dda00b2c 2624 "X-Message-Id"
7911d1c8 2625 "X-Message-Type:"
dda00b2c 2626 "X-MessageWall-Score:" ; Unknown mailing list manager, AUC TeX
7911d1c8
BW
2627 "X-MHE-Checksum:" ; Checksum added during index search
2628 "X-MIME-Autoconverted:" ; sendmail
2629 "X-MIMEOLE:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/sendmail
2630 "X-MIMETrack:"
dda00b2c
BW
2631 "X-Mms-" ; T-Mobile pictures
2632 "X-Mozilla-Status:" ; Netscape/Mozilla
7911d1c8 2633 "X-MS-" ; MS Outlook
dda00b2c 2634 "X-Msmail-" ; MS Outlook
7911d1c8 2635 "X-MSMail-Priority" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c
BW
2636 "X-NAI-Spam-" ; Network Associates Inc. SpamKiller
2637 "X-News:" ; News
243256f8
JH
2638 "X-Newsreader:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2639 "X-No-Archive:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c
BW
2640 "X-Notes-Item:" ; Lotus Notes Domino structured header
2641 "X-OperatingSystem:"
7911d1c8 2642 "X-ORBL:"
dda00b2c 2643 "X-Orcl-Content-Type:"
7911d1c8 2644 "X-Organization:"
243256f8 2645 "X-Original-Arrival-Type:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c
BW
2646 "X-Original-Complaints-To:"
2647 "X-Original-Date:" ; SourceForge mailing list manager
2648 "X-Original-To:"
2649 "X-Original-Trace:"
2650 "X-OriginalArrivalTime:" ; Hotmail
243256f8 2651 "X-Originating-Email:" ; Hotmail
dda00b2c 2652 "X-Originating-IP:" ; Hotmail
90404d5a 2653 "X-pair-"
7911d1c8
BW
2654 "X-PGP:"
2655 "X-PID:"
243256f8 2656 "X-PMG-"
7911d1c8 2657 "X-PMX-Version:"
dda00b2c
BW
2658 "X-Postfilter:"
2659 "X-Priority:" ; MS Outlook
2cefb8a7 2660 "X-Proofpoint-" ; Proofpoint mail filter
13384ea6 2661 "X-Provags-ID:"
7911d1c8 2662 "X-PSTN-"
dda00b2c 2663 "X-Qotd-" ; User added
243256f8 2664 "X-RCPT-TO:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c
BW
2665 "X-Received-Date:"
2666 "X-Received:"
243256f8 2667 "X-Report-Abuse-To:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2668 "X-Request-"
efd5b7df 2669 "X-Resolved-to:" ; fastmail.fm
dda00b2c 2670 "X-Return-Path-Hint:" ; Roving ConstantContact
2cefb8a7 2671 "X-RIM-" ; Research In Motion (i.e. BlackBerry)
7911d1c8 2672 "X-RM"
c50115f1 2673 "X-RocketYMMF:" ; Yahoo
efd5b7df
ED
2674 "X-Roving-" ; Roving ConstantContact
2675 "X-SA-Exim-" ; Exim SpamAssassin
7911d1c8 2676 "X-Sasl-enc:" ; Apple Mail
dda00b2c
BW
2677 "X-SBClass:" ; Spam
2678 "X-SBNote:" ; Spam
2679 "X-SBPass:" ; Spam
7911d1c8 2680 "X-SBRS:"
dda00b2c 2681 "X-SBRule:" ; Spam
f12d6a4a 2682 "X-Scanned-By:"
243256f8 2683 "X-Sender:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c
BW
2684 "X-Server-Date:"
2685 "X-Server-Uuid:"
7911d1c8 2686 "X-Service-Code:"
dda00b2c 2687 "X-Sieve:" ; Sieve filtering
7911d1c8 2688 "X-SMTP-"
dda00b2c
BW
2689 "X-Source"
2690 "X-Spam-" ; Spamassassin
2691 "X-SpamBouncer:" ; Spam
90404d5a 2692 "X-SPF-"
dda00b2c 2693 "X-Status"
7911d1c8 2694 "X-Submission-Address:"
dda00b2c 2695 "X-Submissions-To:"
7911d1c8 2696 "X-Sun-Charset:"
dda00b2c
BW
2697 "X-Telecom-Digest"
2698 "X-Trace:"
2699 "X-UID"
243256f8 2700 "X-UIDL:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
7911d1c8 2701 "X-Unity"
dda00b2c 2702 "X-UNTD-" ; NetZero
243256f8
JH
2703 "X-URI:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
2704 "X-URL:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2705 "X-USANET-" ; usa.net
90404d5a 2706 "X-Usenet-Provider"
dda00b2c 2707 "X-UserInfo1:"
24b2be09 2708 "X-Virus-" ;
dda00b2c 2709 "X-Vms-To:"
7911d1c8 2710 "X-VSMLoop:" ; NTMail
dda00b2c
BW
2711 "X-WebTV-Signature:"
2712 "X-Wss-Id:" ; Worldtalk gateways
243256f8 2713 "X-X-Sender:" ; http://people.dsv.su.se/~jpalme/ietf/mail-headers/
dda00b2c 2714 "X-Yahoo"
7911d1c8
BW
2715 "X-Yahoo-Newman-"
2716 "X-YMail-"
dda00b2c 2717 "X400-" ; X400
243256f8
JH
2718 "Xref:" ; RFC 1036
2719 )
dda00b2c
BW
2720 "List of default header fields that are not to be shown.
2721
2722Do not alter this variable directly. Instead, add entries from
2723here that you would like to be displayed in
2724`mh-invisible-header-fields-default' and add entries to hide in
2725`mh-invisible-header-fields'.")
2726
2727(eval-and-compile
2728 (unless (fboundp 'mh-invisible-headers)
2729 (defun mh-invisible-headers ()
2730 "Temporary definition.
2731Real definition, below, uses variables that aren't defined yet."
2732 nil)))
2733
2734(defvar mh-delay-invisible-header-generation-flag t
2735 "Non-nil means to delay the generation of invisible header fields.
2736Because the function `mh-invisible-headers' uses both
2737`mh-invisible-header-fields' and `mh-invisible-header-fields', it
2738cannot be run until both variables have been initialized.")
2739
c90c4cf1 2740(defcustom-mh mh-invisible-header-fields nil
dda00b2c
BW
2741 "*Additional header fields to hide.
2742
2743Header fields that you would like to hide that aren't listed in
2744`mh-invisible-header-fields-default' can be added to this option
2745with a couple of caveats. Regular expressions are not allowed.
2746Unique fields should have a \":\" suffix; otherwise, the element
2747can be used to render invisible an entire class of fields that
4690fe3f
BW
2748start with the same prefix.
2749
2750If you think a header field should be generally ignored, please
2751update SF #1916032 (see URL
2752`https://sourceforge.net/tracker/index.php?func=detail&aid=1916032&group_id=13357&atid=113357').
dda00b2c
BW
2753
2754See also `mh-clean-message-header-flag'."
2755
2756 :type '(repeat (string :tag "Header field"))
2757 :set (lambda (symbol value)
2758 (set-default symbol value)
2759 (mh-invisible-headers))
23347d76 2760 :group 'mh-show
70a1d47e 2761 :package-version '(MH-E . "7.1"))
dda00b2c 2762
c90c4cf1 2763(defcustom-mh mh-invisible-header-fields-default nil
dda00b2c
BW
2764 "*List of hidden header fields.
2765
2766The header fields listed in this option are hidden, although you
2767can check off any field that you would like to see.
2768
2769Header fields that you would like to hide that aren't listed can
2770be added to the option `mh-invisible-header-fields'.
2771
4690fe3f
BW
2772See also `mh-clean-message-header-flag'.
2773
2774If you think a header field should be added to this list, please
2775update SF #1916032 (see URL
2776`https://sourceforge.net/tracker/index.php?func=detail&aid=1916032&group_id=13357&atid=113357')."
dda00b2c
BW
2777 :type `(set ,@(mapcar (lambda (x) `(const ,x))
2778 mh-invisible-header-fields-internal))
2779 :set (lambda (symbol value)
2780 (set-default symbol value)
2781 (mh-invisible-headers))
23347d76 2782 :group 'mh-show
70a1d47e 2783 :package-version '(MH-E . "8.0"))
dda00b2c
BW
2784
2785(defvar mh-invisible-header-fields-compiled nil
2786 "*Regexp matching lines in a message header that are not to be shown.
2787Do not alter this variable directly. Instead, customize
2788`mh-invisible-header-fields-default' checking for fields normally
2789hidden that you wish to display, and add extra entries to hide in
2790`mh-invisible-header-fields'.")
2791
2792(defun mh-invisible-headers ()
2793 "Make or remake the variable `mh-invisible-header-fields-compiled'.
2794Done using `mh-invisible-header-fields-internal' as input, from
2795which entries from `mh-invisible-header-fields-default' are
2796removed and entries from `mh-invisible-header-fields' are added."
2797 (let ((fields mh-invisible-header-fields-internal))
2798 (when mh-invisible-header-fields-default
2799 ;; Remove entries from `mh-invisible-header-fields-default'
2800 (setq fields
2801 (loop for x in fields
2802 unless (member x mh-invisible-header-fields-default)
2803 collect x)))
2804 (when (and (boundp 'mh-invisible-header-fields)
2805 mh-invisible-header-fields)
2806 (dolist (x mh-invisible-header-fields)
2807 (unless (member x fields) (setq fields (cons x fields)))))
2808 (if fields
2809 (setq mh-invisible-header-fields-compiled
2810 (concat
2811 "^"
2812 ;; workaround for insufficient default
2813 (let ((max-specpdl-size 1000))
2814 (regexp-opt fields t))))
2815 (setq mh-invisible-header-fields-compiled nil))))
2816
2817;; Compile invisible header fields.
2818(mh-invisible-headers)
2819
c90c4cf1 2820(defcustom-mh mh-lpr-command-format "lpr -J '%s'"
dda00b2c
BW
2821 "*Command used to print\\<mh-folder-mode-map>.
2822
2823This option contains the Unix command line which performs the
2824actual printing for the \\[mh-print-msg] command. The string can
2825contain one escape, \"%s\", which is replaced by the name of the
2826folder and the message number and is useful for print job names.
2827I use \"mpage -h'%s' -b Letter -H1of -mlrtb -P\" which produces a
2828nice header and adds a bit of margin so the text fits within my
2829printer's margins.
2830
2831This options is not used by the commands \\[mh-ps-print-msg] or
2832\\[mh-ps-print-msg-file]."
2833 :type 'string
23347d76 2834 :group 'mh-show
70a1d47e 2835 :package-version '(MH-E . "6.0"))
dda00b2c 2836
c90c4cf1 2837(defcustom-mh mh-max-inline-image-height nil
dda00b2c
BW
2838 "*Maximum inline image height if \"Content-Disposition:\" is not present.
2839
2840Some older mail programs do not insert this needed plumbing to
2841tell MH-E whether to display the attachments inline or not. If
2842this is the case, MH-E will display these images inline if they
2843are smaller than the window. However, you might want to allow
2844larger images to be displayed inline. To do this, you can change
2845the options `mh-max-inline-image-width' and
2846`mh-max-inline-image-height' from their default value of zero to
2847a large number. The size of your screen is a good choice for
2848these numbers."
2849 :type '(choice (const nil) integer)
23347d76 2850 :group 'mh-show
70a1d47e 2851 :package-version '(MH-E . "7.0"))
dda00b2c 2852
c90c4cf1 2853(defcustom-mh mh-max-inline-image-width nil
dda00b2c
BW
2854 "*Maximum inline image width if \"Content-Disposition:\" is not present.
2855
2856Some older mail programs do not insert this needed plumbing to
2857tell MH-E whether to display the attachments inline or not. If
2858this is the case, MH-E will display these images inline if they
2859are smaller than the window. However, you might want to allow
2860larger images to be displayed inline. To do this, you can change
2861the options `mh-max-inline-image-width' and
2862`mh-max-inline-image-height' from their default value of zero to
2863a large number. The size of your screen is a good choice for
2864these numbers."
2865 :type '(choice (const nil) integer)
23347d76 2866 :group 'mh-show
70a1d47e 2867 :package-version '(MH-E . "7.0"))
dda00b2c 2868
c90c4cf1 2869(defcustom-mh mh-mhl-format-file nil
dda00b2c
BW
2870 "*Specifies the format file to pass to the \"mhl\" program.
2871
2872Normally MH-E takes care of displaying messages itself (rather than
2873calling an MH program to do the work). If you'd rather have \"mhl\"
2874display the message (within MH-E), change this option from its default
2875value of \"Use Default mhl Format (Printing Only)\".
2876
2877You can set this option to \"Use Default mhl Format\" to get the same
2878output as you would get if you ran \"mhl\" from the shell.
2879
2880If you have a format file that you want MH-E to use, you can set this
2881option to \"Specify an mhl Format File\" and enter the name of your
2882format file. Your format file should specify a non-zero value for
2883\"overflowoffset\" to allow MH-E to parse the header. Note that
2884\"mhl\" is always used for printing and forwarding; in this case, the
2885value of this option is consulted if you have specified a format
2886file."
2887 :type '(choice (const :tag "Use Default mhl Format (Printing Only)" nil)
2888 (const :tag "Use Default mhl Format" t)
2889 (file :tag "Specify an mhl Format File"))
23347d76 2890 :group 'mh-show
70a1d47e 2891 :package-version '(MH-E . "8.0"))
dda00b2c 2892
c90c4cf1 2893(defcustom-mh mh-mime-save-parts-default-directory t
dda00b2c
BW
2894 "Default directory to use for \\<mh-folder-mode-map>\\[mh-mime-save-parts].
2895
2896The default value for this option is \"Prompt Always\" so that
2897you are always prompted for the directory in which to save the
2898attachments. However, if you usually use the same directory
2899within a session, then you can set this option to \"Prompt the
2900First Time\" to avoid the prompt each time. you can make this
2901directory permanent by choosing \"Directory\" and entering the
2902directory's name."
2903 :type '(choice (const :tag "Prompt the First Time" nil)
2904 (const :tag "Prompt Always" t)
2905 directory)
23347d76 2906 :group 'mh-show
70a1d47e 2907 :package-version '(MH-E . "7.0"))
dda00b2c 2908
c90c4cf1 2909(defcustom-mh mh-print-background-flag nil
dda00b2c
BW
2910 "*Non-nil means messages should be printed in the background\\<mh-folder-mode-map>.
2911
2912Normally messages are printed in the foreground. If this is slow on
2913your system, you may elect to turn off this option to print in the
2914background.
2915
2916WARNING: If you do this, do not delete the message until it is printed
2917or else the output may be truncated.
2918
2919This option is not used by the commands \\[mh-ps-print-msg] or
2920\\[mh-ps-print-msg-file]."
2921 :type 'boolean
23347d76 2922 :group 'mh-show
70a1d47e 2923 :package-version '(MH-E . "7.0"))
dda00b2c 2924
c90c4cf1 2925(defcustom-mh mh-show-maximum-size 0
dda00b2c
BW
2926 "*Maximum size of message (in bytes) to display automatically.
2927
2928This option provides an opportunity to skip over large messages
2929which may be slow to load. The default value of 0 means that all
2930message are shown regardless of size."
2931 :type 'integer
23347d76 2932 :group 'mh-show
70a1d47e 2933 :package-version '(MH-E . "8.0"))
dda00b2c 2934
c90c4cf1 2935(defcustom-mh mh-show-use-xface-flag (>= emacs-major-version 21)
dda00b2c
BW
2936 "*Non-nil means display face images in MH-show buffers.
2937
2938MH-E can display the content of \"Face:\", \"X-Face:\", and
2939\"X-Image-URL:\" header fields. If any of these fields occur in the
2940header of your message, the sender's face will appear in the \"From:\"
2941header field. If more than one of these fields appear, then the first
2942field found in the order \"Face:\", \"X-Face:\", and \"X-Image-URL:\"
2943will be used.
2944
2945The option `mh-show-use-xface-flag' is used to turn this feature on
2946and off. This feature will be turned on by default if your system
2947supports it.
2948
2949The first header field used, if present, is the Gnus-specific
2950\"Face:\" field. The \"Face:\" field appeared in GNU Emacs 21 and
2951XEmacs. For more information, see URL
2952`http://quimby.gnus.org/circus/face/'. Next is the traditional
2953\"X-Face:\" header field. The display of this field requires the
2954\"uncompface\" program (see URL
2955`ftp://ftp.cs.indiana.edu/pub/faces/compface/compface.tar.z'). Recent
2956versions of XEmacs have internal support for \"X-Face:\" images. If
2957your version of XEmacs does not, then you'll need both \"uncompface\"
2958and the x-face package (see URL `ftp://ftp.jpl.org/pub/elisp/').
2959
2960Finally, MH-E will display images referenced by the \"X-Image-URL:\"
2961header field if neither the \"Face:\" nor the \"X-Face:\" fields are
2962present. The display of the images requires \"wget\" (see URL
2963`http://www.gnu.org/software/wget/wget.html'), \"fetch\", or \"curl\"
2964to fetch the image and the \"convert\" program from the ImageMagick
2965suite (see URL `http://www.imagemagick.org/'). Of the three header
2966fields this is the most efficient in terms of network usage since the
2967image doesn't need to be transmitted with every single mail.
2968
2969The option `mh-fetch-x-image-url' controls the fetching of the
2970\"X-Image-URL:\" header field image."
2971 :type 'boolean
23347d76 2972 :group 'mh-show
70a1d47e 2973 :package-version '(MH-E . "7.0"))
dda00b2c 2974
c90c4cf1 2975(defcustom-mh mh-store-default-directory nil
dda00b2c
BW
2976 "*Default directory for \\<mh-folder-mode-map>\\[mh-store-msg].
2977
2978If you would like to change the initial default directory,
2979customize this option, change the value from \"Current\" to
2980\"Directory\", and then enter the name of the directory for storing
2981the content of these messages."
2982 :type '(choice (const :tag "Current" nil)
2983 directory)
23347d76 2984 :group 'mh-show
70a1d47e 2985 :package-version '(MH-E . "6.0"))
dda00b2c 2986
c90c4cf1 2987(defcustom-mh mh-summary-height nil
dda00b2c
BW
2988 "*Number of lines in MH-Folder buffer (including the mode line).
2989
2990The default value of this option is \"Automatic\" which means
2991that the MH-Folder buffer will maintain the same proportional
2992size if the frame is resized. If you'd prefer a fixed height,
2993then choose the \"Fixed Size\" option and enter the number of
2994lines you'd like to see."
2995 :type '(choice (const :tag "Automatic" nil)
2996 (integer :tag "Fixed Size"))
23347d76 2997 :group 'mh-show
70a1d47e 2998 :package-version '(MH-E . "7.4"))
dda00b2c
BW
2999
3000;;; The Speedbar (:group 'mh-speedbar)
3001
c90c4cf1 3002(defcustom-mh mh-speed-update-interval 60
dda00b2c
BW
3003 "Time between speedbar updates in seconds.
3004Set to 0 to disable automatic update."
3005 :type 'integer
23347d76 3006 :group 'mh-speedbar
70a1d47e 3007 :package-version '(MH-E . "8.0"))
dda00b2c
BW
3008
3009;;; Threading (:group 'mh-thread)
3010
c90c4cf1 3011(defcustom-mh mh-show-threads-flag nil
dda00b2c
BW
3012 "*Non-nil means new folders start in threaded mode.
3013
3014Threading large number of messages can be time consuming so this
3015option is turned off by default. If you turn this option on, then
3016threading will be done only if the number of messages being
3017threaded is less than `mh-large-folder'."
3018 :type 'boolean
23347d76 3019 :group 'mh-thread
70a1d47e 3020 :package-version '(MH-E . "7.1"))
c26cf6c8 3021
dda00b2c
BW
3022;;; The Tool Bar (:group 'mh-tool-bar)
3023
3024;; mh-tool-bar-folder-buttons and mh-tool-bar-letter-buttons defined
3025;; dynamically in mh-tool-bar.el.
3026
c90c4cf1 3027(defcustom-mh mh-tool-bar-search-function 'mh-search
dda00b2c
BW
3028 "*Function called by the tool bar search button.
3029
3030By default, this is set to `mh-search'. You can also choose
3031\"Other Function\" from the \"Value Menu\" and enter a function
3032of your own choosing."
3033 :type '(choice (const mh-search)
3034 (function :tag "Other Function"))
23347d76 3035 :group 'mh-tool-bar
70a1d47e 3036 :package-version '(MH-E . "7.0"))
dda00b2c
BW
3037
3038;; XEmacs has a couple of extra customizations...
3039(mh-do-in-xemacs
c90c4cf1 3040 (defcustom-mh mh-xemacs-use-tool-bar-flag mh-xemacs-has-tool-bar-flag
dda00b2c
BW
3041 "*If non-nil, use tool bar.
3042
3043This option controls whether to show the MH-E icons at all. By
3044default, this option is turned on if the window system supports
3045tool bars. If your system doesn't support tool bars, then you
3046won't be able to turn on this option."
3047 :type 'boolean
3048 :group 'mh-tool-bar
3049 :set (lambda (symbol value)
3050 (if (and (eq value t)
3051 (not mh-xemacs-has-tool-bar-flag))
3052 (error "Tool bar not supported"))
23347d76 3053 (set-default symbol value))
70a1d47e 3054 :package-version '(MH-E . "7.3"))
dda00b2c 3055
c90c4cf1 3056 (defcustom-mh mh-xemacs-tool-bar-position nil
dda00b2c
BW
3057 "*Tool bar location.
3058
3059This option controls the placement of the tool bar along the four
3060edges of the frame. You can choose from one of \"Same As Default
3061Tool Bar\", \"Top\", \"Bottom\", \"Left\", or \"Right\". If this
3062variable is set to anything other than \"Same As Default Tool
3063Bar\" and the default tool bar is in a different location, then
3064two tool bars will be displayed: the MH-E tool bar and the
3065default tool bar."
3066 :type '(radio (const :tag "Same As Default Tool Bar" :value nil)
3067 (const :tag "Top" :value top)
3068 (const :tag "Bottom" :value bottom)
3069 (const :tag "Left" :value left)
3070 (const :tag "Right" :value right))
23347d76 3071 :group 'mh-tool-bar
70a1d47e 3072 :package-version '(MH-E . "7.3")))
942fc772 3073
c26cf6c8
RS
3074\f
3075
dda00b2c
BW
3076;;; Hooks (:group 'mh-hooks + group where hook described)
3077
c90c4cf1 3078(defcustom-mh mh-after-commands-processed-hook nil
e5d763d8 3079 "Hook run by \\<mh-folder-mode-map>\\[mh-execute-commands] after performing outstanding refile and delete requests.
dda00b2c
BW
3080
3081Variables that are useful in this hook include
3082`mh-folders-changed', which lists which folders were affected by
3083deletes and refiles. This list will always include the current
3084folder, which is also available in `mh-current-folder'."
3085 :type 'hook
3086 :group 'mh-hooks
23347d76 3087 :group 'mh-folder
70a1d47e 3088 :package-version '(MH-E . "8.0"))
dda00b2c 3089
c90c4cf1 3090(defcustom-mh mh-alias-reloaded-hook nil
dda00b2c
BW
3091 "Hook run by `mh-alias-reload' after loading aliases."
3092 :type 'hook
3093 :group 'mh-hooks
23347d76 3094 :group 'mh-alias
70a1d47e 3095 :package-version '(MH-E . "8.0"))
dda00b2c 3096
aad5673d 3097(defcustom-mh mh-annotate-msg-hook nil
7106a02d
BW
3098 "Hook run whenever a message is sent and after the scan lines and message are annotated.
3099Hook functions can access the current folder name with
3100`mh-current-folder' and obtain the message numbers of the
3101annotated messages with `mh-annotate-list'."
aad5673d
SG
3102 :type 'hook
3103 :group 'mh-hooks
3104 :group 'mh-sending-mail
3105 :package-version '(MH-E . "8.1"))
3106
c90c4cf1 3107(defcustom-mh mh-before-commands-processed-hook nil
e5d763d8 3108 "Hook run by \\<mh-folder-mode-map>\\[mh-execute-commands] before performing outstanding refile and delete requests.
dda00b2c
BW
3109
3110Variables that are useful in this hook include `mh-delete-list'
3111and `mh-refile-list' which can be used to see which changes will
3112be made to the current folder, `mh-current-folder'."
3113 :type 'hook
3114 :group 'mh-hooks
23347d76 3115 :group 'mh-folder
70a1d47e 3116 :package-version '(MH-E . "8.0"))
dda00b2c 3117
c90c4cf1 3118(defcustom-mh mh-before-quit-hook nil
dda00b2c
BW
3119 "Hook run by \\<mh-folder-mode-map>\\[mh-quit] before quitting MH-E.
3120
3121This hook is called before the quit occurs, so you might use it
3122to perform any MH-E operations; you could perform some query and
3123abort the quit or call `mh-execute-commands', for example.
3124
3125See also `mh-quit-hook'."
3126 :type 'hook
3127 :group 'mh-hooks
23347d76 3128 :group 'mh-folder
70a1d47e 3129 :package-version '(MH-E . "6.0"))
dda00b2c 3130
c90c4cf1 3131(defcustom-mh mh-before-send-letter-hook nil
dda00b2c
BW
3132 "Hook run at the beginning of the \\<mh-letter-mode-map>\\[mh-send-letter] command.
3133
3134For example, if you want to check your spelling in your message
3135before sending, add the `ispell-message' function."
3136 :type 'hook
3137 :options '(ispell-message)
3138 :group 'mh-hooks
23347d76 3139 :group 'mh-letter
70a1d47e 3140 :package-version '(MH-E . "6.0"))
dda00b2c 3141
c90c4cf1 3142(defcustom-mh mh-delete-msg-hook nil
dda00b2c
BW
3143 "Hook run by \\<mh-letter-mode-map>\\[mh-delete-msg] after marking each message for deletion.
3144
3145For example, a past maintainer of MH-E used this once when he
3146kept statistics on his mail usage."
3147 :type 'hook
3148 :group 'mh-hooks
23347d76 3149 :group 'mh-show
70a1d47e 3150 :package-version '(MH-E . "6.0"))
dda00b2c 3151
c90c4cf1 3152(defcustom-mh mh-find-path-hook nil
dda00b2c
BW
3153 "Hook run by `mh-find-path' after reading the user's MH profile.
3154
3155This hook can be used the change the value of the variables that
3156`mh-find-path' sets if you need to run with different values
3157between MH and MH-E."
3158 :type 'hook
3159 :group 'mh-hooks
23347d76 3160 :group 'mh-e
70a1d47e 3161 :package-version '(MH-E . "7.0"))
dda00b2c 3162
c90c4cf1 3163(defcustom-mh mh-folder-mode-hook nil
dda00b2c
BW
3164 "Hook run by `mh-folder-mode' when visiting a new folder."
3165 :type 'hook
3166 :group 'mh-hooks
23347d76 3167 :group 'mh-folder
70a1d47e 3168 :package-version '(MH-E . "6.0"))
dda00b2c 3169
c90c4cf1 3170(defcustom-mh mh-forward-hook nil
dda00b2c
BW
3171 "Hook run by `mh-forward' on a forwarded letter."
3172 :type 'hook
3173 :group 'mh-hooks
23347d76 3174 :group 'mh-sending-mail
70a1d47e 3175 :package-version '(MH-E . "8.0"))
dda00b2c 3176
c90c4cf1 3177(defcustom-mh mh-inc-folder-hook nil
dda00b2c
BW
3178 "Hook run by \\<mh-folder-mode-map>\\[mh-inc-folder] after incorporating mail into a folder."
3179 :type 'hook
3180 :group 'mh-hooks
23347d76 3181 :group 'mh-inc
70a1d47e 3182 :package-version '(MH-E . "6.0"))
dda00b2c 3183
c90c4cf1 3184(defcustom-mh mh-insert-signature-hook nil
dda00b2c
BW
3185 "Hook run by \\<mh-letter-mode-map>\\[mh-insert-signature] after signature has been inserted.
3186
3187Hook functions may access the actual name of the file or the
3188function used to insert the signature with
3189`mh-signature-file-name'."
3190 :type 'hook
3191 :group 'mh-hooks
23347d76 3192 :group 'mh-letter
70a1d47e 3193 :package-version '(MH-E . "8.0"))
dda00b2c 3194
c90c4cf1 3195(defcustom-mh mh-kill-folder-suppress-prompt-hooks '(mh-search-p)
dda00b2c
BW
3196 "Abnormal hook run at the beginning of \\<mh-folder-mode-map>\\[mh-kill-folder].
3197
3198The hook functions are called with no arguments and should return
3199a non-nil value to suppress the normal prompt when you remove a
3200folder. This is useful for folders that are easily regenerated.
3201
3202The default value of `mh-search-p' suppresses the prompt on
3203folders generated by searching.
3204
3205WARNING: Use this hook with care. If there is a bug in your hook
3206which returns t on \"+inbox\" and you hit \\[mh-kill-folder] by
3207accident in the \"+inbox\" folder, you will not be happy."
3208 :type 'hook
3209 :group 'mh-hooks
23347d76 3210 :group 'mh-folder
70a1d47e 3211 :package-version '(MH-E . "7.4"))
dda00b2c 3212
c90c4cf1 3213(defcustom-mh mh-letter-mode-hook nil
dda00b2c
BW
3214 "Hook run by `mh-letter-mode' on a new letter.
3215
3216This hook allows you to do some processing before editing a
3217letter. For example, you may wish to modify the header after
3218\"repl\" has done its work, or you may have a complicated
3219\"components\" file and need to tell MH-E where the cursor should
3220go."
3221 :type 'hook
3222 :group 'mh-hooks
23347d76 3223 :group 'mh-sending-mail
70a1d47e 3224 :package-version '(MH-E . "6.0"))
dda00b2c 3225
c90c4cf1 3226(defcustom-mh mh-mh-to-mime-hook nil
dda00b2c
BW
3227 "Hook run on the formatted letter by \\<mh-letter-mode-map>\\[mh-mh-to-mime]."
3228 :type 'hook
3229 :group 'mh-hooks
23347d76 3230 :group 'mh-letter
70a1d47e 3231 :package-version '(MH-E . "8.0"))
dda00b2c 3232
c90c4cf1 3233(defcustom-mh mh-search-mode-hook nil
dda00b2c
BW
3234 "Hook run upon entry to `mh-search-mode'\\<mh-folder-mode-map>.
3235
3236If you find that you do the same thing over and over when editing
3237the search template, you may wish to bind some shortcuts to keys.
3238This can be done with this hook which is called when
3239\\[mh-search] is run on a new pattern."
3240 :type 'hook
3241 :group 'mh-hooks
23347d76 3242 :group 'mh-search
70a1d47e 3243 :package-version '(MH-E . "8.0"))
dda00b2c 3244
c90c4cf1 3245(defcustom-mh mh-quit-hook nil
dda00b2c
BW
3246 "Hook run by \\<mh-folder-mode-map>\\[mh-quit] after quitting MH-E.
3247
3248This hook is not run in an MH-E context, so you might use it to
3249modify the window setup.
3250
3251See also `mh-before-quit-hook'."
3252 :type 'hook
3253 :group 'mh-hooks
23347d76 3254 :group 'mh-folder
70a1d47e 3255 :package-version '(MH-E . "6.0"))
dda00b2c 3256
c90c4cf1 3257(defcustom-mh mh-refile-msg-hook nil
dda00b2c
BW
3258 "Hook run by \\<mh-folder-mode-map>\\[mh-refile-msg] after marking each message for refiling."
3259 :type 'hook
3260 :group 'mh-hooks
23347d76 3261 :group 'mh-folder
70a1d47e 3262 :package-version '(MH-E . "6.0"))
dda00b2c 3263
c90c4cf1 3264(defcustom-mh mh-show-hook nil
dda00b2c
BW
3265 "Hook run after \\<mh-folder-mode-map>\\[mh-show] shows a message.
3266
3267It is the last thing called after messages are displayed. It's
3268used to affect the behavior of MH-E in general or when
3269`mh-show-mode-hook' is too early. See `mh-show-mode-hook'."
3270 :type 'hook
3271 :group 'mh-hooks
23347d76 3272 :group 'mh-show
70a1d47e 3273 :package-version '(MH-E . "6.0"))
dda00b2c 3274
c90c4cf1 3275(defcustom-mh mh-show-mode-hook nil
dda00b2c
BW
3276 "Hook run upon entry to `mh-show-mode'.
3277
3278This hook is called early on in the process of the message
3279display. It is usually used to perform some action on the
3280message's content. See `mh-show-hook'."
3281 :type 'hook
3282 :group 'mh-hooks
23347d76 3283 :group 'mh-show
70a1d47e 3284 :package-version '(MH-E . "6.0"))
dda00b2c 3285
c90c4cf1 3286(defcustom-mh mh-unseen-updated-hook nil
dda00b2c
BW
3287 "Hook run after the unseen sequence has been updated.
3288
3289The variable `mh-seen-list' can be used by this hook to obtain
3290the list of messages which were removed from the unseen
3291sequence."
3292 :type 'hook
3293 :group 'mh-hooks
23347d76 3294 :group 'mh-sequences
70a1d47e 3295 :package-version '(MH-E . "6.0"))
a1b4049d 3296
bdcfe844 3297\f
a1b4049d 3298
dda00b2c
BW
3299;;; Faces (:group 'mh-faces + group where faces described)
3300
3301(if (boundp 'facemenu-unlisted-faces)
3302 (add-to-list 'facemenu-unlisted-faces "^mh-"))
3303
367c48ef
BW
3304;; To add a new face:
3305;; 1. Add entry to variable mh-face-data.
c90c4cf1 3306;; 2. Create face using defface-mh (which removes min-color spec and
367c48ef
BW
3307;; :package-version keyword where these are not supported),
3308;; accessing face data with function mh-face-data.
3309;; 3. Add inherit argument to function mh-face-data if applicable.
6d21875b
BW
3310(defvar mh-face-data
3311 '((mh-folder-followup
3312 ((((class color) (background light))
3313 (:foreground "blue3"))
3314 (((class color) (background dark))
3315 (:foreground "LightGoldenRod"))
3316 (t
3317 (:bold t))))
3318 (mh-folder-msg-number
3319 ((((class color) (min-colors 64) (background light))
3320 (:foreground "snow4"))
3321 (((class color) (min-colors 64) (background dark))
3322 (:foreground "snow3"))
b95d0a24
BW
3323 (((class color) (background light))
3324 (:foreground "purple"))
3325 (((class color) (background dark))
6d21875b
BW
3326 (:foreground "cyan"))))
3327 (mh-folder-refiled
3328 ((((class color) (min-colors 64) (background light))
3329 (:foreground "DarkGoldenrod"))
3330 (((class color) (min-colors 64) (background dark))
3331 (:foreground "LightGoldenrod"))
3332 (((class color))
3333 (:foreground "yellow" :weight light))
3334 (((class grayscale) (background light))
3335 (:foreground "Gray90" :bold t :italic t))
3336 (((class grayscale) (background dark))
3337 (:foreground "DimGray" :bold t :italic t))
3338 (t
3339 (:bold t :italic t))))
3340 (mh-folder-subject
3341 ((((class color) (background light))
3342 (:foreground "blue4"))
3343 (((class color) (background dark))
3344 (:foreground "yellow"))
3345 (t
3346 (:bold t))))
3347 (mh-folder-tick
b95d0a24 3348 ((((class color) (background light))
6d21875b 3349 (:background "#dddf7e"))
b95d0a24 3350 (((class color) (background dark))
6d21875b
BW
3351 (:background "#dddf7e"))
3352 (t
3353 (:underline t))))
3354 (mh-folder-to
3355 ((((class color) (min-colors 64) (background light))
3356 (:foreground "RosyBrown"))
3357 (((class color) (min-colors 64) (background dark))
3358 (:foreground "LightSalmon"))
3359 (((class color))
3360 (:foreground "green"))
3361 (((class grayscale) (background light))
3362 (:foreground "DimGray" :italic t))
3363 (((class grayscale) (background dark))
3364 (:foreground "LightGray" :italic t))
3365 (t
3366 (:italic t))))
3367 (mh-letter-header-field
3368 ((((class color) (background light))
3369 (:background "gray90"))
3370 (((class color) (background dark))
3371 (:background "gray10"))
3372 (t
3373 (:bold t))))
3374 (mh-search-folder
3375 ((((class color) (background light))
3376 (:foreground "dark green" :bold t))
3377 (((class color) (background dark))
3378 (:foreground "indian red" :bold t))
3379 (t
3380 (:bold t))))
3381 (mh-show-cc
3382 ((((class color) (min-colors 64) (background light))
3383 (:foreground "DarkGoldenrod"))
3384 (((class color) (min-colors 64) (background dark))
3385 (:foreground "LightGoldenrod"))
3386 (((class color))
3387 (:foreground "yellow" :weight light))
3388 (((class grayscale) (background light))
3389 (:foreground "Gray90" :bold t :italic t))
3390 (((class grayscale) (background dark))
3391 (:foreground "DimGray" :bold t :italic t))
3392 (t
3393 (:bold t :italic t))))
3394 (mh-show-date
3395 ((((class color) (min-colors 64) (background light))
3396 (:foreground "ForestGreen"))
3397 (((class color) (min-colors 64) (background dark))
3398 (:foreground "PaleGreen"))
3399 (((class color))
3400 (:foreground "green"))
3401 (((class grayscale) (background light))
3402 (:foreground "Gray90" :bold t))
3403 (((class grayscale) (background dark))
3404 (:foreground "DimGray" :bold t))
3405 (t
3406 (:bold t :underline t))))
3407 (mh-show-from
3408 ((((class color) (background light))
3409 (:foreground "red3"))
3410 (((class color) (background dark))
3411 (:foreground "cyan"))
3412 (t
3413 (:bold t))))
3414 (mh-show-header
3415 ((((class color) (min-colors 64) (background light))
3416 (:foreground "RosyBrown"))
3417 (((class color) (min-colors 64) (background dark))
3418 (:foreground "LightSalmon"))
3419 (((class color))
3420 (:foreground "green"))
3421 (((class grayscale) (background light))
3422 (:foreground "DimGray" :italic t))
3423 (((class grayscale) (background dark))
3424 (:foreground "LightGray" :italic t))
3425 (t
3426 (:italic t))))
3427 (mh-show-pgg-bad ((t (:bold t :foreground "DeepPink1"))))
3428 (mh-show-pgg-good ((t (:bold t :foreground "LimeGreen"))))
3429 (mh-show-pgg-unknown ((t (:bold t :foreground "DarkGoldenrod2"))))
3430 (mh-show-signature ((t (:italic t))))
3431 (mh-show-to
3432 ((((class color) (background light))
3433 (:foreground "SaddleBrown"))
3434 (((class color) (background dark))
3435 (:foreground "burlywood"))
3436 (((class grayscale) (background light))
3437 (:foreground "DimGray" :underline t))
3438 (((class grayscale) (background dark))
3439 (:foreground "LightGray" :underline t))
3440 (t (:underline t))))
3441 (mh-speedbar-folder
3442 ((((class color) (background light))
3443 (:foreground "blue4"))
3444 (((class color) (background dark))
3445 (:foreground "light blue"))))
3446 (mh-speedbar-selected-folder
3447 ((((class color) (background light))
3448 (:foreground "red1" :underline t))
3449 (((class color) (background dark))
3450 (:foreground "red1" :underline t))
3451 (t
367c48ef
BW
3452 (:underline t)))))
3453 "MH-E face data.
3454Used by function `mh-face-data' which returns spec that is
c90c4cf1 3455consumed by `defface-mh'.")
367c48ef
BW
3456
3457(require 'cus-face)
3458
3459(defvar mh-inherit-face-flag (assq :inherit custom-face-attributes)
3460 "Non-nil means that the `defface' :inherit keyword is available.
3461The :inherit keyword is available on all supported versions of
3462GNU Emacs and XEmacs from at least 21.5.23 on.")
3463
a3269bc4 3464(defvar mh-min-colors-defined-flag (and (not (featurep 'xemacs))
367c48ef
BW
3465 (>= emacs-major-version 22))
3466 "Non-nil means `defface' supports min-colors display requirement.")
6d21875b
BW
3467
3468(defun mh-face-data (face &optional inherit)
3469 "Return spec for FACE.
367c48ef 3470See `defface' for the spec definition.
6d21875b 3471
367c48ef
BW
3472If INHERIT is non-nil and `defface' supports the :inherit
3473keyword, return INHERIT literally; otherwise, return spec for
3474FACE from the variable `mh-face-data'. This isn't a perfect
3475implementation. In the case that the :inherit keyword is not
3476supported, any additional attributes in the inherit parameter are
3477not added to the returned spec.
3478
3479Furthermore, when `mh-min-colors-defined-flag' is nil, this
3480function finds display entries with \"min-colors\" requirements
3481and either removes the \"min-colors\" requirement or strips the
3482display entirely if the display does not support the number of
3483specified colors."
3484 (let ((spec
3485 (if (and inherit mh-inherit-face-flag)
3486 inherit
3487 (or (cadr (assq face mh-face-data))
3488 (error "Could not find %s in mh-face-data" face)))))
3489
3490 (if mh-min-colors-defined-flag
3491 spec
3492 (let ((cells (mh-display-color-cells))
3493 new-spec)
3494 ;; Remove entries with min-colors, or delete them if we have
3495 ;; fewer colors than they specify.
3496 (loop for entry in (reverse spec) do
3497 (let ((requirement (if (eq (car entry) t)
3498 nil
3499 (assq 'min-colors (car entry)))))
3500 (if requirement
3501 (when (>= cells (nth 1 requirement))
3502 (setq new-spec (cons (cons (delq requirement (car entry))
3503 (cdr entry))
3504 new-spec)))
3505 (setq new-spec (cons entry new-spec)))))
3506 new-spec))))
6d21875b 3507
c90c4cf1 3508(defface-mh mh-folder-address
6d21875b 3509 (mh-face-data 'mh-folder-subject '((t (:inherit mh-folder-subject))))
dda00b2c
BW
3510 "Recipient face."
3511 :group 'mh-faces
23347d76 3512 :group 'mh-folder
70a1d47e 3513 :package-version '(MH-E . "8.0"))
dda00b2c 3514
c90c4cf1 3515(defface-mh mh-folder-body
6d21875b
BW
3516 (mh-face-data 'mh-folder-msg-number
3517 '((((class color))
3518 (:inherit mh-folder-msg-number))
3519 (t
3520 (:inherit mh-folder-msg-number :italic t))))
dda00b2c
BW
3521 "Body text face."
3522 :group 'mh-faces
23347d76 3523 :group 'mh-folder
70a1d47e 3524 :package-version '(MH-E . "8.0"))
dda00b2c 3525
c90c4cf1 3526(defface-mh mh-folder-cur-msg-number
6d21875b
BW
3527 (mh-face-data 'mh-folder-msg-number
3528 '((t (:inherit mh-folder-msg-number :bold t))))
dda00b2c
BW
3529 "Current message number face."
3530 :group 'mh-faces
23347d76 3531 :group 'mh-folder
70a1d47e 3532 :package-version '(MH-E . "8.0"))
dda00b2c 3533
c90c4cf1 3534(defface-mh mh-folder-date
6d21875b 3535 (mh-face-data 'mh-folder-msg-number '((t (:inherit mh-folder-msg-number))))
dda00b2c
BW
3536 "Date face."
3537 :group 'mh-faces
23347d76 3538 :group 'mh-folder
70a1d47e 3539 :package-version '(MH-E . "8.0"))
dda00b2c 3540
c90c4cf1 3541(defface-mh mh-folder-deleted
6d21875b 3542 (mh-face-data 'mh-folder-msg-number '((t (:inherit mh-folder-msg-number))))
dda00b2c
BW
3543 "Deleted message face."
3544 :group 'mh-faces
23347d76 3545 :group 'mh-folder
70a1d47e 3546 :package-version '(MH-E . "8.0"))
dda00b2c 3547
c90c4cf1 3548(defface-mh mh-folder-followup (mh-face-data 'mh-folder-followup)
dda00b2c
BW
3549 "\"Re:\" face."
3550 :group 'mh-faces
23347d76 3551 :group 'mh-folder
70a1d47e 3552 :package-version '(MH-E . "8.0"))
dda00b2c 3553
c90c4cf1 3554(defface-mh mh-folder-msg-number (mh-face-data 'mh-folder-msg-number)
dda00b2c
BW
3555 "Message number face."
3556 :group 'mh-faces
23347d76 3557 :group 'mh-folder
70a1d47e 3558 :package-version '(MH-E . "8.0"))
dda00b2c 3559
c90c4cf1 3560(defface-mh mh-folder-refiled (mh-face-data 'mh-folder-refiled)
dda00b2c
BW
3561 "Refiled message face."
3562 :group 'mh-faces
23347d76 3563 :group 'mh-folder
70a1d47e 3564 :package-version '(MH-E . "8.0"))
dda00b2c 3565
c90c4cf1 3566(defface-mh mh-folder-sent-to-me-hint
6d21875b 3567 (mh-face-data 'mh-folder-msg-number '((t (:inherit mh-folder-date))))
dda00b2c
BW
3568 "Fontification hint face in messages sent directly to us.
3569The detection of messages sent to us is governed by the scan
3570format `mh-scan-format-nmh' and the regular expression
3571`mh-scan-sent-to-me-sender-regexp'."
3572 :group 'mh-faces
23347d76 3573 :group 'mh-folder
70a1d47e 3574 :package-version '(MH-E . "8.0"))
dda00b2c 3575
c90c4cf1 3576(defface-mh mh-folder-sent-to-me-sender
6d21875b 3577 (mh-face-data 'mh-folder-followup '((t (:inherit mh-folder-followup))))
dda00b2c
BW
3578 "Sender face in messages sent directly to us.
3579The detection of messages sent to us is governed by the scan
3580format `mh-scan-format-nmh' and the regular expression
3581`mh-scan-sent-to-me-sender-regexp'."
3582 :group 'mh-faces
23347d76 3583 :group 'mh-folder
70a1d47e 3584 :package-version '(MH-E . "8.0"))
dda00b2c 3585
c90c4cf1 3586(defface-mh mh-folder-subject (mh-face-data 'mh-folder-subject)
dda00b2c
BW
3587 "Subject face."
3588 :group 'mh-faces
23347d76 3589 :group 'mh-folder
70a1d47e 3590 :package-version '(MH-E . "8.0"))
dda00b2c 3591
c90c4cf1 3592(defface-mh mh-folder-tick (mh-face-data 'mh-folder-tick)
dda00b2c
BW
3593 "Ticked message face."
3594 :group 'mh-faces
23347d76 3595 :group 'mh-folder
70a1d47e 3596 :package-version '(MH-E . "8.0"))
dda00b2c 3597
c90c4cf1 3598(defface-mh mh-folder-to (mh-face-data 'mh-folder-to)
dda00b2c
BW
3599 "\"To:\" face."
3600 :group 'mh-faces
23347d76 3601 :group 'mh-folder
70a1d47e 3602 :package-version '(MH-E . "8.0"))
dda00b2c 3603
c90c4cf1 3604(defface-mh mh-letter-header-field (mh-face-data 'mh-letter-header-field)
dda00b2c
BW
3605 "Editable header field value face in draft buffers."
3606 :group 'mh-faces
23347d76 3607 :group 'mh-letter
70a1d47e 3608 :package-version '(MH-E . "8.0"))
dda00b2c 3609
c90c4cf1 3610(defface-mh mh-search-folder (mh-face-data 'mh-search-folder)
6d21875b
BW
3611 "Folder heading face in MH-Folder buffers created by searches."
3612 :group 'mh-faces
23347d76 3613 :group 'mh-search
70a1d47e 3614 :package-version '(MH-E . "8.0"))
6d21875b 3615
c90c4cf1 3616(defface-mh mh-show-cc (mh-face-data 'mh-show-cc)
dda00b2c
BW
3617 "Face used to highlight \"cc:\" header fields."
3618 :group 'mh-faces
23347d76 3619 :group 'mh-show
70a1d47e 3620 :package-version '(MH-E . "8.0"))
dda00b2c 3621
c90c4cf1 3622(defface-mh mh-show-date (mh-face-data 'mh-show-date)
dda00b2c
BW
3623 "Face used to highlight \"Date:\" header fields."
3624 :group 'mh-faces
23347d76 3625 :group 'mh-show
70a1d47e 3626 :package-version '(MH-E . "8.0"))
dda00b2c 3627
c90c4cf1 3628(defface-mh mh-show-from (mh-face-data 'mh-show-from)
dda00b2c
BW
3629 "Face used to highlight \"From:\" header fields."
3630 :group 'mh-faces
23347d76 3631 :group 'mh-show
70a1d47e 3632 :package-version '(MH-E . "8.0"))
dda00b2c 3633
c90c4cf1 3634(defface-mh mh-show-header (mh-face-data 'mh-show-header)
dda00b2c
BW
3635 "Face used to deemphasize less interesting header fields."
3636 :group 'mh-faces
23347d76 3637 :group 'mh-show
70a1d47e 3638 :package-version '(MH-E . "8.0"))
dda00b2c 3639
c90c4cf1 3640(defface-mh mh-show-pgg-bad (mh-face-data 'mh-show-pgg-bad)
dda00b2c
BW
3641 "Bad PGG signature face."
3642 :group 'mh-faces
23347d76 3643 :group 'mh-show
70a1d47e 3644 :package-version '(MH-E . "8.0"))
dda00b2c 3645
c90c4cf1 3646(defface-mh mh-show-pgg-good (mh-face-data 'mh-show-pgg-good)
dda00b2c
BW
3647 "Good PGG signature face."
3648 :group 'mh-faces
23347d76 3649 :group 'mh-show
70a1d47e 3650 :package-version '(MH-E . "8.0"))
dda00b2c 3651
c90c4cf1 3652(defface-mh mh-show-pgg-unknown (mh-face-data 'mh-show-pgg-unknown)
dda00b2c
BW
3653 "Unknown or untrusted PGG signature face."
3654 :group 'mh-faces
23347d76 3655 :group 'mh-show
70a1d47e 3656 :package-version '(MH-E . "8.0"))
dda00b2c 3657
c90c4cf1 3658(defface-mh mh-show-signature (mh-face-data 'mh-show-signature)
dda00b2c
BW
3659 "Signature face."
3660 :group 'mh-faces
23347d76 3661 :group 'mh-show
70a1d47e 3662 :package-version '(MH-E . "8.0"))
dda00b2c 3663
c90c4cf1 3664(defface-mh mh-show-subject
6d21875b 3665 (mh-face-data 'mh-folder-subject '((t (:inherit mh-folder-subject))))
dda00b2c
BW
3666 "Face used to highlight \"Subject:\" header fields."
3667 :group 'mh-faces
23347d76 3668 :group 'mh-show
70a1d47e 3669 :package-version '(MH-E . "8.0"))
dda00b2c 3670
c90c4cf1 3671(defface-mh mh-show-to (mh-face-data 'mh-show-to)
dda00b2c
BW
3672 "Face used to highlight \"To:\" header fields."
3673 :group 'mh-faces
23347d76 3674 :group 'mh-show
70a1d47e 3675 :package-version '(MH-E . "8.0"))
dda00b2c 3676
c90c4cf1 3677(defface-mh mh-show-xface
6d21875b 3678 (mh-face-data 'mh-show-from '((t (:inherit (mh-show-from highlight)))))
6d21875b 3679"X-Face image face.
dda00b2c
BW
3680The background and foreground are used in the image."
3681 :group 'mh-faces
23347d76 3682 :group 'mh-show
70a1d47e 3683 :package-version '(MH-E . "8.0"))
dda00b2c 3684
c90c4cf1 3685(defface-mh mh-speedbar-folder (mh-face-data 'mh-speedbar-folder)
dda00b2c
BW
3686 "Basic folder face."
3687 :group 'mh-faces
23347d76 3688 :group 'mh-speedbar
70a1d47e 3689 :package-version '(MH-E . "8.0"))
dda00b2c 3690
c90c4cf1 3691(defface-mh mh-speedbar-folder-with-unseen-messages
6d21875b
BW
3692 (mh-face-data 'mh-speedbar-folder
3693 '((t (:inherit mh-speedbar-folder :bold t))))
dda00b2c
BW
3694 "Folder face when folder contains unread messages."
3695 :group 'mh-faces
23347d76 3696 :group 'mh-speedbar
70a1d47e 3697 :package-version '(MH-E . "8.0"))
dda00b2c 3698
c90c4cf1 3699(defface-mh mh-speedbar-selected-folder
6d21875b 3700 (mh-face-data 'mh-speedbar-selected-folder)
dda00b2c
BW
3701 "Selected folder face."
3702 :group 'mh-faces
23347d76 3703 :group 'mh-speedbar
70a1d47e 3704 :package-version '(MH-E . "8.0"))
dda00b2c 3705
c90c4cf1 3706(defface-mh mh-speedbar-selected-folder-with-unseen-messages
6d21875b
BW
3707 (mh-face-data 'mh-speedbar-selected-folder
3708 '((t (:inherit mh-speedbar-selected-folder :bold t))))
dda00b2c
BW
3709 "Selected folder face when folder contains unread messages."
3710 :group 'mh-faces
23347d76 3711 :group 'mh-speedbar
70a1d47e 3712 :package-version '(MH-E . "8.0"))
f1ed9461 3713
bdcfe844
BW
3714(provide 'mh-e)
3715
cee9f5c6
BW
3716;; Local Variables:
3717;; indent-tabs-mode: nil
3718;; sentence-end-double-space: nil
3719;; End:
bdcfe844 3720
cee9f5c6 3721;; arch-tag: cce884de-bd37-4104-9963-e4439d5ed22b
c26cf6c8 3722;;; mh-e.el ends here