(c-offsets-alist): Fix typo.
[bpt/emacs.git] / lisp / mh-e / mh-customize.el
1 ;;; mh-customize.el --- MH-E customization
2
3 ;; Copyright (C) 2002 Free Software Foundation, Inc.
4
5 ;; Author: Bill Wohler <wohler@newt.com>
6 ;; Maintainer: Bill Wohler <wohler@newt.com>
7 ;; Keywords: mail
8 ;; See: mh-e.el
9
10 ;; This file is part of GNU Emacs.
11
12 ;; GNU Emacs is free software; you can redistribute it and/or modify
13 ;; it under the terms of the GNU General Public License as published by
14 ;; the Free Software Foundation; either version 2, or (at your option)
15 ;; any later version.
16
17 ;; GNU Emacs is distributed in the hope that it will be useful,
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 ;; GNU General Public License for more details.
21
22 ;; You should have received a copy of the GNU General Public License
23 ;; along with GNU Emacs; see the file COPYING. If not, write to the
24 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
25 ;; Boston, MA 02111-1307, USA.
26
27 ;;; Commentary:
28
29 ;; All of the defgroups, defcustoms, and deffaces in MH-E are found here. This
30 ;; makes it possible to customize modules that aren't loaded yet. It also
31 ;; makes it easier to organize the customization groups.
32
33 ;; This file contains the following sections:
34 ;;
35 ;; 1. MH-E Customization Groups
36 ;;
37 ;; These are the customization group definitions. These are organized in a
38 ;; logical order. High-level, windows and toolbar, folder, message,
39 ;; composing and hooks.
40 ;;
41 ;; 2. MH-E Customization
42 ;;
43 ;; Here are the actual customization variables. There is a sub-section for
44 ;; each group in the MH-E Customization Groups section. Within each
45 ;; section, variables are sorted alphabetically. The manual section
46 ;; dictates which group a variable should be placed. New variables should
47 ;; be placed in the section where they would most likely be defined.
48 ;;
49 ;; All hooks should be placed in the 'mh-hook group; in addition, add the
50 ;; group in which the hook is defined in the manual (or, if it is new,
51 ;; where it would be defined). These two actions insures that the hooks
52 ;; appear last in each group.
53 ;;
54 ;; 3. Faces
55
56 ;;; Change Log:
57
58 ;; $Id: mh-customize.el,v 1.1 2003/01/08 23:21:16 wohler Exp $
59
60 ;;; Code:
61
62 ;;;###mh-autoload
63 (defun mh-customize ()
64 "Customize MH-E variables."
65 (interactive)
66 (customize-group 'mh))
67
68 ;;; MH-E Customization Groups
69
70 (defgroup mh nil
71 "GNU Emacs interface to the MH mail system."
72 :link '(custom-manual "(mh-e)Top")
73 :group 'mail)
74
75 (defgroup mh-toolbar nil
76 "Toolbar configuration."
77 :prefix "mh-"
78 :group 'mh)
79
80 (defgroup mh-speed nil
81 "Speedbar and folder configuration."
82 :prefix "mh-"
83 :link '(custom-manual "(mh-e)Customizing Moving Mail")
84 :group 'mh)
85
86 (defgroup mh-folder nil
87 "Options for controlling scan listing."
88 :prefix "mh-"
89 :link '(custom-manual "(mh-e)Customizing Moving Mail")
90 :group 'mh)
91
92 (defgroup mh-show nil
93 "Message display."
94 :prefix "mh-"
95 :link '(custom-manual "(mh-e)Customizing Reading")
96 :group 'mh)
97
98 (defgroup mh-letter nil
99 "Composing messages."
100 :prefix "mh-"
101 :link '(custom-manual "(mh-e)Customizing Sending")
102 :group 'mh)
103
104 (defgroup mh-alias nil
105 "Alias handling."
106 :link '(custom-manual "(mh-e)Customizing mh-e")
107 :prefix "mh-alias-"
108 :group 'mh)
109
110 (defgroup mh-index nil
111 "Indexed searching."
112 :link '(custom-manual "(mh-e)Customizing mh-e")
113 :prefix "mh-"
114 :group 'mh)
115
116 (defgroup mh-identity nil
117 "Multiple personalities."
118 :link '(custom-manual "(mh-e)Customizing mh-e")
119 :prefix "mh-"
120 :group 'mh)
121
122 (defgroup mh-faces nil
123 "Faces used in MH-E."
124 :link '(custom-manual "(mh-e)Customizing mh-e")
125 :prefix "mh-"
126 :group 'faces
127 :group 'mh)
128
129 (defgroup mh-hooks nil
130 "MH-E hooks."
131 :link '(custom-manual "(mh-e)Customizing mh-e")
132 :prefix "mh-"
133 :group 'mh)
134
135 ;;; Faces
136
137 (defgroup mh-speed-faces nil
138 "Faces used in speedbar."
139 :link '(custom-manual "(mh-e)Customizing mh-e")
140 :prefix "mh-"
141 :group 'mh-faces
142 :group 'mh-speed)
143
144 (defgroup mh-folder-faces nil
145 "Faces used in scan listing."
146 :link '(custom-manual "(mh-e)Customizing mh-e")
147 :prefix "mh-"
148 :group 'mh-faces
149 :group 'mh-folder)
150
151 (defgroup mh-show-faces nil
152 "Faces used in message display."
153 :link '(custom-manual "(mh-e)Customizing mh-e")
154 :prefix "mh-"
155 :group 'mh-faces
156 :group 'mh-show)
157
158 (defgroup mh-index-faces nil
159 "Faces used in indexed searches."
160 :link '(custom-manual "(mh-e)Customizing mh-e")
161 :prefix "mh-"
162 :group 'mh-faces
163 :group 'mh-index)
164
165 \f
166
167 ;;; MH-E Customization (:group mh)
168
169 ;;; Toolbar configuration (:group 'mh-toolbar)
170
171 (defconst mh-tool-bar-item-inc "Incorporate new mail in Inbox")
172 (defconst mh-tool-bar-item-save-mime "Save MIME parts")
173 (defconst mh-tool-bar-item-prev-msg "Previous message")
174 (defconst mh-tool-bar-item-page-msg "Page this message")
175 (defconst mh-tool-bar-item-next-msg "Next message")
176 (defconst mh-tool-bar-item-delete "Mark for deletion")
177 (defconst mh-tool-bar-item-refile "Refile this message")
178 (defconst mh-tool-bar-item-undo "Undo this mark")
179 (defconst mh-tool-bar-item-perform "Perform moves and deletes")
180 (defconst mh-tool-bar-item-toggle-show "Toggle showing message")
181 (defconst mh-tool-bar-item-reply-from "Reply to \"from\"")
182 (defconst mh-tool-bar-item-reply-to "Reply to \"to\"")
183 (defconst mh-tool-bar-item-reply-all "Reply to \"all\"")
184 (defconst mh-tool-bar-item-reply "Reply to this message")
185 (defconst mh-tool-bar-item-alias "Grab From alias")
186 (defconst mh-tool-bar-item-compose "Compose new message")
187 (defconst mh-tool-bar-item-rescan "Rescan this folder")
188 (defconst mh-tool-bar-item-repack "Repack this folder")
189 (defconst mh-tool-bar-item-search "Search")
190 (defconst mh-tool-bar-item-visit "Visit other folder")
191 (defconst mh-tool-bar-item-prefs "MH-E preferences")
192 (defconst mh-tool-bar-item-help "Help")
193 (defconst mh-tool-bar-item-widen "Widen from this sequence")
194
195 (defconst mh-tool-bar-item-send "Send this letter")
196 (defconst mh-tool-bar-item-attach "Insert attachment")
197 (defconst mh-tool-bar-item-spell "Check spelling")
198 (defconst mh-tool-bar-item-save "Save current buffer to its file")
199 (defconst mh-tool-bar-item-undo-op "Undo last operation")
200 (defconst mh-tool-bar-item-kill
201 "Cut (kill) text in region between mark and current position")
202 (defconst mh-tool-bar-item-copy
203 "Copy text in region between mark and current position")
204 (defconst mh-tool-bar-item-paste
205 "Paste (yank) text cut or copied earlier")
206 (defconst mh-tool-bar-item-kill-draft "Kill this draft")
207 (defconst mh-tool-bar-item-comp-prefs "MH-E composition preferences")
208
209 (defcustom mh-tool-bar-reply-3-buttons-flag nil
210 "*Non-nil means use three buttons for reply commands in tool-bar.
211 If you have room on your tool-bar because you are using a large font, you
212 may set this variable to expand the single reply button into three buttons
213 that won't lead to minibuffer prompt about who to reply to."
214 :type 'boolean
215 :group 'mh-toolbar)
216
217 (defcustom mh-tool-bar-search-function 'mh-search-folder
218 "*Function called by the tool-bar search button.
219 See `mh-search-folder' and `mh-index-search' for details."
220 :type '(choice (const mh-search-folder)
221 (const mh-index-search)
222 (function :tag "Other function"))
223 :group 'mh-toolbar)
224
225 (eval-when-compile (defvar tool-bar-map))
226 (defvar mh-show-tool-bar-map nil)
227 (defun mh-tool-bar-show-set ()
228 "Construct toolbar for `mh-show-mode'."
229 (when (fboundp 'tool-bar-add-item)
230 (setq
231 mh-show-tool-bar-map
232 (let ((tool-bar-map (make-sparse-keymap)))
233 (if (member mh-tool-bar-item-inc mh-tool-bar-folder-buttons)
234 (tool-bar-add-item "mail" 'mh-inc-folder 'mh-showtoolbar-inc-folder
235 :help mh-tool-bar-item-inc))
236 (if (member mh-tool-bar-item-save-mime mh-tool-bar-folder-buttons)
237 (tool-bar-add-item "attach" 'mh-mime-save-parts
238 'mh-showtoolbar-mime-save-parts
239 :help mh-tool-bar-item-save-mime))
240 (if (member mh-tool-bar-item-prev-msg mh-tool-bar-folder-buttons)
241 (tool-bar-add-item "left_arrow" 'mh-show-previous-undeleted-msg
242 'mh-showtoolbar-prev
243 :help mh-tool-bar-item-prev-msg))
244 (if (member mh-tool-bar-item-page-msg mh-tool-bar-folder-buttons)
245 (tool-bar-add-item "page-down" 'mh-show-page-msg 'mh-showtoolbar-page
246 :help mh-tool-bar-item-page-msg))
247 (if (member mh-tool-bar-item-next-msg mh-tool-bar-folder-buttons)
248 (tool-bar-add-item "right_arrow" 'mh-show-next-undeleted-msg
249 'mh-showtoolbar-next
250 :help mh-tool-bar-item-next-msg))
251 (if (member mh-tool-bar-item-delete mh-tool-bar-folder-buttons)
252 (tool-bar-add-item "close" 'mh-show-delete-msg
253 'mh-showtoolbar-delete
254 :help mh-tool-bar-item-delete))
255 (if (member mh-tool-bar-item-refile mh-tool-bar-folder-buttons)
256 (tool-bar-add-item "refile" 'mh-show-refile-msg
257 'mh-showtoolbar-refile
258 :help mh-tool-bar-item-refile))
259 (if (member mh-tool-bar-item-undo mh-tool-bar-folder-buttons)
260 (tool-bar-add-item "undo" 'mh-show-undo 'mh-showtoolbar-undo
261 :help mh-tool-bar-item-undo))
262 (if (member mh-tool-bar-item-perform mh-tool-bar-folder-buttons)
263 (tool-bar-add-item "execute" 'mh-show-execute-commands
264 'mh-showtoolbar-exec
265 :help mh-tool-bar-item-perform))
266 (if (member mh-tool-bar-item-toggle-show mh-tool-bar-folder-buttons)
267 (tool-bar-add-item "show" 'mh-show-toggle-showing
268 'mh-showtoolbar-toggle-show
269 :help mh-tool-bar-item-toggle-show))
270 (if (member mh-tool-bar-item-reply-from mh-tool-bar-folder-buttons)
271 (tool-bar-add-item "reply-from"
272 (lambda (&optional arg)
273 (interactive "P")
274 (set-buffer mh-show-folder-buffer)
275 (mh-reply (mh-get-msg-num nil) "from" arg))
276 'mh-showtoolbar-reply-from
277 :help mh-tool-bar-item-reply-from))
278 (if (member mh-tool-bar-item-reply-to mh-tool-bar-folder-buttons)
279 (tool-bar-add-item "reply-to"
280 (lambda (&optional arg)
281 (interactive "P")
282 (set-buffer mh-show-folder-buffer)
283 (mh-reply (mh-get-msg-num nil) "to" arg))
284 'mh-showtoolbar-reply-to
285 :help mh-tool-bar-item-reply-to))
286 (if (member mh-tool-bar-item-reply-all mh-tool-bar-folder-buttons)
287 (tool-bar-add-item "reply-all"
288 (lambda (&optional arg)
289 (interactive "P")
290 (set-buffer mh-show-folder-buffer)
291 (mh-reply (mh-get-msg-num nil) "all" arg))
292 'mh-showtoolbar-reply-all
293 :help mh-tool-bar-item-reply-all))
294 (if (member mh-tool-bar-item-reply mh-tool-bar-folder-buttons)
295 (tool-bar-add-item "mail/reply2" 'mh-show-reply
296 'mh-showtoolbar-reply
297 :help mh-tool-bar-item-reply))
298 (if (member mh-tool-bar-item-alias mh-tool-bar-folder-buttons)
299 (tool-bar-add-item "alias" 'mh-alias-grab-from-field
300 'mh-showtoolbar-alias
301 :help mh-tool-bar-item-alias
302 :enable '(mh-alias-from-has-no-alias-p)))
303 (if (member mh-tool-bar-item-compose mh-tool-bar-folder-buttons)
304 (tool-bar-add-item "mail_compose" 'mh-send 'mh-showtoolbar-compose
305 :help mh-tool-bar-item-compose))
306 (if (member mh-tool-bar-item-rescan mh-tool-bar-folder-buttons)
307 (tool-bar-add-item "rescan" 'mh-show-rescan-folder
308 'mh-showtoolbar-rescan
309 :help mh-tool-bar-item-rescan))
310 (if (member mh-tool-bar-item-repack mh-tool-bar-folder-buttons)
311 (tool-bar-add-item "repack" 'mh-show-pack-folder
312 'mh-showtoolbar-pack
313 :help mh-tool-bar-item-repack))
314 (if (member mh-tool-bar-item-search mh-tool-bar-folder-buttons)
315 (tool-bar-add-item "search"
316 (lambda (&optional arg)
317 (interactive "P")
318 (call-interactively
319 mh-tool-bar-search-function))
320 'mh-showtoolbar-search
321 :help mh-tool-bar-item-search))
322 (if (member mh-tool-bar-item-visit mh-tool-bar-folder-buttons)
323 (tool-bar-add-item "fld_open" 'mh-visit-folder
324 'mh-showtoolbar-visit
325 :help mh-tool-bar-item-visit))
326 (if (member mh-tool-bar-item-prefs mh-tool-bar-folder-buttons)
327 (tool-bar-add-item "preferences" (lambda ()
328 (interactive)
329 (customize-group "mh"))
330 'mh-showtoolbar-customize
331 :help mh-tool-bar-item-prefs))
332 (if (member mh-tool-bar-item-help mh-tool-bar-folder-buttons)
333 (tool-bar-add-item "help" (lambda ()
334 (interactive)
335 (Info-goto-node "(mh-e)Top"))
336 'mh-showtoolbar-help
337 :help mh-tool-bar-item-help))
338 tool-bar-map))))
339
340 (defvar mh-letter-tool-bar-map nil)
341 ;;;###mh-autoload
342 (defun mh-tool-bar-letter-set ()
343 "Construct toolbar for `mh-letter-mode'."
344 (when (fboundp 'tool-bar-add-item)
345 (setq
346 mh-letter-tool-bar-map
347 (let ((tool-bar-map (make-sparse-keymap)))
348 (if (member mh-tool-bar-item-send mh-tool-bar-letter-buttons)
349 (tool-bar-add-item "mail_send" 'mh-send-letter
350 'mh-lettertoolbar-send
351 :help mh-tool-bar-item-send))
352 (if (member mh-tool-bar-item-attach mh-tool-bar-letter-buttons)
353 (tool-bar-add-item "attach" 'mh-compose-insertion
354 'mh-lettertoolbar-compose
355 :help mh-tool-bar-item-attach))
356 (if (member mh-tool-bar-item-spell mh-tool-bar-letter-buttons)
357 (tool-bar-add-item "spell" 'ispell-message 'mh-lettertoolbar-ispell
358 :help mh-tool-bar-item-spell))
359 (if (member mh-tool-bar-item-save mh-tool-bar-letter-buttons)
360 (tool-bar-add-item-from-menu 'save-buffer "save"))
361 (if (member mh-tool-bar-item-undo-op mh-tool-bar-letter-buttons)
362 (tool-bar-add-item-from-menu 'undo "undo"))
363 (if (member mh-tool-bar-item-kill mh-tool-bar-letter-buttons)
364 (tool-bar-add-item-from-menu 'kill-region "cut"))
365 (if (member mh-tool-bar-item-copy mh-tool-bar-letter-buttons)
366 (tool-bar-add-item-from-menu 'menu-bar-kill-ring-save "copy"))
367 (if (member mh-tool-bar-item-paste mh-tool-bar-letter-buttons)
368 (tool-bar-add-item-from-menu 'yank "paste"))
369 (if (member mh-tool-bar-item-kill-draft mh-tool-bar-letter-buttons)
370 (tool-bar-add-item "close" 'mh-fully-kill-draft
371 'mh-lettertoolbar-kill
372 :help mh-tool-bar-item-kill-draft))
373 (if (member mh-tool-bar-item-comp-prefs mh-tool-bar-letter-buttons)
374 (tool-bar-add-item "preferences" (lambda ()
375 (interactive)
376 (customize-group "mh-compose"))
377 'mh-lettertoolbar-customize
378 :help mh-tool-bar-item-comp-prefs))
379 (if (member mh-tool-bar-item-help mh-tool-bar-letter-buttons)
380 (tool-bar-add-item "help" (lambda ()
381 (interactive)
382 (Info-goto-node "(mh-e)Draft Editing"))
383 'mh-lettertoolbar-help
384 :help mh-tool-bar-item-help))
385 tool-bar-map))))
386
387 (defvar mh-folder-tool-bar-map nil)
388 (defvar mh-folder-seq-tool-bar-map nil
389 "Tool-bar to use when narrowed to a sequence in MH-Folder buffers.")
390 ;;;###mh-autoload
391 (defun mh-tool-bar-folder-set ()
392 "Construct toolbar for `mh-folder-mode'."
393 (when (fboundp 'tool-bar-add-item)
394 (setq
395 mh-folder-tool-bar-map
396 (let ((tool-bar-map (make-sparse-keymap)))
397 (if (member mh-tool-bar-item-inc mh-tool-bar-folder-buttons)
398 (tool-bar-add-item "mail" 'mh-inc-folder
399 'mh-foldertoolbar-inc-folder
400 :help mh-tool-bar-item-inc))
401 (if (member mh-tool-bar-item-save-mime mh-tool-bar-folder-buttons)
402 (tool-bar-add-item "attach" 'mh-mime-save-parts
403 'mh-foldertoolbar-mime-save-parts
404 :help mh-tool-bar-item-save-mime))
405 (if (member mh-tool-bar-item-prev-msg mh-tool-bar-folder-buttons)
406 (tool-bar-add-item "left_arrow" 'mh-previous-undeleted-msg
407 'mh-foldertoolbar-prev
408 :help mh-tool-bar-item-prev-msg))
409 (if (member mh-tool-bar-item-page-msg mh-tool-bar-folder-buttons)
410 (tool-bar-add-item "page-down" 'mh-page-msg 'mh-foldertoolbar-page
411 :help mh-tool-bar-item-page-msg))
412 (if (member mh-tool-bar-item-next-msg mh-tool-bar-folder-buttons)
413 (tool-bar-add-item "right_arrow" 'mh-next-undeleted-msg
414 'mh-foldertoolbar-next
415 :help mh-tool-bar-item-next-msg))
416 (if (member mh-tool-bar-item-delete mh-tool-bar-folder-buttons)
417 (tool-bar-add-item "close" 'mh-delete-msg 'mh-foldertoolbar-delete
418 :help mh-tool-bar-item-delete))
419 (if (member mh-tool-bar-item-refile mh-tool-bar-folder-buttons)
420 (tool-bar-add-item "refile" 'mh-refile-msg 'mh-foldertoolbar-refile
421 :help mh-tool-bar-item-refile))
422 (if (member mh-tool-bar-item-undo mh-tool-bar-folder-buttons)
423 (tool-bar-add-item "undo" 'mh-undo 'mh-foldertoolbar-undo
424 :help mh-tool-bar-item-undo))
425 (if (member mh-tool-bar-item-perform mh-tool-bar-folder-buttons)
426 (tool-bar-add-item "execute" 'mh-execute-commands
427 'mh-foldertoolbar-exec
428 :help mh-tool-bar-item-perform))
429 (if (member mh-tool-bar-item-toggle-show mh-tool-bar-folder-buttons)
430 (tool-bar-add-item "show" 'mh-toggle-showing
431 'mh-foldertoolbar-toggle-show
432 :help mh-tool-bar-item-toggle-show))
433 (if (member mh-tool-bar-item-reply-from mh-tool-bar-folder-buttons)
434 (tool-bar-add-item "reply-from"
435 (lambda (&optional arg)
436 (interactive "P")
437 (mh-reply (mh-get-msg-num nil) "from" arg))
438 'mh-foldertoolbar-reply-from
439 :help mh-tool-bar-item-reply-from))
440 (if (member mh-tool-bar-item-reply-to mh-tool-bar-folder-buttons)
441 (tool-bar-add-item "reply-to"
442 (lambda (&optional arg)
443 (interactive "P")
444 (mh-reply (mh-get-msg-num nil) "to" arg))
445 'mh-foldertoolbar-reply-to
446 :help mh-tool-bar-item-reply-to))
447 (if (member mh-tool-bar-item-reply-all mh-tool-bar-folder-buttons)
448 (tool-bar-add-item "reply-all"
449 (lambda (&optional arg)
450 (interactive "P")
451 (mh-reply (mh-get-msg-num nil) "all" arg))
452 'mh-foldertoolbar-reply-all
453 :help mh-tool-bar-item-reply-all))
454 (if (member mh-tool-bar-item-reply mh-tool-bar-folder-buttons)
455 (tool-bar-add-item "mail/reply2" 'mh-reply
456 'mh-foldertoolbar-reply
457 :help mh-tool-bar-item-reply))
458 (if (member mh-tool-bar-item-alias mh-tool-bar-folder-buttons)
459 (tool-bar-add-item "alias" 'mh-alias-grab-from-field
460 'mh-foldertoolbar-alias
461 :help mh-tool-bar-item-alias
462 :enable '(mh-alias-from-has-no-alias-p)))
463 (if (member mh-tool-bar-item-compose mh-tool-bar-folder-buttons)
464 (tool-bar-add-item "mail_compose" 'mh-send 'mh-foldertoolbar-compose
465 :help mh-tool-bar-item-compose))
466 (if (member mh-tool-bar-item-rescan mh-tool-bar-folder-buttons)
467 (tool-bar-add-item "rescan" 'mh-rescan-folder
468 'mh-foldertoolbar-rescan
469 :help mh-tool-bar-item-rescan))
470 (if (member mh-tool-bar-item-repack mh-tool-bar-folder-buttons)
471 (tool-bar-add-item "repack" 'mh-pack-folder 'mh-foldertoolbar-pack
472 :help mh-tool-bar-item-repack))
473 (if (member mh-tool-bar-item-search mh-tool-bar-folder-buttons)
474 (tool-bar-add-item "search"
475 (lambda (&optional arg)
476 (interactive "P")
477 (call-interactively
478 mh-tool-bar-search-function))
479 'mh-foldertoolbar-search
480 :help mh-tool-bar-item-search))
481 (if (member mh-tool-bar-item-visit mh-tool-bar-folder-buttons)
482 (tool-bar-add-item "fld_open" 'mh-visit-folder
483 'mh-foldertoolbar-visit
484 :help mh-tool-bar-item-visit))
485 (if (member mh-tool-bar-item-prefs mh-tool-bar-folder-buttons)
486 (tool-bar-add-item "preferences" (lambda ()
487 (interactive)
488 (customize-group "mh"))
489 'mh-foldertoolbar-customize
490 :help mh-tool-bar-item-prefs))
491 (if (member mh-tool-bar-item-help mh-tool-bar-folder-buttons)
492 (tool-bar-add-item "help" (lambda ()
493 (interactive)
494 (Info-goto-node "(mh-e)Top"))
495 'mh-foldertoolbar-help
496 :help mh-tool-bar-item-help))
497 tool-bar-map))
498
499 (setq mh-folder-seq-tool-bar-map
500 (let ((tool-bar-map (copy-keymap mh-folder-tool-bar-map)))
501 (if (member mh-tool-bar-item-widen mh-tool-bar-folder-buttons)
502 (tool-bar-add-item "widen" 'mh-widen 'mh-foldertoolbar-widen
503 :help mh-tool-bar-item-widen))
504 tool-bar-map))))
505
506 (defun mh-tool-bar-folder-buttons-set (symbol value)
507 "Update the `mh-tool-bar-folder-buttons' variable, and rebuild the tool-bar.
508 Sets the default for SYMBOL (e.g. `mh-tool-bar-folder-buttons') to VALUE (as
509 set in customization). This is called after 'customize is used to alter
510 `mh-tool-bar-folder-buttons'."
511 (set-default symbol value)
512 (mh-tool-bar-show-set)
513 (mh-tool-bar-folder-set))
514
515 (custom-declare-variable
516 'mh-tool-bar-folder-buttons
517 '(append
518 (list mh-tool-bar-item-inc
519 mh-tool-bar-item-save-mime
520 mh-tool-bar-item-prev-msg
521 mh-tool-bar-item-page-msg
522 mh-tool-bar-item-next-msg
523 mh-tool-bar-item-delete
524 mh-tool-bar-item-refile
525 mh-tool-bar-item-undo
526 mh-tool-bar-item-perform
527 ;;; mh-tool-bar-item-toggle-show
528 )
529 (if mh-tool-bar-reply-3-buttons-flag
530 (list mh-tool-bar-item-reply-from
531 mh-tool-bar-item-reply-to
532 mh-tool-bar-item-reply-all)
533 (list mh-tool-bar-item-reply))
534 (list mh-tool-bar-item-alias
535 mh-tool-bar-item-compose
536 mh-tool-bar-item-rescan
537 ;;; mh-tool-bar-item-repack
538 mh-tool-bar-item-search
539 mh-tool-bar-item-visit
540 mh-tool-bar-item-prefs
541 mh-tool-bar-item-help
542 mh-tool-bar-item-widen))
543 "Buttons to include in MH-E folder/show toolbar."
544 :group 'mh-toolbar
545 :set 'mh-tool-bar-folder-buttons-set
546 :type `(set (const ,mh-tool-bar-item-inc)
547 (const ,mh-tool-bar-item-save-mime)
548 (const ,mh-tool-bar-item-prev-msg)
549 (const ,mh-tool-bar-item-page-msg)
550 (const ,mh-tool-bar-item-next-msg)
551 (const ,mh-tool-bar-item-delete)
552 (const ,mh-tool-bar-item-refile)
553 (const ,mh-tool-bar-item-undo)
554 (const ,mh-tool-bar-item-perform)
555 (const ,mh-tool-bar-item-toggle-show)
556 (const ,mh-tool-bar-item-reply-from)
557 (const ,mh-tool-bar-item-reply-to)
558 (const ,mh-tool-bar-item-reply-all)
559 (const ,mh-tool-bar-item-reply)
560 (const ,mh-tool-bar-item-alias)
561 (const ,mh-tool-bar-item-compose)
562 (const ,mh-tool-bar-item-rescan)
563 (const ,mh-tool-bar-item-repack)
564 (const ,mh-tool-bar-item-search)
565 (const ,mh-tool-bar-item-visit)
566 (const ,mh-tool-bar-item-prefs)
567 (const ,mh-tool-bar-item-help)
568 (const ,mh-tool-bar-item-widen)))
569
570 (defun mh-tool-bar-letter-buttons-set (symbol value)
571 "Update the `mh-tool-bar-letter-buttons' variable, and rebuild the tool-bar.
572 Sets the default for SYMBOL (e.g. `mh-tool-bar-letter-buttons') to VALUE (as
573 set in customization). This is called after 'customize is used to alter
574 `mh-tool-bar-letter-buttons'."
575 (set-default symbol value)
576 (mh-tool-bar-letter-set))
577
578 (custom-declare-variable
579 'mh-tool-bar-letter-buttons
580 '(list mh-tool-bar-item-send
581 mh-tool-bar-item-attach
582 mh-tool-bar-item-spell
583 mh-tool-bar-item-save
584 mh-tool-bar-item-undo-op
585 mh-tool-bar-item-kill
586 mh-tool-bar-item-copy
587 mh-tool-bar-item-paste
588 mh-tool-bar-item-kill-draft
589 mh-tool-bar-item-comp-prefs
590 mh-tool-bar-item-help)
591 "Buttons to include in MH-E letter toolbar."
592 :group 'mh-toolbar
593 :set 'mh-tool-bar-letter-buttons-set
594 :type `(set (const ,mh-tool-bar-item-send)
595 (const ,mh-tool-bar-item-attach)
596 (const ,mh-tool-bar-item-spell)
597 (const ,mh-tool-bar-item-save)
598 (const ,mh-tool-bar-item-undo-op)
599 (const ,mh-tool-bar-item-kill)
600 (const ,mh-tool-bar-item-copy)
601 (const ,mh-tool-bar-item-paste)
602 (const ,mh-tool-bar-item-kill-draft)
603 (const ,mh-tool-bar-item-comp-prefs)
604 (const ,mh-tool-bar-item-help)))
605
606 \f
607
608 ;;; Speedbar and folder configuration (:group 'mh-speed)
609
610 (defcustom mh-large-folder 200
611 "The number of messages that indicates a large folder.
612 If a folder is deemed to be large, that is the number of messages in it exceed
613 this value, then confirmation is needed when it is visited. Even when
614 `mh-show-threads-flag' is non-nil, the folder is not automatically threaded, if
615 it is large. If set to nil all folders are treated as if they are small."
616 :type '(choice (const :tag "No limit") integer)
617 :group 'mh-speed)
618
619 (defcustom mh-speed-flists-interval 60
620 "Time between calls to flists in seconds.
621 If 0, flists is not called repeatedly."
622 :type 'integer
623 :group 'mh-speed)
624
625 (defcustom mh-speed-run-flists-flag t
626 "Non-nil means flists is used.
627 If non-nil, flists is executed every `mh-speed-flists-interval' seconds to
628 update the display of the number of unseen and total messages in each folder.
629 If resources are limited, this can be set to nil and the speedbar display can
630 be updated manually with the \\[mh-speed-flists] command."
631 :type 'boolean
632 :group 'mh-speed)
633
634 ;;; Options for controlling scan listing (:group 'mh-folder)
635
636 (defcustom mh-adaptive-cmd-note-flag t
637 "*Non-nil means that the message number width is determined dynamically.
638 This is done once when a folder is first opened by running scan on the last
639 message of the folder. The message number for the last message is extracted
640 and its width calculated. This width is used when calling `mh-set-cmd-note'.
641
642 If you prefer fixed-width message numbers, set this variable to nil and call
643 `mh-set-cmd-note' with the width specified by the scan format in
644 `mh-scan-format-file'. For example, the default width is 4, so you would use
645 \"(mh-set-cmd-note 4)\" if `mh-scan-format-file' were nil."
646 :type 'boolean
647 :group 'mh-folder)
648
649 (defcustom mh-auto-folder-collect-flag t
650 "*Non-nil means to collect all folder names at startup in the background.
651 Otherwise, the internal list of folder names is built as folders are
652 referenced."
653 :type 'boolean
654 :group 'mh-folder)
655
656 (defcustom mh-inc-prog "inc"
657 "*Program to run to incorporate new mail into a folder.
658 Normally \"inc\". This file is searched for relative to
659 the `mh-progs' directory unless it is an absolute pathname."
660 :type 'string
661 :group 'mh-folder)
662
663 (defcustom mh-lpr-command-format "lpr -J '%s'"
664 "*Format for Unix command that prints a message.
665 The string should be a Unix command line, with the string '%s' where
666 the job's name (folder and message number) should appear. The formatted
667 message text is piped to this command when you type \\<mh-folder-mode-map>`\\[mh-print-msg]'."
668 :type 'string
669 :group 'mh-folder)
670
671 (defcustom mh-mime-save-parts-default-directory t
672 "Default directory to use for `mh-mime-save-parts'.
673 If nil, prompt and set for next time the command is used during same session.
674 If t, prompt always"
675 :type '(choice (const :tag "Prompt the first time" nil)
676 (const :tag "Prompt always" t)
677 directory)
678 :group 'mh-folder)
679
680 (defcustom mh-recenter-summary-flag nil
681 "*Non-nil means to recenter the summary window.
682 Recenter the summary window when the show window is toggled off if non-nil."
683 :type 'boolean
684 :group 'mh-folder)
685
686 (defcustom mh-print-background-flag nil
687 "*Non-nil means messages should be printed in the background.
688 WARNING: do not delete the messages until printing is finished;
689 otherwise, your output may be truncated."
690 :type 'boolean
691 :group 'mh-folder)
692
693 (defcustom mh-recursive-folders-flag nil
694 "*Non-nil means that commands which operate on folders do so recursively."
695 :type 'boolean
696 :group 'mh-folder)
697
698 (defcustom mh-scan-format-file t
699 "Specifies the format file to pass to the scan program.
700 If t, the format string will be taken from the either `mh-scan-format-mh'
701 or `mh-scan-format-nmh' depending on whether MH or nmh is in use.
702 If nil, the default scan output will be used.
703
704 If you customize the scan format, you may need to modify a few variables
705 containing regexps that MH-E uses to identify specific portions of the output.
706 Use `M-x apropos RET mh-scan.*regexp' to obtain a list of these variables. You
707 may also have to call `mh-set-cmd-note' with the width of your message
708 numbers. See also `mh-adaptive-cmd-note-flag'."
709 :type '(choice (const :tag "Use MH-E scan format" t)
710 (const :tag "Use default scan format" nil)
711 (file :tag "Specify a scan format file"))
712 :group 'mh-folder)
713
714 (defcustom mh-scan-prog "scan"
715 "*Program to run to generate one-line-per-message listing of a folder.
716 Normally \"scan\" or a file name linked to scan. This file is searched
717 for relative to the `mh-progs' directory unless it is an absolute pathname."
718 :type 'string
719 :group 'mh-folder)
720 (make-variable-buffer-local 'mh-scan-prog)
721
722 (defcustom mh-show-threads-flag nil
723 "Non-nil means new folders start in threaded mode.
724 Threading large number of messages can be time consuming. So if the flag is
725 non-nil then threading will be done only if the number of messages being
726 threaded is less than `mh-large-folder'."
727 :type 'boolean
728 :group 'mh-folder)
729
730 (defcustom mh-store-default-directory nil
731 "*Last directory used by \\[mh-store-msg]; default for next store.
732 A directory name string, or nil to use current directory."
733 :type '(choice (const :tag "Current" nil)
734 directory)
735 :group 'mh-folder)
736
737 (defcustom mh-update-sequences-after-mh-show-flag t
738 "*Non-nil means `mh-update-sequence' is called from `mh-show-mode'.
739 If set, `mh-update-sequence' is run every time a message is shown, telling
740 MH or nmh that this is your current message. It's useful, for example, to
741 display MIME content using \"M-! mhshow RET\""
742 :type 'boolean
743 :group 'mh-folder)
744
745 ;;; Message display (:group 'mh-show)
746
747 (defcustom mh-bury-show-buffer-flag t
748 "*Non-nil means that the displayed show buffer for a folder is buried."
749 :type 'boolean
750 :group 'mh-show)
751
752 (defcustom mh-clean-message-header-flag t
753 "*Non-nil means clean headers of messages that are displayed or inserted.
754 The variables `mh-invisible-headers' and `mh-visible-headers' control
755 what is removed."
756 :type 'boolean
757 :group 'mh-show)
758
759 (defcustom mh-decode-mime-flag (not (not (locate-library "mm-decode")))
760 "*Non-nil means that Gnus is used to show MIME attachments with Gnus."
761 :type 'boolean
762 :group 'mh-show)
763
764 (defcustom mh-decode-quoted-printable-flag
765 (not (null (and (fboundp 'executable-find)(executable-find "mimedecode"))))
766 "Non-nil means decode quoted-printable MIME part with `mimedecode'.
767
768 Quoted-printable message parts are translated to 8-bit characters by the
769 `mimedecode' command. However, unless there is only one quoted-printable body
770 part, Gnus will have already decoded the quoted-printable parts.
771
772 This variable is initialized t if `mimedecode' is available.
773
774 The source code for `mimedecode' can be obtained from
775 http://www.freesoft.org/CIE/FAQ/mimedeco.c."
776 :type 'boolean
777 :group 'mh-show)
778
779 (defcustom mh-display-buttons-for-inline-parts-flag nil
780 "*Non-nil means display buttons for all inline MIME parts.
781 If non-nil, buttons are displayed for all MIME parts. Inline parts start off
782 in displayed state but they can be hidden by clicking the button. If nil no
783 buttons are shown for inline parts."
784 :type 'boolean
785 :group 'mh-show)
786
787 (defcustom mh-do-not-confirm-flag nil
788 "*Non-nil means do not prompt for confirmation.
789 Commands such as `mh-pack-folder' prompt to confirm whether to process
790 outstanding moves and deletes or not before continuing. A non-nil setting will
791 perform the action--which is usually desired but cannot be retracted--without
792 question."
793 :type 'boolean
794 :group 'mh-show)
795
796 (defcustom mh-graphical-smileys-flag t
797 "*Non-nil means graphical smileys are displayed.
798 Non-nil means that small graphics will be used in the show buffer instead of
799 patterns like :-), ;-) etc. The setting only has effect if
800 `mh-decode-mime-flag' is non-nil."
801 :type 'boolean
802 :group 'mh-show)
803
804 (defcustom mh-graphical-emphasis-flag t
805 "*Non-nil means graphical emphasis is displayed.
806 Non-nil means that _underline_ will be underlined, *bold* will appear in bold,
807 /italic/ will appear in italic etc. See `gnus-emphasis-alist' for the whole
808 list. The setting only has effect if `mh-decode-mime-flag' is non-nil."
809 :type 'boolean
810 :group 'mh-show)
811
812 (defcustom mh-highlight-citation-p 'gnus
813 "How to highlight citations in show buffers.
814 The gnus method uses a different color for each indentation."
815 :type '(choice (const :tag "Use gnus" gnus)
816 (const :tag "Use font-lock" font-lock)
817 (const :tag "Don't fontify" nil))
818 :group 'mh-show)
819
820 (defcustom mh-max-inline-image-height nil
821 "*Maximum inline image height if Content-Disposition is not present.
822 If nil, image will be displayed if its height is smaller than the height of
823 the window."
824 :type '(choice (const nil) integer)
825 :group 'mh-show)
826
827 (defcustom mh-max-inline-image-width nil
828 "*Maximum inline image width if Content-Disposition is not present.
829 If nil, image will be displayed if its width is smaller than the width of the
830 window."
831 :type '(choice (const nil) integer)
832 :group 'mh-show)
833
834 (defcustom mh-show-maximum-size 0
835 "*Maximum size of message (in bytes) to display automatically.
836 Provides an opportunity to skip over large messages which may be slow to load.
837 Use a value of 0 to display all messages automatically regardless of size."
838 :type 'integer
839 :group 'mh-show)
840
841 ;; Use goto-addr if it was already loaded (which probably sets this
842 ;; variable to t), or if this variable is otherwise set to t.
843 (defcustom mh-show-use-goto-addr-flag (and (boundp 'goto-address-highlight-p)
844 goto-address-highlight-p)
845 "*Non-nil means highlight URLs and email addresses.
846 The `goto-addr' module is used."
847 :type 'boolean
848 :group 'mh-show)
849
850 (defcustom mh-show-use-xface-flag
851 (and window-system
852 (not (null (cond
853 (mh-xemacs-flag
854 (locate-library "x-face"))
855 ((>= emacs-major-version 21)
856 (locate-library "x-face-e21"))
857 (t ;Emacs20
858 nil))))
859 (not (null (and (fboundp 'executable-find)
860 (executable-find
861 "uncompface")))))
862 "*Non-nil means display faces in `mh-show-mode' with external x-face package.
863 It is available from ftp://ftp.jpl.org/pub/elisp/. Download it and put its
864 files in the Emacs `load-path' and MH-E will invoke it automatically for you if
865 this variable is non-nil.
866
867 The `uncompface' binary is also required to be in the execute PATH. It can
868 be obtained from: ftp://ftp.cs.indiana.edu/pub/faces/compface/compface.tar.Z"
869 :type 'boolean
870 :group 'mh-show)
871
872 (defcustom mh-summary-height (or (and (fboundp 'frame-height)
873 (> (frame-height) 24)
874 (min 10 (/ (frame-height) 6)))
875 4)
876 "*Number of lines in MH-Folder window (including the mode line)."
877 :type 'integer
878 :group 'mh-show)
879
880 (defcustom mh-visible-headers nil
881 "*Contains a regexp specifying the headers to keep when cleaning.
882 Only used if `mh-clean-message-header-flag' is non-nil. Setting it overrides
883 the variable `mh-invisible-headers'."
884 :type '(choice (const nil) regexp)
885 :group 'mh-show)
886
887 (defcustom mhl-formfile nil
888 "*Name of format file to be used by mhl to show and print messages.
889 A value of t means use the default format file.
890 nil means don't use mhl to format messages when showing; mhl is still used,
891 with the default format file, to format messages when printing them.
892 The format used should specify a non-zero value for overflowoffset so
893 the message continues to conform to RFC 822 and MH-E can parse the headers."
894 :type '(choice (const nil) (const t) string)
895 :group 'mh-show)
896 (put 'mhl-formfile 'info-file "mh-e")
897
898 (defvar mh-invisible-headers nil
899 "*Regexp matching lines in a message header that are not to be shown.
900 If `mh-visible-headers' is non-nil, it is used instead to specify what
901 to keep.")
902
903 (defun mh-invisible-headers ()
904 "Make or remake the variable `mh-invisible-headers'.
905 Done using `mh-invisible-header-fields' as input."
906 (setq mh-invisible-headers
907 (concat
908 "^"
909 (let ((max-specpdl-size 1000)) ;workaround for insufficient default
910 (regexp-opt
911 (append
912 (if (not mh-show-use-xface-flag)
913 '("X-Face: "))
914 mh-invisible-header-fields))))))
915
916 (defun mh-invisible-header-fields-set (symbol value)
917 "Update `mh-invisible-header-fields'.
918 The function is called with SYMBOL bound to `mh-invisible-header-fields' and
919 VALUE is the the list of headers that are invisible. As a side effect, the
920 variable `mh-invisible-fields' is set."
921 (set-default symbol value)
922 (mh-invisible-headers))
923
924 ;; Keep fields alphabetized. Mention source, if known.
925 (defcustom mh-invisible-header-fields
926 '("Autoforwarded: "
927 "Bestservhost: "
928 "Content-" ; RFC 2045
929 "Delivered-To: " ; Egroups/yahoogroups mailing list manager
930 "Delivery-Date: " ; MH
931 "Delivery: "
932 "Encoding: "
933 "Errors-To: "
934 "Forwarded: " ; MH
935 "From " ; sendmail
936 "Importance: " ; MS Outlook
937 "In-Reply-To: " ; MH
938 "Lines: "
939 "List-" ; Mailman mailing list manager
940 "List-" ; Unknown mailing list managers
941 "List-Subscribe: " ; Unknown mailing list managers
942 "List-Unsubscribe: " ; Unknown mailing list managers
943 "Mail-from: " ; MH
944 "Mailing-List: " ; Egroups/yahoogroups mailing list manager
945 "Message-Id: " ; RFC 822
946 "Mime-Version" ; RFC 2045
947 "NNTP-" ; News
948 "Old-Return-Path: "
949 "Original-Encoded-Information-Types: " ; X400
950 "P1-Content-Type: " ; X400
951 "P1-Message-Id: " ; X400
952 "P1-Recipient: " ; X400
953 "Path: "
954 "Precedence: "
955 "Prev-Resent" ; MH
956 "Priority: "
957 "Received: " ; RFC 822
958 "References: "
959 "Remailed-" ; MH
960 "Replied: " ; MH
961 "Resent" ; MH
962 "Return-Path: " ; RFC 822
963 "Sensitivity: " ; MS Outlook
964 "Status: " ; sendmail
965 "Ua-Content-Id: " ; X400
966 "User-Agent: "
967 "Via: " ; MH
968 "X-Abuse-Info: "
969 "X-Accept-Language: "
970 "X-Accept-Language: " ; Netscape/Mozilla
971 "X-Ack: "
972 "X-Apparently-From: " ; MS Outlook
973 "X-Apparently-To: " ; Egroups/yahoogroups mailing list manager
974 "X-Authentication-Warning: " ; sendmail
975 "X-Beenthere: " ; Mailman mailing list manager
976 "X-Complaints-To: "
977 "X-Cron-Env: "
978 "X-Delivered"
979 "X-Envelope-Sender: "
980 "X-Envelope-To: "
981 "X-Folder: " ; Spam
982 "X-From-Line"
983 "X-Gnus-Mail-Source: " ; gnus
984 "X-Habeas-SWE-1: " ; Spam
985 "X-Habeas-SWE-2: " ; Spam
986 "X-Habeas-SWE-3: " ; Spam
987 "X-Habeas-SWE-4: " ; Spam
988 "X-Habeas-SWE-5: " ; Spam
989 "X-Habeas-SWE-6: " ; Spam
990 "X-Habeas-SWE-7: " ; Spam
991 "X-Habeas-SWE-8: " ; Spam
992 "X-Habeas-SWE-9: " ; Spam
993 "X-Info: " ; NTMail
994 "X-Juno-" ; Juno
995 "X-List-Host: " ; Unknown mailing list managers
996 "X-List-Subscribe: " ; Unknown mailing list managers
997 "X-List-Unsubscribe: " ; Unknown mailing list managers
998 "X-Listserver: " ; Unknown mailing list managers
999 "X-Loop: " ; Unknown mailing list managers
1000 "X-MIME-Autoconverted: " ; sendmail
1001 "X-MIMETrack: "
1002 "X-MS-TNEF-Correlator: " ; MS Outlook
1003 "X-Mailing-List: " ; Unknown mailing list managers
1004 "X-Mailman-Version: " ; Mailman mailing list manager
1005 "X-Message-Id"
1006 "X-MimeOLE: " ; MS Outlook
1007 "X-Mozilla-Status: " ; Netscape/Mozilla
1008 "X-Msmail-" ; MS Outlook
1009 "X-News: " ; News
1010 "X-No-Archive: "
1011 "X-Orcl-Content-Type: "
1012 "X-Original-Complaints-To: "
1013 "X-Original-Date: " ; SourceForge mailing list manager
1014 "X-Original-Trace: "
1015 "X-OriginalArrivalTime: " ; Hotmail
1016 "X-Originating-IP: " ; Hotmail
1017 "X-Priority: " ; MS Outlook
1018 "X-Qotd-" ; User added
1019 "X-Received-Date: "
1020 "X-Received: "
1021 "X-Request-"
1022 "X-SBClass: " ; Spam
1023 "X-SBNote: " ; Spam
1024 "X-SBPass: " ; Spam
1025 "X-SBRule: " ; Spam
1026 "X-Scanned-By"
1027 "X-Sender: "
1028 "X-Server-Date: "
1029 "X-Server-Uuid: "
1030 "X-Sieve: " ; Sieve filtering
1031 "X-Spam-Level: " ; Spam
1032 "X-Spam-Score: " ; Spam
1033 "X-Spam-Status: " ; Spam
1034 "X-SpamBouncer: " ; Spam
1035 "X-Trace: "
1036 "X-UIDL: "
1037 "X-UserInfo1: "
1038 "X-VSMLoop: " ; NTMail
1039 "X-Vms-To: "
1040 "X-Wss-Id: " ; Worldtalk gateways
1041 "X-eGroups-" ; Egroups/yahoogroups mailing list manager
1042 "X-pgp: "
1043 "X-submission-address: "
1044 "X400-" ; X400
1045 "Xref: ")
1046 "*List of header fields that are not to be shown.
1047 Regexps are not allowed. Unique fields should have a \": \" suffix;
1048 otherwise, the element can be used to render an entire class of fields
1049 that start with the same prefix invisible.
1050 This variable is ignored if `mh-visible-headers' is set."
1051 :type '(repeat (string :tag "Header field"))
1052 :set 'mh-invisible-header-fields-set
1053 :group 'mh-show)
1054
1055 ;;; Composing messages (:group 'mh-letter)
1056
1057 (defcustom mh-compose-insertion (if (locate-library "mml") 'gnus 'mhn)
1058 "Use either 'gnus or 'mhn to insert MIME message directives in messages."
1059 :type '(choice (const :tag "Use gnus" gnus)
1060 (const :tag "Use mhn" mhn))
1061 :group 'mh-letter)
1062
1063 (defcustom mh-compose-letter-function nil
1064 "Invoked when setting up a letter draft.
1065 It is passed three arguments: TO recipients, SUBJECT, and CC recipients."
1066 :type '(choice (const nil) function)
1067 :group 'mh-letter)
1068
1069 (defcustom mh-delete-yanked-msg-window-flag nil
1070 "*Non-nil means delete any window displaying the message.
1071 Controls window display when a message is yanked by \\<mh-letter-mode-map>\\[mh-yank-cur-msg].
1072 If non-nil, yanking the current message into a draft letter deletes any
1073 windows displaying the message."
1074 :type 'boolean
1075 :group 'mh-letter)
1076
1077 (defcustom mh-extract-from-attribution-verb "wrote:"
1078 "*Verb to use for attribution when a message is yanked by \\<mh-letter-mode-map>\\[mh-yank-cur-msg]."
1079 :type '(choice (const "wrote:")
1080 (const "a écrit :")
1081 (string :tag "Custom string"))
1082 :group 'mh-letter)
1083
1084 (defcustom mh-forward-subject-format "%s: %s"
1085 "*Format to generate the Subject: line contents for a forwarded message.
1086 The two string arguments to the format are the sender of the original
1087 message and the original subject line."
1088 :type 'string
1089 :group 'mh-letter)
1090
1091 (defcustom mh-ins-buf-prefix "> "
1092 "*String to put before each non-blank line of a yanked or inserted message.
1093 \\<mh-letter-mode-map>Used when the message is inserted into an outgoing letter
1094 by \\[mh-insert-letter] or \\[mh-yank-cur-msg]."
1095 :type 'string
1096 :group 'mh-letter)
1097
1098 (defcustom mh-insert-mail-followup-to-flag t
1099 "Non-nil means maybe append a Mail-Followup-To field to the header.
1100 The insertion is done if the To: or Cc: fields matches an entry in
1101 `mh-insert-mail-followup-to-list'."
1102 :type 'boolean
1103 :group 'mh-letter)
1104
1105 (defcustom mh-insert-mail-followup-to-list nil
1106 "Alist of addresses for which a Mail-Followup-To field is inserted.
1107 Each element has the form (REGEXP ADDRESS).
1108 When the REGEXP appears in the To or cc fields of a message, the corresponding
1109 ADDRESS is inserted in a Mail-Followup-To field.
1110
1111 Here's a customization example:
1112
1113 regexp: mh-e-users@lists.s\\\\(ourceforge\\\\|f\\\\).net
1114 address: mh-e-users@lists.sourceforge.net
1115
1116 This corresponds to:
1117
1118 (setq mh-insert-mail-followup-to-list
1119 '((\"mh-e-users@lists.s\\\\(ourceforge\\\\|f\\\\).net\"
1120 \"mh-e-users@lists.sourceforge.net\")))
1121
1122 While it might be tempting to add a descriptive name to the mailing list
1123 address, consider that this field will appear in other people's outgoing
1124 mail in their To: field. It might be best to keep it simple."
1125 :type '(repeat (list (string :tag "regexp") (string :tag "address")))
1126 :group 'mh-letter)
1127
1128 (defcustom mh-insert-x-mailer-flag t
1129 "*Non-nil means append an X-Mailer field to the header."
1130 :type 'boolean
1131 :group 'mh-letter)
1132
1133 (defcustom mh-letter-fill-column 72
1134 "*Fill column to use in `mh-letter-mode'.
1135 This is usually less than in other text modes because email messages get
1136 quoted by some prefix (sometimes many times) when they are replied to,
1137 and it's best to avoid quoted lines that span more than 80 columns."
1138 :type 'integer
1139 :group 'mh-letter)
1140
1141 (defcustom mh-reply-default-reply-to nil
1142 "*Sets the person or persons to whom a reply will be sent.
1143 If nil, prompt for recipient. If non-nil, then \\<mh-folder-mode-map>`\\[mh-reply]' will use this
1144 value and it should be one of \"from\", \"to\", \"cc\", or \"all\".
1145 The values \"cc\" and \"all\" do the same thing."
1146 :type '(choice (const :tag "Prompt" nil)
1147 (const "from") (const "to")
1148 (const "cc") (const "all"))
1149 :group 'mh-letter)
1150
1151 (defcustom mh-reply-show-message-flag t
1152 "*Non-nil means the show buffer is displayed using \\<mh-letter-mode-map>\\[mh-reply].
1153
1154 The setting of this variable determines whether the MH `show-buffer' is
1155 displayed with the current message when using `mh-reply' without a prefix
1156 argument. Set it to nil if you already include the message automatically
1157 in your draft using
1158 repl: -filter repl.filter
1159 in your ~/.mh_profile file."
1160 :type 'boolean
1161 :group 'mh-letter)
1162
1163 (defcustom mh-signature-file-name "~/.signature"
1164 "*Name of file containing the user's signature.
1165 Inserted into message by \\<mh-letter-mode-map>\\[mh-insert-signature]."
1166 :type 'file
1167 :group 'mh-letter)
1168
1169 (defcustom mh-x-face-file "~/.face"
1170 "*File name containing the encoded X-Face string to insert in outgoing mail.
1171 If nil, or the file does not exist, nothing is added to message headers."
1172 :type 'file
1173 :group 'mh-letter)
1174
1175 (defvar mh-x-mailer-string nil
1176 "*String containing the contents of the X-Mailer header field.
1177 If nil, this variable is initialized to show the version of MH-E, Emacs, and
1178 MH the first time a message is composed.")
1179
1180 (defcustom mh-yank-from-start-of-msg 'attribution
1181 "*Controls which part of a message is yanked by \\<mh-letter-mode-map>\\[mh-yank-cur-msg].
1182 If t, include the entire message, with full headers. This is historically
1183 here for use with supercite, but is now deprecated in favor of the setting
1184 `supercite' below.
1185
1186 If the symbol `body', then yank the message minus the header.
1187
1188 If the symbol `supercite', include the entire message, with full headers.
1189 This also causes the invocation of `sc-cite-original' without the setting
1190 of `mail-citation-hook', now deprecated practice.
1191
1192 If the symbol `autosupercite', do as for `supercite' automatically when
1193 show buffer matches the message being replied-to. When this option is used,
1194 the -noformat switch is passed to the repl program to override a -filter or
1195 -format switch.
1196
1197 If the symbol `attribution', then yank the message minus the header and add
1198 a simple attribution line at the top.
1199
1200 If the symbol `autoattrib', do as for `attribution' automatically when show
1201 buffer matches the message being replied-to. You can make sure this is
1202 always the case by setting `mh-reply-show-message-flag' to t (which is the
1203 default) and optionally `mh-delete-yanked-msg-window-flag' to t as well such
1204 that the show window is never displayed. When the `autoattrib' option is
1205 used, the -noformat switch is passed to the repl program to override a
1206 -filter or -format switch.
1207
1208 If nil, yank only the portion of the message following the point.
1209
1210 If the show buffer has a region, this variable is ignored unless its value is
1211 one of `attribution' or `autoattrib' in which case the attribution is added
1212 to the yanked region."
1213 :type '(choice (const :tag "Below point" nil)
1214 (const :tag "Without header" body)
1215 (const :tag "Invoke supercite" supercite)
1216 (const :tag "Invoke supercite, automatically" autosupercite)
1217 (const :tag "Without header, with attribution" attribution)
1218 (const :tag "Without header, with attribution, automatically"
1219 autoattrib)
1220 (const :tag "Entire message with headers" t))
1221 :group 'mh-letter)
1222
1223 (defcustom mh-letter-complete-function 'ispell-complete-word
1224 "*Function to call when completing outside of fields specific to aliases."
1225 :type '(choice function (const nil))
1226 :group 'mh-letter)
1227
1228 ;;; Alias handling (:group 'mh-alias)
1229
1230 (defcustom mh-alias-system-aliases
1231 '("/etc/nmh/MailAliases" "/usr/lib/mh/MailAliases" "/etc/passwd")
1232 "*A list of system files from which to cull aliases.
1233 If these files are modified, they are automatically reread. This list need
1234 include only system aliases and the passwd file, since personal alias files
1235 listed in your \"AliasFile\" MH profile component are automatically included.
1236 You can update the alias list manually using \\[mh-alias-reload]."
1237 :group 'mh-alias
1238 :type '(choice (file) (repeat file)))
1239
1240 (defcustom mh-alias-expand-aliases-flag nil
1241 "*Non-nil means to expand aliases entered in the minibuffer.
1242 In other words, aliases entered in the minibuffer will be expanded to the full
1243 address in the message draft. By default, this expansion is not performed."
1244 :group 'mh-alias
1245 :type 'boolean)
1246
1247 (defcustom mh-alias-completion-ignore-case-flag t
1248 "*Non-nil means don't consider case significant in MH alias completion.
1249 This is the default in plain MH, so it is the default here as well. It
1250 can be useful to set this to t if, for example, you use lowercase
1251 aliases for people and uppercase for mailing lists."
1252 :group 'mh-alias
1253 :type 'boolean)
1254
1255 (defcustom mh-alias-flash-on-comma t
1256 "*Specify whether to flash or warn on translation.
1257 When a [comma] is pressed while entering aliases or addresses, setting this
1258 variable to the following values has the listed effects:
1259 t Flash alias translation but don't warn if there is no translation.
1260 1 Flash alias translation and warn if there is no translation.
1261 nil Do not flash alias translation nor warn if there is no translation."
1262 :group 'mh-alias
1263 :type '(choice (const :tag "Flash but don't warn if no translation" t)
1264 (const :tag "Flash and warn if no translation" 1)
1265 (const :tag "Don't flash nor warn if no translation" nil)))
1266
1267 (defcustom mh-alias-local-users t
1268 "*If t, local users are completed in MH-E To: and Cc: prompts.
1269
1270 Users with a userid greater than some magic number (usually 200) are available
1271 for completion.
1272
1273 If you set this variable to a string, it will be executed to generate a
1274 password file. A value of \"ypcat passwd\" is helpful if NIS is in use."
1275 :group 'mh-alias
1276 :type '(choice (boolean) (string)))
1277
1278 (defcustom mh-alias-insert-file nil
1279 "*Filename to use to store new MH-E aliases.
1280 This variable can also be a list of filenames, in which case MH-E will prompt
1281 for one of them. If nil, the default, then MH-E will use the first file found
1282 in the \"AliasFile\" component of the MH profile."
1283 :group 'mh-alias
1284 :type '(choice (const :tag "Use AliasFile MH profile component" nil)
1285 (file :tag "Alias file")
1286 (repeat :tag "List of alias files" file)))
1287
1288 (defcustom mh-alias-insertion-location 'sorted
1289 "Specifies where new aliases are entered in alias files.
1290 Options are sorted alphabetically, at the top of the file or at the bottom."
1291 :type '(choice (const :tag "Sorted alphabetically" sorted)
1292 (const :tag "At the top of file" top)
1293 (const :tag "At the bottom of file" bottom))
1294 :group 'mh-alias)
1295
1296 ;;; Indexed searching (:group 'mh-index)
1297
1298 (defcustom mh-index-program nil
1299 "Indexing program that MH-E shall use.
1300 The possible choices are swish++, swish-e, namazu, glimpse and grep. By
1301 default this variable is nil which means that the programs are tried in order
1302 and the first one found is used."
1303 :type '(choice (const :tag "auto-detect" nil)
1304 (const :tag "swish++" swish++)
1305 (const :tag "swish-e" swish)
1306 (const :tag "namazu" namazu)
1307 (const :tag "glimpse" glimpse)
1308 (const :tag "grep" grep))
1309 :group 'mh-index)
1310
1311 ;;; Multiple personalities (:group 'mh-identity)
1312
1313 (defcustom mh-identity-list nil
1314 "*List holding MH-E identity.
1315 Omit the colon and trailing space from the field names.
1316 The keyword name \"none\" is reversed for internal use.
1317 Use the keyname name \"signature\" to specify either a signature file or a
1318 function to call to insert a signature at point.
1319
1320 Providing an empty Value (\"\") will cause the field to be deleted.
1321
1322 Example entries using the customize interface:
1323 Keyword name: work
1324 From
1325 Value: John Doe <john@work.com>
1326 Organization
1327 Value: Acme Inc.
1328 Keyword name: home
1329 From
1330 Value: John Doe <johndoe@home.net>
1331 Organization
1332 Value:
1333
1334 This would produce the equivalent of:
1335 (setq mh-identity-list
1336 '((\"work\"
1337 ((\"From\" . \"John Doe <john@work.com>\")
1338 (\"Organization\" . \"Acme Inc.\")))
1339 (\"home\"
1340 ((\"From\" . \"John Doe <johndoe@home.net>\")
1341 (\"Organization\" . \"\")))))"
1342 :type '(repeat (list :tag ""
1343 (string :tag "Keyword name")
1344 (repeat :tag "At least one pair from below"
1345 (choice (cons :tag "From field"
1346 (const "From")
1347 (string :tag "Value"))
1348 (cons :tag "Organization field"
1349 (const "Organization")
1350 (string :tag "Value"))
1351 (cons :tag "Signature"
1352 (const "signature")
1353 (choice (file) (function)))
1354 (cons :tag "Other field & value pair"
1355 (string :tag "Field")
1356 (string :tag "Value"))))))
1357 :set 'mh-identity-list-set
1358 :group 'mh-identity)
1359
1360 (defcustom mh-identity-default nil
1361 "Default identity to use when `mh-letter-mode' is called."
1362 ;; Dynamically render :type corresponding to `mh-identity-list' entries,
1363 ;; e.g.:
1364 ;; :type '(radio (const :tag "none" nil)
1365 ;; (const "home")
1366 ;; (const "work"))
1367 :type (append
1368 '(radio)
1369 (cons '(const :tag "none" nil)
1370 (mapcar (function (lambda (arg) `(const ,arg)))
1371 (mapcar 'car mh-identity-list))))
1372 :group 'mh-identity)
1373
1374 ;;; Hooks (:group 'mh-hooks + group where hook defined)
1375
1376 ;;; These are alphabetized. All hooks should be placed in the 'mh-hook group;
1377 ;;; in addition, add the group in which the hook is defined in the manual (or,
1378 ;;; if it is new, where it would be defined).
1379
1380 (defcustom mh-before-quit-hook nil
1381 "Invoked by \\<mh-folder-mode-map>`\\[mh-quit]' before quitting MH-E.
1382 See also `mh-quit-hook'."
1383 :type 'hook
1384 :group 'mh-hooks
1385 :group 'mh-folder)
1386
1387 (defcustom mh-before-send-letter-hook nil
1388 "Invoked at the beginning of the \\<mh-letter-mode-map>\\[mh-send-letter] command."
1389 :type 'hook
1390 :group 'mh-hooks
1391 :group 'mh-letter)
1392
1393 (defcustom mh-delete-msg-hook nil
1394 "Invoked after marking each message for deletion."
1395 :type 'hook
1396 :group 'mh-hooks
1397 :group 'mh-folder)
1398
1399 (defcustom mh-edit-mhn-hook nil
1400 "Invoked on the formatted letter by \\<mh-letter-mode-map>\\[mh-edit-mhn]."
1401 :type 'hook
1402 :group 'mh-hooks
1403 :group 'mh-letter)
1404
1405 (defcustom mh-find-path-hook nil
1406 "Invoked by `mh-find-path' after reading the user's MH profile."
1407 :type 'hook
1408 :group 'mh-hooks
1409 :group 'mh-folder)
1410
1411 (defcustom mh-folder-list-change-hook nil
1412 "Invoked whenever the cached folder list `mh-folder-list' is changed."
1413 :type 'hook
1414 :group 'mh-hooks
1415 :group 'mh-folder)
1416
1417 (defcustom mh-folder-mode-hook nil
1418 "Invoked in `mh-folder-mode' on a new folder."
1419 :type 'hook
1420 :group 'mh-hooks
1421 :group 'mh-folder)
1422
1423 (defcustom mh-folder-updated-hook nil
1424 "Invoked when the folder actions (such as moves and deletes) are performed.
1425 Variables that are useful in this hook include `mh-delete-list' and
1426 `mh-refile-list' which can be used to see which changes are being made to
1427 current folder, `mh-current-folder'."
1428 :type 'hook
1429 :group 'mh-hooks)
1430
1431 (defcustom mh-inc-folder-hook nil
1432 "Invoked by \\<mh-folder-mode-map>`\\[mh-inc-folder]' after incorporating mail into a folder."
1433 :type 'hook
1434 :group 'mh-hooks
1435 :group 'mh-folder)
1436
1437 (defcustom mh-index-show-hook nil
1438 "Invoked after the message has been displayed."
1439 :type 'hook
1440 :group 'mh-hooks
1441 :group 'mh-index)
1442
1443 (defcustom mh-letter-insert-signature-hook nil
1444 "Invoked at the beginning of the \\<mh-letter-mode-map>\\[mh-insert-signature] command.
1445 Can be used to determine which signature file to use based on message content.
1446 On return, if `mh-signature-file-name' is non-nil that file will be inserted at
1447 the current point in the buffer."
1448 :type 'hook
1449 :group 'mh-hooks
1450 :group 'mh-letter)
1451
1452 (defcustom mh-letter-mode-hook nil
1453 "Invoked in `mh-letter-mode' on a new letter."
1454 :type 'hook
1455 :group 'mh-hooks
1456 :group 'mh-letter)
1457
1458 (defcustom mh-pick-mode-hook nil
1459 "Invoked upon entry to `mh-pick-mode'."
1460 :type 'hook
1461 :group 'mh-hooks
1462 :group 'mh-folder)
1463
1464 (defcustom mh-quit-hook nil
1465 "Invoked after \\<mh-folder-mode-map>`\\[mh-quit]' quits MH-E.
1466 See also `mh-before-quit-hook'."
1467 :type 'hook
1468 :group 'mh-hooks
1469 :group 'mh-folder)
1470
1471 (defcustom mh-refile-msg-hook nil
1472 "Invoked after marking each message for refiling."
1473 :type 'hook
1474 :group 'mh-hooks
1475 :group 'mh-folder)
1476
1477 (defcustom mh-show-hook nil
1478 "Invoked after \\<mh-folder-mode-map>`\\[mh-show]' shows a message."
1479 :type 'hook
1480 :group 'mh-hooks
1481 :group 'mh-show)
1482
1483 (defcustom mh-show-mode-hook nil
1484 "Invoked upon entry to `mh-show-mode'."
1485 :type 'hook
1486 :group 'mh-hooks
1487 :group 'mh-show)
1488
1489 (defcustom mh-unseen-updated-hook nil
1490 "Invoked after the unseen sequence has been updated.
1491 The variable `mh-seen-list' can be used to obtain the list of messages which
1492 will be removed from the unseen sequence."
1493 :type 'hook
1494 :group 'mh-hooks
1495 :group 'mh-folder)
1496
1497 \f
1498
1499 ;;; Faces
1500
1501 ;;; Faces used in speedbar (:group mh-speed-faces)
1502
1503 (defface mh-speedbar-folder-face
1504 '((((class color) (background light))
1505 (:foreground "blue4"))
1506 (((class color) (background dark))
1507 (:foreground "light blue")))
1508 "Face used for folders in the speedbar buffer."
1509 :group 'mh-speed-faces)
1510
1511 (defface mh-speedbar-selected-folder-face
1512 '((((class color) (background light))
1513 (:foreground "red" :underline t))
1514 (((class color) (background dark))
1515 (:foreground "red" :underline t))
1516 (t (:underline t)))
1517 "Face used for the current folder."
1518 :group 'mh-speed-faces)
1519
1520 (defface mh-speedbar-folder-with-unseen-messages-face
1521 '((t (:inherit mh-speedbar-folder-face :bold t)))
1522 "Face used for folders in the speedbar buffer which have unread messages."
1523 :group 'mh-speed-faces)
1524
1525 (defface mh-speedbar-selected-folder-with-unseen-messages-face
1526 '((t (:inherit mh-speedbar-selected-folder-face :bold t)))
1527 "Face used for the current folder when it has unread messages."
1528 :group 'mh-speed-faces)
1529
1530 ;;; Faces used in scan listing (:group mh-folder-faces)
1531
1532 (defvar mh-folder-body-face 'mh-folder-body-face
1533 "Face for highlighting body text in MH-Folder buffers.")
1534 (defface mh-folder-body-face
1535 '((((type tty) (class color)) (:foreground "green"))
1536 (((class grayscale) (background light)) (:foreground "DimGray" :italic t))
1537 (((class grayscale) (background dark)) (:foreground "LightGray" :italic t))
1538 (((class color) (background light)) (:foreground "RosyBrown"))
1539 (((class color) (background dark)) (:foreground "LightSalmon"))
1540 (t (:italic t)))
1541 "Face for highlighting body text in MH-Folder buffers."
1542 :group 'mh-folder-faces)
1543
1544 (defvar mh-folder-cur-msg-face 'mh-folder-cur-msg-face
1545 "Face for the current message line in MH-Folder buffers.")
1546 (defface mh-folder-cur-msg-face
1547 '((((type tty pc) (class color))
1548 (:background "LightGreen"))
1549 (((class color) (background light))
1550 (:background "LightGreen") ;Use this for solid background colour
1551 ;; (:underline t) ;Use this for underlining
1552 )
1553 (((class color) (background dark))
1554 (:background "DarkOliveGreen4"))
1555 (t (:underline t)))
1556 "Face for the current message line in MH-Folder buffers."
1557 :group 'mh-folder-faces)
1558
1559 (defvar mh-folder-cur-msg-number-face 'mh-folder-cur-msg-number-face
1560 "Face for highlighting the current message in MH-Folder buffers.")
1561 (defface mh-folder-cur-msg-number-face
1562 '((((type tty) (class color)) (:foreground "cyan" :weight bold))
1563 (((class grayscale) (background light)) (:foreground "LightGray" :bold t))
1564 (((class grayscale) (background dark)) (:foreground "DimGray" :bold t))
1565 (((class color) (background light)) (:foreground "Purple"))
1566 (((class color) (background dark)) (:foreground "Cyan"))
1567 (t (:bold t)))
1568 "Face for highlighting the current message in MH-Folder buffers."
1569 :group 'mh-folder-faces)
1570
1571 (defvar mh-folder-date-face 'mh-folder-date-face
1572 "Face for highlighting the date in MH-Folder buffers.")
1573 (defface mh-folder-date-face
1574 '((((class color) (background light))
1575 (:foreground "snow4"))
1576 (((class color) (background dark))
1577 (:foreground "snow3"))
1578 (t
1579 (:bold t)))
1580 "Face for highlighting the date in MH-Folder buffers."
1581 :group 'mh-folder-faces)
1582
1583 (defvar mh-folder-followup-face 'mh-folder-followup-face
1584 "Face for highlighting Re: (followup) subject text in MH-Folder buffers.")
1585 (defface mh-folder-followup-face
1586 '((((class color) (background light))
1587 (:foreground "blue3"))
1588 (((class color) (background dark))
1589 (:foreground "LightGoldenRod"))
1590 (t
1591 (:bold t)))
1592 "Face for highlighting Re: (followup) subject text in MH-Folder buffers."
1593 :group 'mh-folder-faces)
1594
1595 (defvar mh-folder-msg-number-face 'mh-folder-msg-number-face
1596 "Face for highlighting the message number in MH-Folder buffers.")
1597 (defface mh-folder-msg-number-face
1598 '((((class color) (background light))
1599 (:foreground "snow4"))
1600 (((class color) (background dark))
1601 (:foreground "snow3"))
1602 (t
1603 (:bold t)))
1604 "Face for highlighting the message number in MH-Folder buffers."
1605 :group 'mh-folder-faces)
1606
1607 (defvar mh-folder-deleted-face 'mh-folder-deleted-face
1608 "Face for highlighting deleted messages in MH-Folder buffers.")
1609 (copy-face 'mh-folder-msg-number-face 'mh-folder-deleted-face)
1610
1611 (defvar mh-folder-refiled-face 'mh-folder-refiled-face
1612 "Face for highlighting refiled messages in MH-Folder buffers.")
1613 (defface mh-folder-refiled-face
1614 '((((type tty) (class color)) (:foreground "yellow" :weight light))
1615 (((class grayscale) (background light))
1616 (:foreground "Gray90" :bold t :italic t))
1617 (((class grayscale) (background dark))
1618 (:foreground "DimGray" :bold t :italic t))
1619 (((class color) (background light)) (:foreground "DarkGoldenrod"))
1620 (((class color) (background dark)) (:foreground "LightGoldenrod"))
1621 (t (:bold t :italic t)))
1622 "Face for highlighting refiled messages in MH-Folder buffers."
1623 :group 'mh-folder-faces)
1624
1625 (defvar mh-folder-subject-face 'mh-folder-subject-face
1626 "Face for highlighting subject text in MH-Folder buffers.")
1627 (if (boundp 'facemenu-unlisted-faces)
1628 (add-to-list 'facemenu-unlisted-faces "^mh-folder"))
1629 (defface mh-folder-subject-face
1630 '((((class color) (background light))
1631 (:foreground "blue4"))
1632 (((class color) (background dark))
1633 (:foreground "yellow"))
1634 (t
1635 (:bold t)))
1636 "Face for highlighting subject text in MH-Folder buffers."
1637 :group 'mh-folder-faces)
1638
1639 (defvar mh-folder-address-face 'mh-folder-address-face
1640 "Face for highlighting the address in MH-Folder buffers.")
1641 (copy-face 'mh-folder-subject-face 'mh-folder-address-face)
1642
1643 (defvar mh-folder-scan-format-face 'mh-folder-scan-format-face
1644 "Face for highlighting `mh-scan-format-regexp' matches in MH-Folder buffers.")
1645 (copy-face 'mh-folder-followup-face 'mh-folder-scan-format-face)
1646
1647 (defvar mh-folder-to-face 'mh-folder-to-face
1648 "Face for highlighting the To: string in MH-Folder buffers.")
1649 (defface mh-folder-to-face
1650 '((((type tty) (class color)) (:foreground "green"))
1651 (((class grayscale) (background light)) (:foreground "DimGray" :italic t))
1652 (((class grayscale) (background dark)) (:foreground "LightGray" :italic t))
1653 (((class color) (background light)) (:foreground "RosyBrown"))
1654 (((class color) (background dark)) (:foreground "LightSalmon"))
1655 (t (:italic t)))
1656 "Face for highlighting the To: string in MH-Folder buffers."
1657 :group 'mh-folder-faces)
1658
1659 ;;; Faces used in message display (:group mh-show-faces)
1660
1661 (defvar mh-show-cc-face 'mh-show-cc-face
1662 "Face for highlighting cc header fields.")
1663 (defface mh-show-cc-face
1664 '((((type tty) (class color)) (:foreground "yellow" :weight light))
1665 (((class grayscale) (background light))
1666 (:foreground "Gray90" :bold t :italic t))
1667 (((class grayscale) (background dark))
1668 (:foreground "DimGray" :bold t :italic t))
1669 (((class color) (background light)) (:foreground "DarkGoldenrod"))
1670 (((class color) (background dark)) (:foreground "LightGoldenrod"))
1671 (t (:bold t :italic t)))
1672 "Face for highlighting cc header fields."
1673 :group 'mh-show-faces)
1674
1675 (defvar mh-show-date-face 'mh-show-date-face
1676 "Face for highlighting the Date header field.")
1677 (defface mh-show-date-face
1678 '((((type tty) (class color)) (:foreground "green"))
1679 (((class grayscale) (background light)) (:foreground "Gray90" :bold t))
1680 (((class grayscale) (background dark)) (:foreground "DimGray" :bold t))
1681 (((class color) (background light)) (:foreground "ForestGreen"))
1682 (((class color) (background dark)) (:foreground "PaleGreen"))
1683 (t (:bold t :underline t)))
1684 "Face for highlighting the Date header field."
1685 :group 'mh-show-faces)
1686
1687 (defvar mh-show-header-face 'mh-show-header-face
1688 "Face used to deemphasize unspecified header fields.")
1689 (defface mh-show-header-face
1690 '((((type tty) (class color)) (:foreground "green"))
1691 (((class grayscale) (background light)) (:foreground "DimGray" :italic t))
1692 (((class grayscale) (background dark)) (:foreground "LightGray" :italic t))
1693 (((class color) (background light)) (:foreground "RosyBrown"))
1694 (((class color) (background dark)) (:foreground "LightSalmon"))
1695 (t (:italic t)))
1696 "Face used to deemphasize unspecified header fields."
1697 :group 'mh-show-faces)
1698
1699 (defvar mh-show-to-face 'mh-show-to-face
1700 "Face for highlighting the To: header field.")
1701 (if (boundp 'facemenu-unlisted-faces)
1702 (add-to-list 'facemenu-unlisted-faces "^mh-show"))
1703 (defface mh-show-to-face
1704 '((((class grayscale) (background light))
1705 (:foreground "DimGray" :underline t))
1706 (((class grayscale) (background dark))
1707 (:foreground "LightGray" :underline t))
1708 (((class color) (background light)) (:foreground "SaddleBrown"))
1709 (((class color) (background dark)) (:foreground "burlywood"))
1710 (t (:underline t)))
1711 "Face for highlighting the To: header field."
1712 :group 'mh-show-faces)
1713
1714 (defvar mh-show-from-face 'mh-show-from-face
1715 "Face for highlighting the From: header field.")
1716 (defface mh-show-from-face
1717 '((((class color) (background light))
1718 (:foreground "red3"))
1719 (((class color) (background dark))
1720 (:foreground "cyan"))
1721 (t
1722 (:bold t)))
1723 "Face for highlighting the From: header field."
1724 :group 'mh-show-faces)
1725
1726 (defvar mh-show-subject-face 'mh-show-subject-face
1727 "Face for highlighting the Subject header field.")
1728 (copy-face 'mh-folder-subject-face 'mh-show-subject-face)
1729
1730 ;;; Faces used in indexed searches (:group mh-index-faces)
1731
1732 (defvar mh-index-folder-face 'mh-index-folder-face
1733 "Face for highlighting folders in MH-Index buffers.")
1734 (defface mh-index-folder-face
1735 '((((class color) (background light))
1736 (:foreground "dark green" :bold t))
1737 (((class color) (background dark))
1738 (:foreground "indian red" :bold t))
1739 (t
1740 (:bold t)))
1741 "Face for highlighting folders in MH-Index buffers."
1742 :group 'mh-index-faces)
1743
1744 (provide 'mh-customize)
1745
1746 ;;; Local Variables:
1747 ;;; indent-tabs-mode: nil
1748 ;;; sentence-end-double-space: nil
1749 ;;; End:
1750
1751 ;;; mh-customize.el ends here