49120
|
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.18 2003/01/08 00:45:37 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
|
|
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
|
|
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
|
|
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
|