comparison lisp/vm/vm-vars.el @ 0:376386a54a3c r19-14

Import from CVS: tag r19-14
author cvs
date Mon, 13 Aug 2007 08:45:50 +0200
parents
children ac2d302a0011
comparison
equal deleted inserted replaced
-1:000000000000 0:376386a54a3c
1 ;;; VM user and internal variable initialization
2 ;;; Copyright (C) 1989, 1990, 1991, 1993, 1994, 1995 Kyle E. Jones
3 ;;;
4 ;;; This program is free software; you can redistribute it and/or modify
5 ;;; it under the terms of the GNU General Public License as published by
6 ;;; the Free Software Foundation; either version 1, or (at your option)
7 ;;; any later version.
8 ;;;
9 ;;; This program is distributed in the hope that it will be useful,
10 ;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
11 ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 ;;; GNU General Public License for more details.
13 ;;;
14 ;;; You should have received a copy of the GNU General Public License
15 ;;; along with this program; if not, write to the Free Software
16 ;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 (provide 'vm-vars)
19
20 (defvar vm-init-file "~/.vm"
21 "*Startup file for VM that is loaded the first time you run VM
22 in an Emacs session.")
23
24 (defvar vm-options-file "~/.vm.options"
25 "*Secondary startup file for VM, loaded after vm-init-file.
26 This file is written and overwritten by VM and is not meant for
27 users to edit directly. Use the Options menu to change what
28 appears in this file.")
29
30 (defvar vm-primary-inbox "~/INBOX"
31 "*Mail is moved from the system mailbox to this file for reading.")
32
33 (defvar vm-crash-box "~/INBOX.CRASH"
34 "*File in which to store mail temporarily while it is transferred from
35 the system mailbox to the primary inbox. If a crash occurs
36 during this mail transfer, any missing mail will be found in this
37 file. VM will do crash recovery from this file automatically at
38 startup, as necessary.")
39
40 (defvar vm-keep-crash-boxes nil
41 "*Non-nil value should be a string specifying a directory where
42 your crash boxes should be moved after VM has copied new mail
43 out of them. This is a safety measure. In at least one case a
44 pointer corruption bug inside Emacs has caused VM to believe that
45 it had copied information out of the crash box when it in fact
46 had not. VM then deleted the crash box, losing the batch of
47 incoming mail. This is an exceedingly rare problem, but if you
48 want to avoid losing mail if it happens, set vm-keep-crash-boxes
49 to point to a directory in the same filesystem as all your
50 crash boxes. Each saved crash box will have a unique name based
51 on the current date and time the box was saved. You will need to
52 clean out this directory from time to time; VM does not do so.
53
54 A nil value means VM should just delete crash boxes after it
55 has copied out the mail.")
56
57 ;; use this function to access vm-spool-files on the fly. this
58 ;; allows us to use environmental variables without setting
59 ;; vm-spool-files at load time and thereby making it hard to dump an
60 ;; Emacs containing a preloaded VM.
61 (defun vm-spool-files ()
62 (or vm-spool-files
63 (and (setq vm-spool-files (getenv "MAILPATH"))
64 (setq vm-spool-files
65 (vm-parse vm-spool-files
66 "\\([^:%?]+\\)\\([%?][^:]*\\)?\\(:\\|$\\)")))
67 (and (setq vm-spool-files (getenv "MAIL"))
68 (setq vm-spool-files (list vm-spool-files)))))
69
70 (defvar vm-spool-files nil
71 "*If non-nil this variable's value should be a list of strings
72 or a list of lists.
73
74 If the value is a list of strings, the strings should name files
75 that VM will check for incoming mail instead of the default place
76 VM thinks your system mailbox is. Mail will be moved from these
77 mailboxes to your primary inbox as specified by vm-primary-inbox,
78 using vm-crash-box as a waystation.
79
80 If the value is a list of lists, each sublist should be of the form
81
82 (INBOX SPOOLNAME CRASHBOX)
83
84 INBOX, SPOOLNAME and CRASHBOX are all strings.
85
86 INBOX is the folder where you want your new mail to be moved when
87 you type 'g' (running vm-get-new-mail) in VM. It is where you
88 will read the mail.
89
90 SPOOLNAME is where the mail system leaves your incoming mail,
91 e.g. /var/spool/mail/kyle. It can also be a POP maildrop,
92 provided it can be matched by the value of vm-recognize-pop-maildrops.
93
94 A POP maildrop specification has the following format:
95
96 \"HOST:PORT:AUTH:USER:PASSWORD\"
97
98 HOST is the host name of the POP server
99 PORT is the TCP port number to connect to (should normally be 110).
100 USER is the user name sent to the server.
101 PASSWORD is the secret shared by you and the server for
102 authentication purposes. How is it used depends on the value of
103 the AUTH parameter. If the PASSWORD is \"*\", VM will prompt
104 you for the password the first time you try to retrieve mail from
105 maildrop. If the password is valid, VM will not ask you for the
106 password again during this Emacs session.
107
108 AUTH is the authentication method used to convince the server you
109 should have access to the maildrop. Acceptable values are
110 \"pass\", \"rpop\" and \"apop\". For \"pass\", the PASSWORD is sent to
111 the server with the POP PASS command. For \"rpop\", the PASSWORD
112 should be the string to be sent to the server via the RPOP
113 command. In this case the string is not really a secret;
114 authentication is done by other means. For \"apop\", an MD5 digest
115 of the PASSWORD appended to the server timestamp will be sent to
116 the server with the APOP command. In order to use \"apop\" you
117 will have to set the value of vm-pop-md5-program appropriately to
118 point at the program that will generate the MD5 digest that VM
119 needs.
120
121 CRASHBOX is the temporary file that VM uses to store mail in
122 between the SPOOLNAME and the INBOX. If the system crashes or
123 Emacs dies while mail is being moved, and the new mail is not in
124 the SPOOLNAME or the INBOX, then it will be in the CRASHBOX.
125
126 There can be multiple entries with the same INBOX value, but a
127 particular SPOOLNAME should appear only once. CRASHBOXes should
128 not be shared among different INBOXes, but you can use the same
129 CRASHBOX/INBOX pair with a different SPOOLNAME.
130
131 NOTE: The values of vm-primary-inbox and vm-crash-box are ignored
132 when getting new mail if vm-spool-files is a list of lists.
133
134 vm-spool-files will default to the value of the shell
135 environmental variables MAILPATH or MAIL if either of these
136 variables are defined and no particular value for vm-spool-files
137 has been specified.")
138
139 (defvar vm-pop-md5-program "md5"
140 "*Program that reads a message on its standard input and writes an
141 MD5 digest on its output.")
142
143 (defvar vm-recognize-pop-maildrops "^[^:]+:[^:]+:[^:]+:[^:]+:[^:]+"
144 "*Value if non-nil should be a regular expression that matches
145 spool names found in vm-spool-files that should be considered POP
146 maildrops. A nil value tells VM that all the spool names are to
147 be considered files.")
148
149 (defvar vm-auto-get-new-mail t
150 "*Non-nil value causes VM to automatically move mail from spool files
151 to a mail folder when the folder is first visited. Nil means
152 you must always use vm-get-new-mail to pull in newly arrived messages.
153
154 If the value is a number, then it specifies how often (in
155 seconds) VM should check for new mail and try to retrieve it.
156 This is done asynchronously and may occur while you are editing
157 other files. It should not disturb your editing, except perhaps
158 for a pause while the work is being done. The `itimer' package
159 must be installed for this to work. Otherwise a numeric value is
160 the same as a value of t.")
161
162 (defvar vm-default-folder-type
163 (cond ((not (boundp 'system-configuration))
164 'From_)
165 ((or (string-match "-solaris" system-configuration)
166 (string-match "usg-unix-v" system-configuration)
167 (string-match "-ibm-aix" system-configuration))
168 'From_-with-Content-Length)
169 ((string-match "-sco" system-configuration)
170 'mmdf)
171 (t 'From_))
172 "*Default folder type for empty folders.
173 If VM has to add messages that have no specific folder type to an
174 empty folder, the folder will become this default type.
175 Allowed types are:
176
177 From_
178 From_-with-Content-Length
179 mmdf
180 babyl
181
182 Value must be a symbol, not a string. i.e. write
183
184 (setq vm-default-folder-type 'From_)
185
186 in your .emacs or .vm file.
187
188 If you set this variable's value to From_-with-Content-Length you
189 must set vm-trust-From_-with-Content-Length non-nil.")
190
191 (defvar vm-check-folder-types t
192 "*Non-nil value causes VM to check folder and message types for
193 compatibility before it performs certain operations.
194
195 Before saving a message to a folder, VM will check that the destination folder
196 is of the same type as the message to be saved.
197
198 Before incorporating message into a visited folder, VM will check that the
199 messages are of the same type as that folder.
200
201 A nil value means don't do the checks.
202
203 Depending on the value of vm-convert-folder-types VM will either
204 convert the messages to the appropriate type before saving or
205 incorporating them, or it will signal an error.")
206
207 (defvar vm-convert-folder-types t
208 "*Non-nil value means that when VM checks folder types and finds
209 a mismatch (see vm-check-folder-types), it will convert the
210 source messages to the type of the destination folder, if it can.
211
212 If vm-check-folder-types is nil, then this variable isn't
213 consulted.")
214
215 (defvar vm-trust-From_-with-Content-Length
216 (eq vm-default-folder-type 'From_-with-Content-Length)
217 "*Non-nil value means that if the first message in a folder contains
218 a Content-Length header and begins with \"From \" VM can safely
219 assume that all messages in the folder have Content-Length headers
220 that specify the length of the text section of each message. VM
221 will then use these headers to determine message boundaries
222 instead of the usual way of searching for two newlines followed by a
223 line that begins with \"From \".
224
225 If you set vm-default-folder-type to From_-with-Content-Length you
226 must set this variable non-nil.")
227
228 (defvar vm-visible-headers
229 '("Resent-"
230 "From:" "Sender:"
231 "To:" "Apparently-To:" "Cc:"
232 "Subject:"
233 "Date:")
234 "*List of headers that should be visible when VM first displays a message.
235 These should be listed in the order you wish them presented.
236 Regular expressions are allowed. There's no need to anchor
237 patterns with \"^\", as searches always start at the beginning of
238 a line. Put a colon at the end of patterns to get exact matches.
239 For example, \"Date\" matches \"Date\" and \"Date-Sent\". Header names
240 are always matched case insensitively.
241
242 If the value of vm-invisible-header-regexp is nil, only the
243 headers matched by vm-visible-headers will be displayed.
244 Otherwise all headers are displayed except those matched by
245 vm-invisible-header-regexp. In this case vm-visible-headers
246 specifies the order in which headers are displayed. Headers not
247 matching vm-visible-headers are display last.")
248
249 (defvar vm-invisible-header-regexp nil
250 "*Non-nil value should be a regular expression that tells what headers
251 VM should NOT normally display when presenting a message. All other
252 headers will be displayed. The variable vm-visible-headers specifies
253 the presentation order of headers; headers not matched by
254 vm-visible-headers are displayed last.
255
256 Nil value causes VM to display ONLY those headers specified in
257 vm-visible-headers.")
258
259 (defvar vm-highlighted-header-regexp nil
260 "*Value specifies which headers to highlight.
261 This is a regular expression that matches the names of headers that should
262 be highlighted when a message is first presented. For example setting
263 this variable to \"From:\\\\|Subject:\" causes the From and Subject
264 headers to be highlighted.
265
266 This does not work under version 18 Emacs.
267
268 If you're using XEmacs, you might want to use the builtin
269 `highlight-headers' package instead. If so, then you should set
270 the variable vm-use-lucid-highlighting non-nil. You'll need to
271 set the various variables used by the highlight-headers package
272 to customize highlighting. vm-highlighted-header-regexp is
273 ignored in this case.")
274
275 (defvar vm-use-lucid-highlighting
276 ;; (not (not ...)) to avoid the confusing value of 6.
277 (not (not (string-match "XEmacs" emacs-version)))
278 "*Non-nil means to use the `highlight-headers' package in XEmacs.
279 Nil means just use VM's builtin header highlighting code.
280
281 FSF Emacs always uses VM's builtin highlighting code.")
282
283 (defvar vm-highlighted-header-face 'bold
284 "*Face to be used to highlight headers.
285 This variable is ignored under Lucid Emacs.
286 See the documentation for the function `highlight-headers'
287 to find out how to customize header highlighting under Lucid Emacs.")
288
289 (defvar vm-preview-lines 0
290 "*Non-nil value N causes VM to display the visible headers + N lines of text
291 of a message when it is first presented. The message is not actually
292 flagged as read until it is exposed in its entirety.
293
294 A value of t causes VM to display as much of the message as will
295 fit in the window associated with the folder buffer.
296
297 A nil value causes VM not to preview messages; no text lines are hidden and
298 messages are immediately flagged as read.")
299
300 (defvar vm-preview-read-messages nil
301 "*Non-nil value means to preview messages even if they've already been read.
302 A nil value causes VM to preview messages only if new or unread.")
303
304 (defvar vm-auto-next-message t
305 "*Non-nil value causes VM to use vm-next-message to advance to the next
306 message in the folder if the user attempts to scroll past the end of the
307 current messages. A nil value disables this behavior.")
308
309 (defvar vm-honor-page-delimiters nil
310 "*Non-nil value causes VM to honor page delimiters (as specified by the
311 Emacs page-delimiter variable) when scrolling through a message.")
312
313 (defvar vm-default-window-configuration
314 ;; startup = full screan summary
315 ;; quitting = full screen folder
316 ;; reading-message = folder on bottom, summary on top
317 ;; composing-message = full screen composition
318 ;; editing-message = full screen edit
319 ;; vm-summarize = folder on bottom, summary on top
320 '(
321 (startup
322 ((((top . 70) (left . 70)))
323 (((- (0 0 80 10) (0 10 80 40))
324 ((nil summary) (nil message))
325 ((nil nil nil t) (nil nil nil nil))))))
326 (quitting
327 ((((top . 70) (left . 70)))
328 (((0 0 80 40)
329 ((nil message))
330 ((nil nil nil t))))))
331 (reading-message
332 ((((top . 70) (left . 70)))
333 (((- (0 0 80 10) (0 10 80 40))
334 ((nil summary) (nil message))
335 ((nil nil nil t) (nil nil nil nil))))))
336 (composing-message
337 ((((top . 70) (left . 70)))
338 (((0 0 80 40)
339 ((nil composition))
340 ((nil nil nil t))))))
341 (editing-message
342 ((((top . 70) (left . 70)))
343 (((0 0 80 40)
344 ((nil edit))
345 ((nil nil nil t))))))
346 (vm-summarize
347 ((((top . 70) (left . 70)))
348 (((- (0 0 80 10) (0 10 80 40))
349 ((nil summary) (nil message))
350 ((nil nil nil t) (nil nil nil nil))))))
351 )
352 "Default window configuration for VM if the user does not specify one.
353 If you want to completely turn off VM's window configuration
354 feature, set this variable and vm-window-configuration-file to
355 nil in your .vm file.
356
357 If you want to have a different window configuration setup than
358 this, you should not set this variable directly. Rather you
359 should set the variable vm-window-configuration-file to point at
360 a file, and use the command vm-save-window-configuration
361 (normally bound to `WS') to modify part of this configuration to
362 your liking.
363
364 WARNING: Don't point vm-window-configuration-file at your .vm or
365 .emacs file. Your window configuration file should start out as
366 an empty or nonexistent file. VM will repeatedly overwrite this
367 file as you update your window configuration settings, so
368 anything else you put into this file will go away.")
369
370 (defvar vm-window-configuration-file "~/.vm.windows"
371 "*Non-nil value should be a string that tells VM where to load
372 and save your window configuration settings. Your window
373 configuration settings are loaded automatically the first time
374 you run VM in an Emacs session, and tells VM how to set up
375 windows depending on what you are doing inside VM.
376
377 The commands vm-save-window-configuration (normally bound to `WS') and
378 vm-delete-window-configuration (bound to `WD') let you update this
379 information; see their documentation for more information.
380
381 You cannot change your window configuration setup without giving
382 vm-window-configuration-file a non-nil value. A nil value causes
383 VM to use the default window setup specified by the value of
384 vm-default-window-configuration.
385
386 WARNING: Don't point vm-window-configuration-file at your .vm or
387 .emacs file. Your window configuration file should start out as
388 an empty or nonexistent file. VM will repeatedly overwrite this
389 file as you update your window configuration settings, so
390 anything else you put into this file will go away.")
391
392 (defvar vm-confirm-quit 0
393 "*Value of t causes VM to always ask for confirmation before quitting
394 a VM visit of a folder. A nil value means VM will ask only when messages
395 will be lost unwittingly by quitting, i.e. not removed by intentional
396 delete and expunge. A value that is not nil and not t causes VM to ask
397 only when there are unsaved changes to message attributes, or when messages
398 will be unwittingly lost.")
399
400 (defvar vm-folder-directory nil
401 "*Directory where folders of mail are kept.")
402
403 (defvar vm-confirm-new-folders nil
404 "*Non-nil value causes interactive calls to vm-save-message
405 to ask for confirmation before creating a new folder.")
406
407 (defvar vm-delete-empty-folders t
408 "*Non-nil value means remove empty (zero length) folders after saving
409 A value of t means always remove the folders.
410 A value of nil means never remove empty folders.
411 A value that's not t or nil means ask before removing empty folders.")
412
413 (defvar vm-flush-interval t
414 "*Non-nil value specifies how often VM flushes its cached internal
415 data. A numeric value gives the number of seconds between
416 flushes. A value of t means flush every time there is a change.
417 Nil means don't do flushing until a message or folder is saved.
418
419 Normally when a message attribute is changed. VM keeps the record
420 of the change in its internal memory and doesn't insert the
421 changed data into the folder buffer until a particular message or
422 the whole folder is saved to disk. This makes normal Emacs
423 auto-saving useless for VM folder buffers because the information
424 you'd want to auto-save, i.e. the attribute changes, isn't in
425 the buffer when it is auto-saved.
426
427 Setting vm-flush-interval to a numeric value will cause the VM's
428 internal memory caches to be periodically flushed to the folder
429 buffer. This is done non-obtrusively, so that if you type
430 something while flushing is occurring, the flush will abort
431 cleanly and Emacs will respond to your keystrokes as usual.")
432
433 (defvar vm-visit-when-saving 0
434 "*Value determines whether VM will visit folders when saving messages.
435 `Visiting' means that VM will read the folder into Emacs and append the
436 message to the buffer instead of appending to the folder file directly.
437 This behavior is ideal when folders are encrypted or compressed since
438 appending plaintext directly to such folders is a ghastly mistake.
439
440 A value of t means VM will always visit folders when saving.
441
442 A nil value means VM will never visit folders before saving to them, and
443 VM will generate an error if you attempt to save messages to a folder
444 that is being visited. The latter restriction is necessary to insure
445 that the buffer and disk copies of the folder being visited remain
446 consistent.
447
448 A value that is not nil and not t means VM will save to a folder's
449 buffer if that folder is being visited, otherwise VM saves to the folder
450 file itself.")
451
452 (defvar vm-auto-folder-alist nil
453 "*Non-nil value should be an alist that VM will use to choose a default
454 folder name when messages are saved. The alist should be of the form
455 \((HEADER-NAME-REGEXP
456 (REGEXP . FOLDER-NAME) ...
457 ...))
458 where HEADER-NAME-REGEXP and REGEXP are strings, and FOLDER-NAME
459 is a string or an s-expression that evaluates to a string.
460
461 If any part of the contents of the message header whose name is
462 matched by HEADER-NAME-REGEXP is matched by the regular
463 expression REGEXP, VM will evaluate the corresponding FOLDER-NAME
464 and use the result as the default when prompting for a folder to
465 save the message in. If the resulting folder name is a relative
466 pathname, then it will be rooted in the directory named by
467 vm-folder-directory, or the default-directory of the currently
468 visited folder if vm-folder-directory is nil.
469
470 When FOLDER-NAME is evaluated, the current buffer will contain
471 only the contents of the header matched by HEADER-NAME-REGEXP.
472 It is safe to modify this buffer. You can use the match data
473 from any \\( ... \\) grouping constructs in REGEXP along with the
474 function buffer-substring to build a folder name based on the
475 header information. If the result of evaluating FOLDER-NAME is a
476 list, then the list will be treated as another auto-folder-alist
477 and will be descended recursively.
478
479 Whether REGEXP is matched case sensitively depends on the value
480 of the variable vm-auto-folder-case-fold-search. Header names
481 are always matched case insensitively.")
482
483 (defvar vm-auto-folder-case-fold-search nil
484 "*Non-nil value means VM will ignore case when matching header
485 contents while doing automatic folder selection via the variable
486 vm-auto-folder-alist.")
487
488 (defvar vm-virtual-folder-alist nil
489 "*Non-nil value should be a list of virtual folder definitions.
490
491 A virtual folder is a mapping of messages from one or more real folders
492 into what appears to be a single folder. A virtual folder definition
493 specifies which real folders should be searched for prospective messages
494 and what the inclusion criteria are.
495
496 Each virtual folder definition should have the following form:
497
498 (VIRTUAL-FOLDER-NAME
499 ( (FOLDER-NAME ...)
500 (SELECTOR [ARG ...]) ... )
501 ... )
502
503 VIRTUAL-FOLDER-NAME is the name of the virtual folder being defined.
504 This is the name by which you and VM will refer to this folder.
505
506 FOLDER-NAME should be the name of a real folder. There may be more than
507 one FOLDER-NAME listed, the SELECTORs within that sublist will apply to
508 them all. If FOLDER-NAME is a directory, VM will assume this to mean that
509 all the folders in that directory should be searched.
510
511 The SELECTOR is a Lisp symbol that tells VM how to decide whether a message
512 from one of the folders specified by the FOLDER-NAMEs should be included
513 in the virtual folder. Some SELECTORs require an argument ARG; unless
514 otherwise noted ARG may be omitted.
515
516 The recognized SELECTORs are:
517
518 author - matches message if ARG matches the author; ARG should be a
519 regular expression.
520 and - matches the message if all its argument
521 selectors match the message. Example:
522 (and (author \"Derek McGinty\") (new))
523 matches all new messages from Derek McGinty.
524 `and' takes any number of arguments.
525 any - matches any message.
526 deleted - matches message if it is flagged for deletion.
527 edited - matches message if it has been edited.
528 filed - matched message if it has been saved with its headers.
529 forwarded - matches message if it has been forwarded.
530 header - matches message if ARG matches any part of the header
531 portion of the message; ARG should be a
532 regular expression.
533 label - matches message if message has a label named ARG.
534 less-chars-than - matches message if message has less than ARG
535 characters. ARG should be a number.
536 less-lines-than - matches message if message has less than ARG
537 lines. ARG should be a number.
538 more-chars-than - matches message if message has more than ARG
539 characters. ARG should be a number.
540 more-lines-than - matches message if message has more than ARG
541 lines. ARG should be a number.
542 marked - matches message if it is marked, as with vm-mark-message.
543 new - matches message if it is new.
544 not - matches message only if its selector argument
545 does NOT match the message. Example:
546 (not (deleted))
547 matches messages that are not deleted.
548 or - matches the message if any of its argument
549 selectors match the message. Example:
550 (or (author \"Dave Weckl\") (subject \"drum\"))
551 matches messages from Dave Weckl or messages
552 with the word \"drum\" in their Subject header.
553 `or' takes any number of arguments.
554 read - matches message if it is neither new nor unread.
555 recipient - matches message if ARG matches any part of the recipient
556 list of the message. ARG should be a regular expression.
557 replied - matches message if it has been replied to.
558 sent-after - matches message if it was sent after the date ARG.
559 A fully specified date looks like this:
560 \"31 Dec 1999 23:59:59 GMT\"
561 although the parts can appear in any order.
562 You can leave out any part and it will
563 default to the current date's value for that
564 part, with the exception of the hh:mm:ss
565 part which defaults to midnight.
566 sent-before - matches message if it was sent before the date ARG.
567 A fully specified date looks like this:
568 \"31 Dec 1999 23:59:59 GMT\"
569 although the parts can appear in any order.
570 You can leave out any part and it will
571 default to the current date's value for that
572 part, with the exception of the hh:mm:ss
573 part which defaults to midnight.
574 subject - matches message if ARG matches any part of the message's
575 subject; ARG should be a regular expression.
576 text - matches message if ARG matches any part of the text
577 portion of the message; ARG should be a
578 regular expression.
579 unread - matches message if it is old but unread.
580 written - matches message if it has been saved without its headers.
581 ")
582
583 (defvar vm-virtual-mirror t
584 "*Non-nil value causes the attributes of messages in virtual folders
585 to mirror the changes in the attributes of the underlying real messages.
586 Similarly, changes in the attributes of virtual messages will change the
587 attributes of the underlying real messages. A nil value causes virtual
588 messages to have their own distinct set of attributes, apart from the
589 underlying real message.
590
591 This variable automatically becomes buffer-local when set in any
592 fashion. You should set this variable only in your .vm or .emacs
593 file. Use setq-default. Once VM has been started, you should not
594 set this variable directly, rather you should use the command
595 vm-toggle-virtual-mirror, normally bound to `V M'.")
596 (make-variable-buffer-local 'vm-virtual-mirror)
597
598 (defvar vm-folder-read-only nil
599 "*Non-nil value causes a folder to be considered unmodifiable by VM.
600 Commands that modify message attributes or messages themselves are disallowed.
601 Commands that add or delete messages from the folder are disallowed.
602 Commands that scan or allow the reading of messages are allowed but the
603 `new' and `unread' message flags are not changed by them.
604
605 This variable automatically becomes buffer-local when set in any
606 fashion. You should set this variable only in your .vm or .emacs
607 file. Use setq-default. Once VM has been started, you should not
608 set this variable directly, rather you should use the command
609 vm-toggle-read-only, normally bound to C-x C-q.")
610 (make-variable-buffer-local 'vm-folder-read-only)
611
612 (defvar vm-included-text-prefix " > "
613 "*String used to prefix included text in replies.")
614
615 (defvar vm-keep-sent-messages 1
616 "*Non-nil value N causes VM to keep the last N messages sent from within VM.
617 `Keep' means that VM will not kill the VM mail buffer after you send a message
618 with C-c C-c (vm-mail-send-and-exit). A value of 0 or nil causes VM never
619 to keep such buffers. A value of t causes VM never to kill such buffers.
620
621 Note that these buffers will vanish once you exit Emacs. To keep a permanent
622 record of your outgoing mail, use the mail-archive-file-name variable.")
623
624 (defvar vm-confirm-mail-send nil
625 "*Non-nil means ask before sending a mail message.
626 This affects vm-mail-send and vm-mail-send-and-exit in Mail mode.")
627
628 (defvar vm-mail-header-from nil
629 "*Non-nil value should be a string that will be appear as the body
630 of the From header in outbound mail messages. A nil value means don't
631 insert a From header. This variable also controls the inclusion and
632 format of the Resent-From header, when resending a message with
633 vm-resend-message.")
634
635 (defvar vm-reply-subject-prefix nil
636 "*Non-nil value should be a string that VM should add to the beginning
637 of the Subject header in replies, if the string is not already present.
638 Nil means don't prefix the Subject header.")
639
640 (defvar vm-reply-ignored-addresses nil
641 "*Non-nil value should be a list of regular expressions that match
642 addresses that VM should automatically remove from the recipient
643 headers of replies. These addresses are removed from the headers
644 before you are placed in the message composition buffer. So if
645 you see an address in the header you don't want you should remove
646 it yourself.
647
648 Case is ignored when matching the addresses.")
649
650 (defvar vm-reply-ignored-reply-tos nil
651 "*Non-nil value should be a list of regular expressions that match
652 addresses that, if VM finds in a message's Reply-To header, VM
653 should ignore the Reply-To header and not use it for replies. VM
654 will use the From header instead.
655
656 Case is ignored when matching the addresses.
657
658 This variable exists solely to provide a escape chute from
659 mailing lists that add a Reply-To: mailing list header, thereby
660 leaving no way to reply to just the author of a message.")
661
662 (defvar vm-in-reply-to-format "%i"
663 "*String which specifies the format of the contents of the In-Reply-To
664 header that is generated for replies. See the documentation for the
665 variable vm-summary-format for information on what this string may
666 contain. The format should *not* end with a newline.
667 Nil means don't put an In-Reply-To header in replies.")
668
669 (defvar vm-included-text-attribution-format "%F writes:\n"
670 "*String which specifies the format of the attribution that precedes the
671 included text from a message in a reply. See the documentation for the
672 variable vm-summary-format for information on what this string may contain.
673 Nil means don't attribute included text in replies.")
674
675 (defvar vm-included-text-headers nil
676 "*List of headers that should be retained in a message included in
677 a reply. These should be listed in the order you wish them to
678 appear in the included text. Regular expressions are allowed.
679 There's no need to anchor patterns with \"^\", as searches always
680 start at the beginning of a line. Put a colon at the end of
681 patterns to get exact matches. (E.g. \"Date\" matches \"Date\"
682 and \"Date-Sent\".) Header names are always matched case
683 insensitively.
684
685 If the value of vm-included-text-discard-header-regexp is nil,
686 the headers matched by vm-included-text-headers are the only
687 headers that will be retained.
688
689 If vm-included-text-discard-header-regexp is non-nil, then only
690 headers matched by that variable will be omitted; all others will
691 be included. vm-included-text-headers determines the header
692 order in that case, with headers not matching any in the
693 vm-included-text-headers list appearing last in the header
694 section of the included text.")
695
696 (defvar vm-included-text-discard-header-regexp nil
697 "*Non-nil value should be a regular expression header that tells
698 what headers should not be retained in a message included in a
699 reply. This variable along with vm-included-text-headers determines
700 which headers are retained.
701
702 If the value of vm-included-text-discard-header-regexp is nil,
703 the headers matched by vm-included-text-headers are the only headers
704 that will be retained.
705
706 If vm-included-text-discard-header-regexp is non-nil, then only
707 headers matched by this variable will not be retained; all
708 others will be included. vm-included-text-headers determines the
709 header order in that case, with headers not matching any in
710 the vm-included-text-headers list appearing last in the header
711 section of the included text.")
712
713 (defvar vm-forwarding-subject-format "forwarded message from %F"
714 "*String which specifies the format of the contents of the Subject
715 header that is generated for a forwarded message. See the documentation
716 for the variable vm-summary-format for information on what this string
717 may contain. The format should *not* end with nor contain a newline.
718 Nil means leave the Subject header empty when forwarding.")
719
720 (defvar vm-forwarded-headers nil
721 "*List of headers that should be forwarded by vm-forward-message.
722 These should be listed in the order you wish them to appear in
723 the forwarded message. Regular expressions are allowed.
724 There's no need to anchor patterns with \"^\", as searches always
725 start at the beginning of a line. Put a colon at the end of
726 patterns to get exact matches. (E.g. \"Date\" matches \"Date\"
727 and \"Date-Sent\".) Header names are always matched case
728 insensitively.
729
730 If the value of vm-unforwarded-header-regexp is nil, the headers
731 matched by vm-forwarded-headers are the only headers that will be
732 forwarded.
733
734 If vm-unforwarded-header-regexp is non-nil, then only headers
735 matched by that variable will be omitted; all others will be
736 forwarded. vm-forwarded-headers determines the forwarding order
737 in that case, with headers not matching any in the
738 vm-forwarded-headers list appearing last in the header section of
739 the forwarded message.")
740
741 (defvar vm-unforwarded-header-regexp "only-drop-this-header"
742 "*Non-nil value should be a regular expression header that tells
743 what headers should not be forwarded by vm-forward-message. This
744 variable along with vm-forwarded-headers determines which headers
745 are forwarded.
746
747 If the value of vm-unforwarded-header-regexp is nil, the headers
748 matched by vm-forwarded-headers are the only headers that will be
749 forwarded.
750
751 If vm-unforwarded-header-regexp is non-nil, then only headers
752 matched by this variable will not be forwarded; all others will
753 be forwarded. vm-forwarded-headers determines the forwarding
754 order in that case, with headers not matching any in the
755 vm-forwarded-headers list appearing last in the header section of
756 the forwarded message.")
757
758 (defvar vm-forwarding-digest-type "rfc934"
759 "*Non-nil value should be a string that specifies the type of
760 message encapsulation format to use when forwarding a message.
761 Legal values of this variable are:
762
763 \"rfc934\"
764 \"rfc1153\"
765 nil
766
767 A nil value means don't use a digest, just mark the beginning and
768 end of the forwarded message.")
769
770 (defvar vm-digest-preamble-format "\"%s\" (%F)"
771 "*String which specifies the format of the preamble lines generated by
772 vm-send-digest when it is invoked with a prefix argument. One
773 line will be generated for each message put into the digest. See the
774 documentation for the variable vm-summary-format for information
775 on what this string may contain. The format should *not* end
776 with nor contain a newline.")
777
778 (defvar vm-digest-center-preamble t
779 "*Non-nil value means VM will center the preamble lines that precede
780 the start of a digest. How the lines will be centered depends on the
781 ambient value of fill-column. A nil value suppresses centering.")
782
783 (defvar vm-digest-identifier-header-format "X-Digest: %s\n"
784 "*Header to insert into messages burst from a digest.
785 Value should be a format string of the same type as vm-summary-format that describes a header to be inserted into each message burst from a digest. The format string must end with a newline.")
786
787 (defvar vm-digest-burst-type "rfc934"
788 "*Value specifies the default digest type offered by vm-burst-digest
789 when it asks you what type of digest you want to unpack. Allowed
790 values of this variable are:
791
792 \"rfc934\"
793 \"rfc1153\"
794 \"guess\"
795
796 If the value is \"guess\", and you take the default
797 response when vm-burst-digest queries you, VM will try to guess
798 the digest type.")
799
800 (defvar vm-digest-send-type "rfc934"
801 "*String that specifies the type of digest vm-send-digest will use.
802 Legal values of this variable are:
803
804 \"rfc934\"
805 \"rfc1153\"
806
807 ")
808
809 (defvar vm-rfc934-digest-headers
810 '("Resent-"
811 "From:" "Sender:"
812 "To:" "Cc:"
813 "Subject:"
814 "Date:"
815 "Message-ID:"
816 "Keywords:")
817 "*List of headers that should be appear in RFC 934 digests
818 created by VM. These should be listed in the order you wish them
819 to appear in the digest. Regular expressions are allowed.
820 There's no need to anchor patterns with \"^\", as searches always
821 start at the beginning of a line. Put a colon at the end of
822 patterns to get exact matches. (E.g. \"Date\" matches \"Date\"
823 and \"Date-Sent\".) Header names are always matched case
824 insensitively.
825
826 If the value of vm-rfc934-digest-discard-header-regexp is nil, the headers
827 matched by vm-rfc934-digest-headers are the only headers that will be
828 kept.
829
830 If vm-rfc934-digest-discard-header-regexp is non-nil, then only
831 headers matched by that variable will be discarded; all others
832 will be kept. vm-rfc934-digest-headers determines the order of
833 appearance in that case, with headers not matching any in the
834 vm-rfc934-digest-headers list appearing last in the headers
835 of the digestified messages.")
836
837 (defvar vm-rfc934-digest-discard-header-regexp nil
838 "*Non-nil value should be a regular expression header that tells
839 what headers should not appear in RFC 934 digests created by VM. This
840 variable along with vm-rfc934-digest-headers determines which headers
841 are kept and which are discarded.
842
843 If the value of vm-rfc934-digest-discard-header-regexp is nil, the headers
844 matched by vm-rfc934-digest-headers are the only headers that will be
845 kept.
846
847 If vm-rfc934-digest-discard-header-regexp is non-nil, then only
848 headers matched by this variable will be discarded; all others
849 will be kept. vm-rfc934-digest-headers determines the order of
850 appearance in that case, with headers not matching any in the
851 vm-rfc934-digest-headers list appearing last in the headers
852 of the digestified messages.")
853
854 (defvar vm-rfc1153-digest-headers
855 '("Resent-"
856 "Date:"
857 "From:" "Sender:"
858 "To:" "Cc:"
859 "Subject:"
860 "Message-ID:"
861 "Keywords:")
862 "*List of headers that should be appear in RFC 1153 digests
863 created by VM. These should be listed in the order you wish them
864 to appear in the digest. Regular expressions are allowed.
865 There is no need to anchor patterns with \"^\", as searches always
866 start at the beginning of a line. Put a colon at the end of
867 patterns to get exact matches. (E.g. \"Date\" matches \"Date\"
868 and \"Date-Sent\".) Header names are always matched case
869 insensitively.
870
871 If the value of vm-rfc1153-digest-discard-header-regexp is nil, the headers
872 matched by vm-rfc1153-digest-headers are the only headers that will be
873 kept.
874
875 If vm-rfc1153-digest-discard-header-regexp is non-nil, then only
876 headers matched by that variable will be discarded; all others
877 will be kept. vm-rfc1153-digest-headers determines the order of
878 appearance in that case, with headers not matching any in the
879 vm-rfc1153-digest-headers list appearing last in the headers of
880 the digestified messages.")
881
882 (defvar vm-rfc1153-digest-discard-header-regexp "\\(X400-\\)?Received:"
883 "*Non-nil value should be a regular expression header that tells
884 what headers should not appear in RFC 1153 digests created by VM. This
885 variable along with vm-rfc1153-digest-headers determines which headers
886 are kept and which headers are discarded.
887
888 If the value of vm-rfc1153-digest-discard-header-regexp is nil, the headers
889 matched by vm-rfc1153-digest-headers are the only headers that will be
890 kept.
891
892 If vm-rfc1153-digest-discard-header-regexp is non-nil, then only
893 headers matched by this variable will be discarded; all others
894 will be kept. vm-rfc1153-digest-headers determines the order of
895 appearance in that case, with headers not matching any in the
896 vm-rfc1153-digest-headers list appearing last in the headers of
897 the digestified messages.")
898
899 (defvar vm-resend-bounced-headers
900 '("Resent-"
901 "From:" "Sender:" "Reply-To:"
902 "To:" "Cc:"
903 "Subject:"
904 "Newsgroups:"
905 "In-Reply-To:" "References:"
906 "Keywords:"
907 "X-")
908 "*List of headers that should be appear in messages resent with
909 vm-resend-bounced-message. These should be listed in the order you wish them
910 to appear in the message. Regular expressions are allowed.
911 There is no need to anchor patterns with \"^\", as searches always
912 start at the beginning of a line. Put a colon at the end of
913 patterns to get exact matches. (E.g. \"Date\" matches \"Date\"
914 and \"Date-Sent\".) Header names are always matched case
915 insensitively.
916
917 If the value of vm-resend-bounced-discard-header-regexp is nil, the headers
918 matched by vm-resend-bounced-headers are the only headers that will be
919 kept.
920
921 If vm-resend-bounced-discard-header-regexp is non-nil, then only
922 headers matched by that variable will be discarded; all others
923 will be kept. vm-resend-bounced-headers determines the order of
924 appearance in that case, with headers not matching any in the
925 vm-resend-bounced-headers list appearing last in the headers of
926 the message.")
927
928 (defvar vm-resend-bounced-discard-header-regexp nil
929 "*Non-nil value should be a regular expression that tells
930 what headers should not appear in a resent bounced message. This
931 variable along with vm-resend-bounced-headers determines which headers
932 are kept and which headers are discarded.
933
934 If the value of vm-resend-bounced-discard-header-regexp is nil,
935 the headers matched by vm-resend-bounced-headers are the only
936 headers that will be kept.
937
938 If vm-resend-bounced-discard-header-regexp is non-nil, then only
939 headers matched by this variable will be discarded; all others
940 will be kept. vm-resend-bounced-headers determines the order of
941 appearance in that case, with headers not matching any in the
942 vm-resend-bounced-headers list appearing last in the headers of
943 the message.")
944
945 (defvar vm-resend-headers nil
946 "*List of headers that should be appear in messages resent with
947 vm-resend-message. These should be listed in the order you wish them
948 to appear in the message. Regular expressions are allowed.
949 There is no need to anchor patterns with \"^\", as searches always
950 start at the beginning of a line. Put a colon at the end of
951 patterns to get exact matches. (E.g. \"Date\" matches \"Date\"
952 and \"Date-Sent\".) Header names are always matched case
953 insensitively.
954
955 If the value of vm-resend-discard-header-regexp is nil, the headers
956 matched by vm-resend-headers are the only headers that will be
957 kept.
958
959 If vm-resend-discard-header-regexp is non-nil, then only
960 headers matched by that variable will be discarded; all others
961 will be kept. vm-resend-headers determines the order of
962 appearance in that case, with headers not matching any in the
963 vm-resend-headers list appearing last in the headers of
964 the message.")
965
966 (defvar vm-resend-discard-header-regexp "\\(\\(X400-\\)?Received:\\|Resent-\\)"
967 "*Non-nil value should be a regular expression that tells
968 what headers should not appear in a resent message. This
969 variable along with vm-resend-bounced-headers determines which
970 headers are kept and which headers are discarded.
971
972 If the value of vm-resend-discard-header-regexp is nil,
973 the headers matched by vm-resend-headers are the only
974 headers that will be kept.
975
976 If vm-resend-discard-header-regexp is non-nil, then only
977 headers matched by this variable will be discarded; all others
978 will be kept. vm-resend-headers determines the order of
979 appearance in that case, with headers not matching any in the
980 vm-resend-headers list appearing last in the headers of
981 the message.")
982
983 (defvar vm-summary-format "%n %*%a %-17.17F %-3.3m %2d %4l/%-5c %I\"%s\"\n"
984 "*String which specifies the message summary line format.
985 The string may contain the printf-like `%' conversion specifiers which
986 substitute information about the message into the final summary line.
987
988 Recognized specifiers are:
989 a - attribute indicators (always four characters wide)
990 The first char is `D', `N', `U' or ` ' for deleted, new, unread
991 and read messages respectively.
992 The second char is `F', `W' or ` ' for filed (saved) or written
993 messages.
994 The third char is `R', `Z' or ` ' for messages replied to,
995 and forwarded messages.
996 The fourth char is `E' if the message has been edited, ` ' otherwise.
997 A - longer version of attributes indicators (seven characters wide)
998 The first char is `D', `N', `U' or ` ' for deleted, new, unread
999 and read messages respectively.
1000 The second is `r' or ` ', for message replied to.
1001 The third is `z' or ` ', for messages forwarded.
1002 The fourth is `b' or ` ', for messages redistributed.
1003 The fifth is `f' or ` ', for messages filed.
1004 The sixth is `w' or ` ', for messages written.
1005 The seventh is `e' or ` ', for messages that have been edited.
1006 c - number of characters in message (ignoring headers)
1007 d - numeric day of month message sent
1008 f - author's address
1009 F - author's full name (same as f if full name not found)
1010 h - hour:min:sec message sent
1011 H - hour:min message sent
1012 i - message ID
1013 I - thread indentation
1014 l - number of lines in message (ignoring headers)
1015 L - labels (as a comma list)
1016 m - month message sent
1017 M - numeric month message sent (January = 1)
1018 n - message number
1019 s - message subject
1020 t - addresses of the recipients of the message, in a comma-separated list
1021 T - full names of the recipients of the message, in a comma-separated list
1022 If a full name cannot be found, the corresponding address is used
1023 instead.
1024 U - user defined specifier. The next character in the format
1025 string should be a letter. VM will call the function
1026 vm-summary-function-<letter> (e.g. vm-summary-function-A for
1027 \"%UA\") in the folder buffer with the message being summarized
1028 bracketed by (point-min) and (point-max). The function
1029 will be passed a message struct as an argument.
1030 The function should return a string, which VM will insert into
1031 the summary as it would for information from any other summary
1032 specifier.
1033 w - day of the week message sent
1034 y - year message sent
1035 z - timezone of date when the message was sent
1036 * - `*' if the message is marked, ` ' otherwise
1037
1038 Use %% to get a single %.
1039
1040 A numeric field width may be given between the `%' and the specifier;
1041 this causes right justification of the substituted string. A negative field
1042 width causes left justification.
1043
1044 The field width may be followed by a `.' and a number specifying
1045 the maximum allowed length of the substituted string. If the
1046 string is longer than this value the right end of the string is
1047 truncated. If the value is negative, the string is truncated on
1048 on the left instead of the right.
1049
1050 The summary format need not be one line per message but it must end with
1051 a newline, otherwise the message pointer will not be displayed correctly
1052 in the summary window.")
1053
1054 (defvar vm-summary-arrow "->"
1055 "*String that is displayed to the left of the summary of the
1056 message VM consider to be the current message. The value takes
1057 effect when the summary buffer is created. Changing this
1058 variable's value has no effect on existing summary buffers.")
1059
1060 (defvar vm-summary-highlight-face 'bold
1061 "*Face to use to highlight the summary entry for the current message.
1062 Nil means don't highlight the current message's summary entry.")
1063
1064 (defvar vm-summary-show-threads nil
1065 "*Non-nil value means VM should display and maintain
1066 message thread trees in the summary buffer. This means that
1067 messages with a common ancestor will be displayed contiguously in
1068 the summary. (If you have vm-move-messages-physically set
1069 non-nil the folder itself will be reordered to match the thread
1070 ordering.) If you use the `%I' summary format specifier in your
1071 vm-summary-format, indentation will be provided as described in the
1072 documentation for vm-summary-thread-indent-level (which see).
1073
1074 A nil value means don't display thread information. The `%I'
1075 specifier does nothing in the summary format.
1076
1077 This variable automatically becomes buffer-local when set in any
1078 fashion. You should set this variable only in your .vm or .emacs
1079 file. Use setq-default. Once VM has been started, you should not
1080 set this variable directly, rather you should use the command
1081 vm-toggle-threads-display, normally bound to C-t.")
1082 (make-variable-buffer-local 'vm-summary-show-threads)
1083
1084 (defvar vm-summary-thread-indent-level 2
1085 "*Value should be a number that specifies how much
1086 indentation the '%I' summary format specifier should provide per
1087 thread level. A message's `thread level' refers to the number of
1088 direct ancestors from the message to the oldest ancestor the
1089 message has that is in the current folder. For example, the
1090 first message of a thread is generally a message about a new
1091 topic, e.g. a message that is not a reply to some other message.
1092 Therefore it has no ancestor and would cause %I to generate no
1093 indentation. A reply to this message will be indented by the value
1094 of vm-summary-thread-indent-level. A reply to that reply will be
1095 indented twice the value of vm-summary-thread-indent-level.")
1096
1097 (defvar vm-thread-using-subject t
1098 "*Non-nil value causes VM to use the Subject header to thread messages.
1099 Messages with the same subject will be grouped together.
1100
1101 A nil value means VM will disregard the Subject header when
1102 threading messages.")
1103
1104 (defvar vm-summary-uninteresting-senders nil
1105 "*Non-nil value should be a regular expression that matches
1106 addresses that you don't consider interesting enough to
1107 appear in the summary. When such senders would be displayed by
1108 the %F or %f summary format specifiers VM will substitute the
1109 value of vm-summary-uninteresting-senders-arrow (default \"To:
1110 \") followed by what would be shown by the %T and %t specifiers
1111 respectively.")
1112
1113 (defvar vm-summary-uninteresting-senders-arrow "To: "
1114 "*String to display before the string that is displayed instead of an
1115 \"uninteresting\" sender. See vm-summary-uninteresting-senders.")
1116
1117 (defvar vm-auto-center-summary nil
1118 "*Value controls whether VM will keep the summary arrow vertically
1119 centered within the summary window. A value of t causes VM to always
1120 keep arrow centered. A value of nil means VM will never bother centering
1121 the arrow. A value that is not nil and not t causes VM to center the
1122 arrow only if the summary window is not the only existing window.")
1123
1124 (defvar vm-summary-subject-no-newlines t
1125 "*Non-nil value means VM should replace newlines with spaces in the subject
1126 displayed in the summary.")
1127
1128 (defvar vm-subject-ignored-prefix "^\\(re: *\\)+"
1129 "*Non-nil value should be a regular expression that matches
1130 strings at the beginning of the Subject header that you want VM to ignore
1131 when threading, sorting, marking, and killing messages by subject.
1132
1133 Matches are done case-insensitively.")
1134
1135 (defvar vm-subject-ignored-suffix "\\( (fwd)\\| \\)+$"
1136 "*Non-nil value should be a regular expression that matches
1137 strings at the end of the Subject header that you want VM to ignore
1138 when threading, sorting, marking and killing messages by subject.
1139
1140 Matches are done case-insensitively.")
1141
1142 (defvar vm-mutable-windows pop-up-windows
1143 "*This variable's value controls VM's window usage.
1144
1145 A non-nil value gives VM free run of the Emacs display; it will commandeer
1146 the entire screen for its purposes.
1147
1148 A value of nil restricts VM's window usage to the window from which
1149 it was invoked. VM will not create, delete, or use any other windows,
1150 nor will it resize its own window.")
1151
1152 (defvar vm-mutable-frames nil
1153 "*Non-nil value means VM is allowed to create and destroy frames
1154 to display and undisplay buffers.
1155
1156 VM can create a frame to display a buffer, and delete frame to
1157 undisplay a buffer. A nil value means VM should not create or
1158 delete frames.
1159
1160 This variable is _not_ an analogue of vm-mutable-windows. VM
1161 still might create frames if this variable is nil. If you set
1162 the vm-frame-per-* variables VM will still create frames. Using
1163 the vm-frame-per-* variables you have more control over when it
1164 happens.
1165
1166 Users should consider setting vm-frame-per-folder and
1167 vm-frame-per-composition and/or using the -other-frame commands
1168 instead of setting this variable. If vm-mutable-frames is set to t,
1169 then vm-mutable-windows should probably be set to nil so that you
1170 avoid splitting frames.
1171
1172 This variable does not apply to the VM commands whose
1173 names end in -other-frame, which always create a new frame.
1174
1175 This variable has no meaning if you're not running Emacs native
1176 under X Windows or some other window system that allows multiple
1177 Emacs frames.")
1178
1179 (defvar vm-frame-per-folder t
1180 "*Non-nil value causes the folder visiting commands to visit in a new frame.
1181 Nil means the commands will use the current frame. This variable
1182 does not apply to the VM commands whose names end in
1183 -other-frame, which always create a new frame.
1184
1185 This variable has no meaning if you're not running Emacs native
1186 under X Windows or some other window system that allows multiple
1187 Emacs frames.")
1188
1189 (defvar vm-frame-per-summary nil
1190 "*Non-nil value causes VM to display the folder summary in its own frame.
1191 Nil means the vm-summarize command will use the current frame.
1192 This variable does not apply to vm-summarize-other-frame, which
1193 always create a new frame.
1194
1195 This variable has no meaning if you're not running Emacs native
1196 under X Windows or some other window system that allows multiple
1197 Emacs frames.")
1198
1199 (defvar vm-frame-per-composition t
1200 "*Non-nil value causes the mail composition commands to open a new frame.
1201 Nil means the commands will use the current frame. This variable
1202 does not apply to the VM commands whose names end in
1203 -other-frame, which always create a new frame.
1204
1205 This variable has no meaning if you're not running Emacs native
1206 under X Windows or some other window system that allows multiple
1207 Emacs frames.")
1208
1209 (defvar vm-frame-per-edit t
1210 "*Non-nil value causes vm-edit-message to open a new frame.
1211 Nil means the vm-edit-message will use the current frame. This
1212 variable does not apply to vm-edit-message-other-frame, which
1213 always create a new frame.
1214
1215 This variable has no meaning if you're not running Emacs native
1216 under X Windows or some other window system that allows multiple
1217 Emacs frames.")
1218
1219 ;; #### Chuck, I know you don't like external package mods but
1220 ;; this one is an absolute travesty, and VM has a simply
1221 ;; abominable time between releases. If you don't at least give
1222 ;; the VM frames a special name, it makes it impossible for lots
1223 ;; of other things to work sensibly.
1224 (defvar vm-frame-parameter-alist
1225 (if (string-match "XEmacs" emacs-version)
1226 '((folder ((name . "VM")))))
1227 "*Non-nil value is an alist of types and lists of frame parameters.
1228 This list tells VM what frame parameters to associate with each
1229 new frame it creates of a specific type.
1230
1231 The alist should be of this form
1232
1233 ((SYMBOL PARAMLIST) (SYMBOL2 PARAMLIST2) ...)
1234
1235 SYMBOL must be one of `composition', `edit', `folder' or `summary'.
1236 It specifies the type of frame that the following PARAMLIST applies to.
1237
1238 `composition' specifies parameters for mail composition frames.
1239 `edit' specifies parameters for message edit frames
1240 (e.g. created by vm-edit-message-other-frame)
1241 `folder' specifies parameters for frames created by `vm' and the
1242 `vm-visit-' commands.
1243 `primary-folder' specifies parameters for the frame created by running
1244 `vm' without any arguments.
1245 `summary' specifies parameters for frames to display a summary buffer
1246 (e.g. created by vm-summarize-other-frame)
1247
1248 PARAMLIST is a list of pairs as described in the documentation for
1249 the function `make-frame'.
1250
1251 This variable has no effect on frames created as a result of
1252 having vm-mutable-frames set to non-nil.")
1253
1254 (defvar vm-search-other-frames t
1255 "*Non-nil means VM should search frames other than the selected frame
1256 when looking for a window that is already displaying a buffer that
1257 VM wants to display or undisplay.")
1258
1259 (defvar vm-use-toolbar
1260 '(next previous delete/undelete autofile file
1261 reply compose print visit quit nil help)
1262 "*Non-nil value causes VM to provide a toolbar interface.
1263 Value should be a list of symbols that will determine which
1264 toolbar buttons will appears and in what order. Valid symbol
1265 value within the list are:
1266
1267 autofile
1268 compose
1269 delete/undelete
1270 file
1271 help
1272 next
1273 previous
1274 print
1275 quit
1276 reply
1277 visit
1278 nil
1279
1280 If nil appears in the list, it should appear exactly once. All
1281 buttons after nil in the list will be displayed flushright in
1282 top/bottom toolbars and flush bottom in left/right toolbars.
1283
1284 This variable only has meaning under XEmacs 19.12 and beyond.
1285 See also vm-toolbar-orientation to control where the toolbar is placed.")
1286
1287 (defvar vm-toolbar-orientation 'left
1288 "*Value is a symbol that specifies where the VM toolbar is located.
1289 Legal values are `left', `right' `top' and `bottom'. Any other
1290 value will be interpreted as `top'.
1291
1292 This variable only has meaning under XEmacs 19.12 and beyond.")
1293
1294 (defvar vm-toolbar-pixmap-directory
1295 (expand-file-name (concat data-directory "vm/"))
1296 "*Value specifies the directory VM should find its toolbar pixmaps.")
1297
1298 (defvar vm-use-menus '(folder motion send mark label sort
1299 virtual undo dispose emacs nil help)
1300 "*Non-nil value causes VM to provide a menu interface.
1301 A value that is a list causes VM to install its own menubar.
1302 A value of 1 causes VM to install a \"VM\" item in the Emacs menubar.
1303
1304 If the value of vm-use-menus is a list, it should be a list of
1305 symbols. The symbols and the order that they are listed
1306 determine what menus will be in the menubar and how they are
1307 ordered. Valid symbols values are:
1308
1309 dispose
1310 emacs
1311 folder
1312 help
1313 label
1314 mark
1315 motion
1316 send
1317 sort
1318 undo
1319 virtual
1320 nil
1321
1322 If nil appears in the list, it should appear exactly once. All
1323 menus after nil in the list will be displayed flushright in
1324 menubar.
1325
1326 This variable only has meaning in Emacs environments where menus
1327 are provided, which usually means Emacs has to be running under a
1328 window system.")
1329
1330 (defvar vm-warp-mouse-to-new-frame nil
1331 "*Non-nil value causes VM to move the mouse cursor into newly created frames.
1332 This is useful to give the new frame the focus under some window managers
1333 that randomly place newly created frames.
1334
1335 Nil means don't move the mouse cursor.")
1336
1337 ;; if browse-url is around (always will be in XEmacs 19.14) use it;
1338 ;; otherwise do our own support.
1339 (if (boundp 'browse-url-browser-function)
1340 (defvaralias 'vm-url-browser 'browse-url-browser-function)
1341 (defvar vm-url-browser
1342 (cond ((fboundp 'w3-fetch-other-frame)
1343 'w3-fetch-other-frame)
1344 ((fboundp 'w3-fetch)
1345 'w3-fetch)
1346 (t 'vm-mouse-send-url-to-netscape))
1347 "*Non-nil value means VM should enable URL passing.
1348 This means that VM will search for URLs (Universal Resource
1349 Locators) in messages and make it possible for you to pass them
1350 to a World Wide Web browser.
1351
1352 Clicking mouse-2 on the URL will send it to the browser.
1353
1354 Clicking mouse-3 on the URL will pop up a menu of browsers and
1355 you can pick which one you want to use.
1356
1357 Moving point to a character within the URL and pressing RETURN
1358 will send the URL to the browser (Only in XEmacs).
1359
1360 If the value of vm-url-browser is a string, it should specify
1361 name of an external browser to run. The URL will be passed to
1362 the program as its first argument.
1363
1364 If the value of vm-url-browser is a symbol, if should specifiy a
1365 Lisp function to call. The URL will be passed to the program as
1366 its first and only argument. Use
1367
1368 (setq vm-url-browser 'vm-mouse-send-url-to-netscape)
1369
1370 for Netscape, and
1371
1372 (setq vm-url-browser 'vm-mouse-send-url-to-mosaic)
1373
1374 for Mosaic. The advantage of using them is that they will display
1375 an URL using on existing Mosaic or Netscape process, if possible.
1376
1377 A nil value means VM should not enable URL passing to browsers."))
1378
1379 (defvar vm-highlight-url-face 'bold-italic
1380 "*Non-nil value should be a face to use display URLs found in messages.
1381 Nil means don't highlight URLs.")
1382
1383 (defvar vm-url-search-limit 12000
1384 "*Non-nil numeric value tells VM how hard to search for URLs.
1385 The number specifies the maximum message size in characters that
1386 VM will search for URLs. For message larger than this value, VM
1387 will search from the beginning of the mssage to a point
1388 vm-url-search-limit / 2 characters into the message. Then VM will
1389 search from a point vm-url-search-limit / 2 characters from the
1390 end of the message to the end of message.")
1391
1392 (defvar vm-display-xfaces nil
1393 "*Non-nil means display images as specifies in X-Face headers.
1394 This requires at least XEmacs 19.12 with native xface support compiled in.")
1395
1396 (defvar vm-startup-with-summary t
1397 "*Value tells VM whether to generate a summary when a folder is visited.
1398 Nil means don't automatically generate a summary.
1399
1400 A value of t means always generate a summary.
1401
1402 A positive numeric value N means only generate a summary if there
1403 are N or more messages.
1404
1405 A negative numeric value -N means only generate a summary if
1406 there are N or less messages.")
1407
1408 (defvar vm-follow-summary-cursor t
1409 "*Non-nil value causes VM to select the message under the cursor in the
1410 summary window before executing commands that operate on the current message.
1411 This occurs only when the summary buffer window is the selected window.")
1412
1413 (defvar vm-jump-to-new-messages t
1414 "*Non-nil value causes VM to jump to the first new message
1415 whenever such messages arrive in a folder or the first time a
1416 folder is visited.
1417
1418 See also vm-jump-to-unread-messages.")
1419
1420 (defvar vm-jump-to-unread-messages t
1421 "*Non-nil value causes VM to jump to the first unread message
1422 whenever such messages arrive in a folder or the first time a
1423 folder is visited. New messages are considered unread in this
1424 context so new messages will be jumped to as well.
1425
1426 The value of vm-jump-to-new-messages takes precedence over the
1427 setting of this variable. So if there are unread messages and
1428 new messages VM will jump to the first new message, even if an
1429 unread message appears before it in the folder, provided
1430 vm-jump-to-new-messages is non-nil.")
1431
1432 (defvar vm-skip-deleted-messages t
1433 "*Non-nil value causes VM's `n' and 'p' commands to skip over
1434 deleted messages. A value of t causes deleted messages to always be skipped.
1435 A value that is not nil and not t causes deleted messages to be skipped only
1436 if there are other messages that are not flagged for deletion in the desired
1437 direction of motion.")
1438
1439 (defvar vm-skip-read-messages nil
1440 "*Non-nil value causes VM's `n' and `p' commands to skip over
1441 messages that have already been read, in favor of new or unread messages.
1442 A value of t causes read messages to always be skipped. A value that is
1443 not nil and not t causes read messages to be skipped only if there are
1444 unread messages in the desired direction of motion.")
1445
1446 (defvar vm-move-after-deleting nil
1447 "*Non-nil value causes VM's `d' command to automatically invoke
1448 vm-next-message or vm-previous-message after deleting, to move
1449 past the deleted messages. A value of t means motion should
1450 honor the value of vm-circular-folders. A value that is not t
1451 and not nil means that motion should be done as if
1452 vm-circular-folders is set to nil.")
1453
1454 (defvar vm-move-after-undeleting nil
1455 "*Non-nil value causes VM's `u' command to automatically invoke
1456 vm-next-message or vm-previous-message after undeleting, to move
1457 past the undeleted messages. A value of t means motion should
1458 honor the value of vm-circular-folders. A value that is not t
1459 and not nil means that motion should be done as if
1460 vm-circular-folders is set to nil.")
1461
1462 (defvar vm-delete-after-saving nil
1463 "*Non-nil value causes VM automatically to mark messages for deletion
1464 after successfully saving them to a folder.")
1465
1466 (defvar vm-delete-after-archiving nil
1467 "*Non-nil value causes VM automatically to mark messages for deletion
1468 after successfully auto-archiving them with the vm-auto-archive-messages
1469 command.")
1470
1471 (defvar vm-delete-after-bursting nil
1472 "*Non-nil value causes VM automatically to mark a message for deletion
1473 after it has been successfully burst by the vm-burst-digest command.")
1474
1475 (defvar vm-circular-folders 0
1476 "*Value determines whether VM folders will be considered circular by
1477 various commands. `Circular' means VM will wrap from the end of the folder
1478 to the start and vice versa when moving the message pointer, or deleting,
1479 undeleting or saving messages before or after the current message.
1480
1481 A value of t causes all VM commands to consider folders circular.
1482
1483 A value of nil causes all of VM commands to signal an error if the start
1484 or end of the folder would have to be passed to complete the command.
1485 For movement commands, this occurs after the message pointer has been
1486 moved as far as possible in the specified direction. For other commands,
1487 the error occurs before any part of the command has been executed, i.e.
1488 no deletions, saves, etc. will be done unless they can be done in their
1489 entirety.
1490
1491 A value that is not nil and not t causes only VM's movement commands to
1492 consider folders circular. Saves, deletes and undelete commands will
1493 behave the same as if the value is nil.")
1494
1495 (defvar vm-search-using-regexps nil
1496 "*Non-nil value causes VM's search command to interpret user input as a
1497 regular expression instead of as a literal string.")
1498
1499 (defvar vm-move-messages-physically nil
1500 "*Non-nil value causes VM's commands that change the message order
1501 of a folder to always move the physical messages involved and not
1502 just change the presentation order. Nil means that commands just
1503 change the order in which VM displays messages and leave the
1504 folder itself undisturbed.")
1505
1506 (defvar vm-edit-message-mode 'text-mode
1507 "*Major mode to use when editing messages in VM.")
1508
1509 (defvar vm-print-command lpr-command
1510 "*Command VM uses to print messages.")
1511
1512 (defvar vm-print-command-switches lpr-switches
1513 "*Command line flags passed to the command named by vm-print-command.
1514 VM uses vm-print-command to print messages.")
1515
1516 (defvar vm-berkeley-mail-compatibility
1517 (memq system-type '(berkeley-unix netbsd))
1518 "*Non-nil means to read and write BSD Mail(1) style Status: headers.
1519 This makes sense if you plan to use VM to read mail archives created by
1520 Mail.")
1521
1522 (defvar vm-strip-reply-headers nil
1523 "*Non-nil value causes VM to strip away all comments and extraneous text
1524 from the headers generated in reply messages. If you use the \"fakemail\"
1525 program as distributed with Emacs, you probably want to set this variable to
1526 to t, because as of Emacs v18.52 \"fakemail\" could not handle unstripped
1527 headers.")
1528
1529 (defvar vm-inhibit-startup-message nil
1530 "*Non-nil causes VM not to display its copyright notice, disclaimers
1531 etc. when started in the usual way.")
1532
1533 (defvar vm-select-new-message-hook nil
1534 "*List of hook functions called every time a message with the 'new'
1535 attribute is made to be the current message. When the hooks are run the
1536 current buffer will be the folder containing the message and the
1537 start and end of the message will be bracketed by (point-min) and
1538 (point-max).")
1539
1540 (defvar vm-select-unread-message-hook nil
1541 "*List of hook functions called every time a message with the 'unread'
1542 attribute is made to be the current message. When the hooks are run the
1543 current buffer will be the folder containing the message and the
1544 start and end of the message will be bracketed by (point-min) and
1545 (point-max).")
1546
1547 (defvar vm-select-message-hook nil
1548 "*List of hook functions called every time a message
1549 is made to be the current message. When the hooks are run the
1550 current buffer will be the folder containing the message and the
1551 start and end of the message will be bracketed by (point-min) and
1552 (point-max).")
1553
1554 (defvar vm-arrived-message-hook nil
1555 "*List of hook functions called once for each message gathered from
1556 the system mail spool, or from another folder with
1557 vm-get-new-mail, or from a digest with vm-burst-digest. When the
1558 hooks are run the current buffer will be the folder containing
1559 the message and the start and end of the message will be
1560 bracketed by (point-min) and (point-max).")
1561
1562 (defvar vm-arrived-messages-hook nil
1563 "*List of hook functions called after VM has gathered a group of
1564 messages from the system mail spool, or from another folder with
1565 vm-get-new-mail, or from a digest with vm-burst-digest. When the
1566 hooks are run, the new messages will have already been added to
1567 the message list but may not yet appear in the summary. When the
1568 hooks are run the current buffer will be the folder containing
1569 the messages.")
1570
1571 (defvar vm-reply-hook nil
1572 "*List of hook functions to be run after a Mail mode
1573 composition buffer has been created for a reply. VM runs this
1574 hook and then runs vm-mail-mode-hook before leaving the user in
1575 the Mail mode buffer.")
1576
1577 (defvar vm-forward-message-hook nil
1578 "*List of hook functions to be run after a Mail mode
1579 composition buffer has been created to forward a message. VM
1580 runs this hook and then runs vm-mail-mode-hook before leaving the
1581 user in the Mail mode buffer.")
1582
1583 (defvar vm-resend-bounced-message-hook nil
1584 "*List of hook functions to be run after a Mail mode
1585 composition buffer has been created to resend a bounced message.
1586 VM runs this hook and then runs vm-mail-mode-hook before leaving
1587 the user in the Mail mode buffer.")
1588
1589 (defvar vm-resend-message-hook nil
1590 "*List of hook functions to be run after a Mail mode
1591 composition buffer has been created to resend a message.
1592 VM runs this hook and then runs vm-mail-mode-hook before leaving
1593 the user in the Mail mode buffer.")
1594
1595 (defvar vm-send-digest-hook nil
1596 "*List of hook functions to be run after a Mail mode
1597 composition buffer has been created to send a digest.
1598 VM runs this hook and then runs vm-mail-mode-hook before leaving
1599 the user in the Mail mode buffer.")
1600
1601 (defvar vm-mail-hook nil
1602 "*List of hook functions to be run after a Mail mode
1603 composition buffer has been created to send a non specialized
1604 message, i.e. a message that is not a reply, forward, digest,
1605 etc. VM runs this hook and then runs vm-mail-mode-hook before
1606 leaving the user in the Mail mode buffer.")
1607
1608 (defvar vm-summary-update-hook nil
1609 "*List of hook functions called just after VM updates an existing
1610 entry a folder summary.")
1611
1612 (defvar vm-summary-redo-hook nil
1613 "*List of hook functions called just after VM adds or deletes
1614 entries from a folder summary.")
1615
1616 (defvar vm-visit-folder-hook nil
1617 "*List of hook functions called just after VM visits a folder.
1618 It doesn't matter if the folder buffer already exists, this hook
1619 is run each time vm or vm-visit-folder is called interactively.
1620 It is NOT run after vm-mode is called.")
1621
1622 (defvar vm-retrieved-spooled-mail-hook nil
1623 "*List of hook functions called just after VM has retrieved
1624 a group of messages from your system mailbox(es). When these
1625 hooks are run, the messages have been added to the folder buffer
1626 but not the message list or summary. When the hooks are run, the
1627 current buffer will be the folder where the messages were
1628 incorporated.")
1629
1630 (defvar vm-edit-message-hook nil
1631 "*List of hook functions to be run just before a message is edited.
1632 This is the last thing vm-edit-message does before leaving the user
1633 in the edit buffer.")
1634
1635 (defvar vm-mail-mode-hook nil
1636 "*List of hook functions to be run after a Mail mode
1637 composition buffer has been created. This is the last thing VM
1638 does before leaving the user in the Mail mode buffer.")
1639
1640 (defvar vm-mode-hook nil
1641 "*List of hook functions to run when a buffer enters vm-mode.
1642 These hook functions should generally be used to set key bindings
1643 and local variables.")
1644
1645 (defvar vm-mode-hooks nil
1646 "*Old name for vm-mode-hook.
1647 Supported for backward compatibility.
1648 You should use the new name.")
1649
1650 (defvar vm-summary-mode-hook nil
1651 "*List of hook functions to run when a VM summary buffer is created.
1652 The current buffer will be that buffer when the hooks are run.")
1653
1654 (defvar vm-summary-mode-hooks nil
1655 "*Old name for vm-summary-mode-hook.
1656 Supported for backward compatibility.
1657 You should use the new name.")
1658
1659 (defvar vm-virtual-mode-hook nil
1660 "*List of hook functions to run when a VM virtual folder buffer is created.
1661 The current buffer will be that buffer when the hooks are run.")
1662
1663 (defvar vm-quit-hook nil
1664 "*List of hook functions to run when you quit VM.
1665 This applies to any VM quit command.")
1666
1667 (defvar vm-summary-pointer-update-hook nil
1668 "*List of hook functions to run when VM summary pointer is updated.
1669 When the hooks are run, the current buffer will be the summary buffer.")
1670
1671 (defvar vm-display-buffer-hook nil
1672 "*List of hook functions that are run every time VM wants to
1673 display a buffer. When the hooks are run the current buffer will
1674 be the buffer that VM wants to display. The hooks are expected
1675 to select a window and VM will display the buffer in that
1676 window.
1677
1678 If you use display hooks, you should not use VM's builtin window
1679 configuration system as the result is likely to be confusing.")
1680
1681 (defvar vm-undisplay-buffer-hook nil
1682 "*List of hook functions that are run every time VM wants to
1683 remove a buffer from the display. When the hooks are run the
1684 current buffer will be the buffer that VM wants to disappear.
1685 The hooks are expected to do the work of removing the buffer from
1686 the display. The hook functions should not kill the buffer.
1687
1688 If you use undisplay hooks, you should not use VM's builtin
1689 window configuration system as the result is likely to be
1690 confusing.")
1691
1692 (defvar vm-iconify-frame-hook nil
1693 "*List of hook functions that are run whenever VM iconifies a frame.")
1694
1695 (defvar vm-menu-setup-hook nil
1696 "*List of hook function that are run just after all menus are initialized.")
1697
1698 (defvar mail-yank-hooks nil
1699 "Hooks called after a message is yanked into a mail composition.
1700
1701 (This hook is deprecated, you should use mail-citation-hook instead.)
1702
1703 Value is a list of functions to be run.
1704 Each hook function can find the newly yanked message between point and mark.
1705 Each hook function should return with point and mark around the yanked message.
1706
1707 See the documentation for vm-yank-message to see when VM will run
1708 these hooks.")
1709
1710 (defvar mail-citation-hook nil
1711 "*Hook for modifying a citation just inserted in the mail buffer.
1712 Each hook function can find the citation between (point) and (mark t).
1713 And each hook function should leave point and mark around the citation
1714 text as modified.
1715
1716 If this hook is entirely empty (nil), a default action is taken
1717 instead of no action.")
1718
1719 (defvar mail-default-headers nil
1720 "*A string containing header lines, to be inserted in outgoing messages.
1721 It is inserted before you edit the message,
1722 so you can edit or delete these lines.")
1723
1724 (defvar mail-signature nil
1725 "*Text inserted at end of mail buffer when a message is initialized.
1726 If t, it means to insert the contents of the file `~/.signature'.")
1727
1728 (defvar vm-rename-current-buffer-function nil
1729 "*Non-nil value should be a function to call to rename a buffer.
1730 Value should be something that can be passed to `funcall'. If
1731 this variable is non-nil, VM will use this function instead of
1732 its own buffer renaming code. The buffer to be renamed will be
1733 the current buffer when the function is called.")
1734
1735 (defvar mode-popup-menu nil
1736 "The mode-specific popup menu. Automatically buffer local.
1737 By default, when you press mouse-3 in VM, this menu is popped up.")
1738 (make-variable-buffer-local 'mode-popup-menu)
1739
1740 (defvar vm-movemail-program "movemail"
1741 "*Name of program to use to move mail from the system spool
1742 to another location. Normally this should be the movemail program
1743 distributed with Emacs.")
1744
1745 (defvar vm-netscape-program "netscape"
1746 "*Name of program to use to run Netscape.
1747 vm-mouse-send-url-to-netscape uses this.")
1748
1749 (defvar vm-mosaic-program "Mosaic"
1750 "*Name of program to use to run Mosaic.
1751 vm-mouse-send-url-to-mosaic uses this.")
1752
1753 (defvar vm-tale-is-an-idiot nil
1754 "*Non-nil value causes vm-mail-send to check multi-line recipient
1755 headers of outbound mail for lines that don't end with a
1756 comma. If such a line is found, an error is signaled and the
1757 mail is not sent.")
1758
1759 (defvar vm-maintainer-address "bug-vm@uunet.uu.net"
1760 "Where to send VM bug reports.")
1761
1762 (defvar vm-mode-map
1763 (let ((map (make-sparse-keymap)))
1764 ;; unneeded now that VM buffers all have buffer-read-only == t.
1765 ;; (suppress-keymap map)
1766 (define-key map "h" 'vm-summarize)
1767 (define-key map "\M-n" 'vm-next-unread-message)
1768 (define-key map "\M-p" 'vm-previous-unread-message)
1769 (define-key map "n" 'vm-next-message)
1770 (define-key map "p" 'vm-previous-message)
1771 (define-key map "N" 'vm-next-message-no-skip)
1772 (define-key map "P" 'vm-previous-message-no-skip)
1773 (define-key map "\C-\M-n" 'vm-move-message-forward)
1774 (define-key map "\C-\M-p" 'vm-move-message-backward)
1775 (define-key map "\t" 'vm-goto-message-last-seen)
1776 (define-key map "\r" 'vm-goto-message)
1777 (define-key map "^" 'vm-goto-parent-message)
1778 (define-key map "t" 'vm-expose-hidden-headers)
1779 (define-key map " " 'vm-scroll-forward)
1780 (define-key map "b" 'vm-scroll-backward)
1781 (define-key map "\C-?" 'vm-scroll-backward)
1782 (define-key map "d" 'vm-delete-message)
1783 (define-key map "\C-d" 'vm-delete-message-backward)
1784 (define-key map "u" 'vm-undelete-message)
1785 (define-key map "U" 'vm-unread-message)
1786 (define-key map "e" 'vm-edit-message)
1787 (define-key map "a" 'vm-set-message-attributes)
1788 (define-key map "j" 'vm-discard-cached-data)
1789 (define-key map "k" 'vm-kill-subject)
1790 (define-key map "f" 'vm-followup)
1791 (define-key map "F" 'vm-followup-include-text)
1792 (define-key map "r" 'vm-reply)
1793 (define-key map "R" 'vm-reply-include-text)
1794 (define-key map "\M-r" 'vm-resend-bounced-message)
1795 (define-key map "B" 'vm-resend-message)
1796 (define-key map "z" 'vm-forward-message)
1797 (define-key map "c" 'vm-continue-composing-message)
1798 (define-key map "@" 'vm-send-digest)
1799 (define-key map "*" 'vm-burst-digest)
1800 (define-key map "m" 'vm-mail)
1801 (define-key map "g" 'vm-get-new-mail)
1802 (define-key map "G" 'vm-sort-messages)
1803 (define-key map "v" 'vm-visit-folder)
1804 (define-key map "s" 'vm-save-message)
1805 (define-key map "w" 'vm-save-message-sans-headers)
1806 (define-key map "A" 'vm-auto-archive-messages)
1807 (define-key map "S" 'vm-save-folder)
1808 (define-key map "|" 'vm-pipe-message-to-command)
1809 (define-key map "#" 'vm-expunge-folder)
1810 (define-key map "q" 'vm-quit)
1811 (define-key map "x" 'vm-quit-no-change)
1812 (define-key map "i" 'vm-iconify-frame)
1813 (define-key map "?" 'vm-help)
1814 (define-key map "\C-_" 'vm-undo)
1815 (define-key map "\C-xu" 'vm-undo)
1816 (define-key map "!" 'shell-command)
1817 (define-key map "<" 'vm-beginning-of-message)
1818 (define-key map ">" 'vm-end-of-message)
1819 (define-key map "\M-s" 'vm-isearch-forward)
1820 (define-key map "=" 'vm-summarize)
1821 (define-key map "L" 'vm-load-init-file)
1822 (define-key map "l" (make-sparse-keymap))
1823 (define-key map "la" 'vm-add-message-labels)
1824 (define-key map "ld" 'vm-delete-message-labels)
1825 (define-key map "V" (make-sparse-keymap))
1826 (define-key map "VV" 'vm-visit-virtual-folder)
1827 (define-key map "VC" 'vm-create-virtual-folder)
1828 (define-key map "VA" 'vm-apply-virtual-folder)
1829 (define-key map "VM" 'vm-toggle-virtual-mirror)
1830 (define-key map "V?" 'vm-virtual-help)
1831 (define-key map "M" (make-sparse-keymap))
1832 (define-key map "MN" 'vm-next-command-uses-marks)
1833 (define-key map "Mn" 'vm-next-command-uses-marks)
1834 (define-key map "MM" 'vm-mark-message)
1835 (define-key map "MU" 'vm-unmark-message)
1836 (define-key map "Mm" 'vm-mark-all-messages)
1837 (define-key map "Mu" 'vm-clear-all-marks)
1838 (define-key map "MC" 'vm-mark-matching-messages)
1839 (define-key map "Mc" 'vm-unmark-matching-messages)
1840 (define-key map "MT" 'vm-mark-thread-subtree)
1841 (define-key map "Mt" 'vm-unmark-thread-subtree)
1842 (define-key map "MS" 'vm-mark-messages-same-subject)
1843 (define-key map "Ms" 'vm-unmark-messages-same-subject)
1844 (define-key map "MA" 'vm-mark-messages-same-author)
1845 (define-key map "Ma" 'vm-unmark-messages-same-author)
1846 (define-key map "M?" 'vm-mark-help)
1847 (define-key map "W" (make-sparse-keymap))
1848 (define-key map "WW" 'vm-apply-window-configuration)
1849 (define-key map "WS" 'vm-save-window-configuration)
1850 (define-key map "WD" 'vm-delete-window-configuration)
1851 (define-key map "W?" 'vm-window-help)
1852 (define-key map "\C-t" 'vm-toggle-threads-display)
1853 (define-key map "\C-x\C-s" 'vm-save-buffer)
1854 (define-key map "\C-x\C-w" 'vm-write-file)
1855 (define-key map "\C-x\C-q" 'vm-toggle-read-only)
1856 (define-key map "%" 'vm-change-folder-type)
1857 (define-key map "\M-C" 'vm-show-copying-restrictions)
1858 (define-key map "\M-W" 'vm-show-no-warranty)
1859 ;; suppress-keymap provides these, but now that we don't use
1860 ;; suppress-keymap anymore...
1861 (define-key map "0" 'digit-argument)
1862 (define-key map "1" 'digit-argument)
1863 (define-key map "2" 'digit-argument)
1864 (define-key map "3" 'digit-argument)
1865 (define-key map "4" 'digit-argument)
1866 (define-key map "5" 'digit-argument)
1867 (define-key map "6" 'digit-argument)
1868 (define-key map "7" 'digit-argument)
1869 (define-key map "8" 'digit-argument)
1870 (define-key map "9" 'digit-argument)
1871 (define-key map "-" 'negative-argument)
1872 map )
1873 "Keymap for VM mode.")
1874
1875 (defvar vm-summary-mode-map vm-mode-map
1876 "Keymap for VM Summary mode")
1877
1878 (defvar vm-mail-mode-map
1879 (let ((map (make-sparse-keymap)))
1880 (define-key map "\C-c\C-v" vm-mode-map)
1881 (define-key map "\C-c\C-y" 'vm-yank-message)
1882 (define-key map "\C-c\C-s" 'vm-mail-send)
1883 (define-key map "\C-c\C-c" 'vm-mail-send-and-exit)
1884 (define-key map "\C-c\C-w" 'mail-signature)
1885 (define-key map "\C-c\C-t" 'mail-text)
1886 (define-key map "\C-c\C-q" 'mail-fill-yanked-message)
1887 (define-key map "\C-c\C-f\C-t" 'mail-to)
1888 (define-key map "\C-c\C-f\C-b" 'mail-bcc)
1889 (define-key map "\C-c\C-f\C-s" 'mail-subject)
1890 (define-key map "\C-c\C-f\C-c" 'mail-cc)
1891 (define-key map "\C-c\C-f\C-f" 'mail-fcc)
1892 map )
1893 "Keymap for VM Mail mode buffers.")
1894
1895 (defvar vm-edit-message-map
1896 (let ((map (make-sparse-keymap)))
1897 (define-key map "\C-c\C-v" vm-mode-map)
1898 (define-key map "\C-c\e" 'vm-edit-message-end)
1899 (define-key map "\C-c\C-c" 'vm-edit-message-end)
1900 (define-key map "\C-c\C-]" 'vm-edit-message-abort)
1901 map )
1902 "Keymap for the buffers created by VM's vm-edit-message command.")
1903
1904 (defvar vm-folder-history nil
1905 "List of folders visited this Emacs session.")
1906
1907 ;; internal vars
1908 (defvar vm-folder-type nil)
1909 (make-variable-buffer-local 'vm-folder-type)
1910 (defvar vm-message-list nil)
1911 (make-variable-buffer-local 'vm-message-list)
1912 (defvar vm-virtual-folder-definition nil)
1913 (make-variable-buffer-local 'vm-virtual-folder-definition)
1914 (defvar vm-virtual-buffers nil)
1915 (make-variable-buffer-local 'vm-virtual-buffers)
1916 (defvar vm-real-buffers nil)
1917 (make-variable-buffer-local 'vm-real-buffers)
1918 (defvar vm-message-pointer nil)
1919 (make-variable-buffer-local 'vm-message-pointer)
1920 (defvar vm-message-order-changed nil)
1921 (make-variable-buffer-local 'vm-message-order-changed)
1922 (defvar vm-message-order-header-present nil)
1923 (make-variable-buffer-local 'vm-message-order-header-present)
1924 (defvar vm-last-message-pointer nil)
1925 (make-variable-buffer-local 'vm-last-message-pointer)
1926 (defvar vm-mail-buffer nil)
1927 (make-variable-buffer-local 'vm-mail-buffer)
1928 (defvar vm-summary-buffer nil)
1929 (make-variable-buffer-local 'vm-summary-buffer)
1930 (defvar vm-summary-pointer nil)
1931 (make-variable-buffer-local 'vm-summary-pointer)
1932 (defvar vm-system-state nil)
1933 (make-variable-buffer-local 'vm-system-state)
1934 (defvar vm-undo-record-list nil)
1935 (make-variable-buffer-local 'vm-undo-record-list)
1936 (defvar vm-saved-undo-record-list nil)
1937 (make-variable-buffer-local 'vm-saved-undo-record-list)
1938 (defvar vm-undo-record-pointer nil)
1939 (make-variable-buffer-local 'vm-undo-record-pointer)
1940 (defvar vm-last-save-folder nil)
1941 (make-variable-buffer-local 'vm-last-save-folder)
1942 (defvar vm-last-written-file nil)
1943 (make-variable-buffer-local 'vm-last-written-file)
1944 (defvar vm-last-visit-folder nil)
1945 (defvar vm-last-pipe-command nil)
1946 (make-variable-buffer-local 'vm-last-pipe-command)
1947 (defvar vm-messages-not-on-disk 0)
1948 (make-variable-buffer-local 'vm-messages-not-on-disk)
1949 (defvar vm-totals nil)
1950 (make-variable-buffer-local 'vm-totals)
1951 (defvar vm-modification-counter 0)
1952 (make-variable-buffer-local 'vm-modification-counter)
1953 (defvar vm-flushed-modification-counter nil)
1954 (make-variable-buffer-local 'vm-flushed-modification-counter)
1955 (defvar vm-messages-needing-summary-update nil)
1956 (defvar vm-buffers-needing-display-update nil)
1957 (defvar vm-numbering-redo-start-point nil)
1958 (make-variable-buffer-local 'vm-numbering-redo-start-point)
1959 (defvar vm-numbering-redo-end-point nil)
1960 (make-variable-buffer-local 'vm-numbering-redo-end-point)
1961 (defvar vm-summary-redo-start-point nil)
1962 (make-variable-buffer-local 'vm-summary-redo-start-point)
1963 (defvar vm-need-summary-pointer-update nil)
1964 (make-variable-buffer-local 'vm-need-summary-pointer-update)
1965 (defvar vm-thread-obarray nil)
1966 (make-variable-buffer-local 'vm-thread-obarray)
1967 (defvar vm-thread-subject-obarray nil)
1968 (make-variable-buffer-local 'vm-thread-subject-obarray)
1969 (defvar vm-label-obarray nil)
1970 (make-variable-buffer-local 'vm-label-obarray)
1971 (defvar vm-block-new-mail nil)
1972 (make-variable-buffer-local 'vm-block-new-mail)
1973 (defvar vm-saved-buffer-modified-p nil)
1974 (make-variable-buffer-local 'vm-saved-buffer-modified-p)
1975 (defvar vm-kept-mail-buffers nil)
1976 (defvar vm-inhibit-write-file-hook nil)
1977 (defvar vm-chop-full-name-function 'vm-choose-chop-full-name-function)
1978 (defvar vm-session-beginning t)
1979 (defvar vm-init-file-loaded nil)
1980 (defvar vm-window-configurations nil)
1981 (defvar vm-window-configuration nil)
1982 (defvar vm-message-id-number 0)
1983 (defconst vm-spool-directory
1984 (or (and (boundp 'rmail-spool-directory) rmail-spool-directory)
1985 "/usr/spool/mail/"))
1986 (defconst vm-content-length-search-regexp "^Content-Length:.*\n\\|\\(\n\n\\)")
1987 (defconst vm-content-length-header "Content-Length:")
1988 (defconst vm-attributes-header-regexp
1989 "^X-VM-\\(Attributes\\|v5-Data\\):\\(.*\n\\([ \t].*\n\\)*\\)")
1990 (defconst vm-attributes-header "X-VM-v5-Data:")
1991 (defconst vm-message-order-header-regexp "^X-VM-Message-Order:")
1992 (defconst vm-message-order-header "X-VM-Message-Order:")
1993 (defconst vm-bookmark-header-regexp "^X-VM-Bookmark:")
1994 (defconst vm-bookmark-header "X-VM-Bookmark:")
1995 (defconst vm-summary-header-regexp "^X-VM-Summary-Format:")
1996 (defconst vm-summary-header "X-VM-Summary-Format:")
1997 (defconst vm-vheader-header-regexp "^X-VM-VHeader:")
1998 (defconst vm-vheader-header "X-VM-VHeader:")
1999 (defconst vm-labels-header-regexp "^X-VM-Labels:")
2000 (defconst vm-labels-header "X-VM-Labels:")
2001 (defconst vm-berkeley-mail-status-header "Status: ")
2002 (defconst vm-berkeley-mail-status-header-regexp "^Status: \\(..?\\)\n")
2003 (defvar vm-matched-header-vector (make-vector 6 nil))
2004 (defconst vm-supported-folder-types
2005 '("From_" "From_-with-Content-Length" "mmdf" "babyl"))
2006 (defconst vm-supported-window-configurations
2007 '(("default")
2008 ("startup")
2009 ("quitting")
2010 ("composing-message")
2011 ("editing-message")
2012 ("marking-message")
2013 ("reading-message")
2014 ("searching-message")
2015 ("vm-delete-message")
2016 ("vm-delete-message-backward")
2017 ("vm-undelete-message")
2018 ("vm-kill-subject")
2019 ("vm-expunge-folder")
2020 ("vm-burst-digest")
2021 ("vm-burst-rfc934-digest")
2022 ("vm-burst-rfc1153-digest")
2023 ("vm-edit-message")
2024 ("vm-discard-cached-data")
2025 ("vm-edit-message-end")
2026 ("vm-edit-message-abort")
2027 ("vm-unread-message")
2028 ("vm-quit-no-change")
2029 ("vm-quit")
2030 ("vm-save-buffer")
2031 ("vm-write-file")
2032 ("vm-save-folder")
2033 ("vm-save-and-expunge-folder")
2034 ("vm-visit-folder")
2035 ("vm-visit-folder-other-frame")
2036 ("vm-visit-folder-other-window")
2037 ("vm-help")
2038 ("vm-get-new-mail")
2039 ("vm-load-init-file")
2040 ("vm")
2041 ("vm-other-frame")
2042 ("vm-other-window")
2043 ("vm-toggle-read-only")
2044 ("vm-mode")
2045 ("vm-show-copying-restrictions")
2046 ("vm-show-no-warranty")
2047 ("vm-clear-all-marks")
2048 ("vm-mark-all-messages")
2049 ("vm-mark-message")
2050 ("vm-unmark-message")
2051 ("vm-mark-messages-same-subject")
2052 ("vm-unmark-messages-same-subject")
2053 ("vm-mark-messages-same-author")
2054 ("vm-unmark-messages-same-author")
2055 ("vm-mark-matching-messages")
2056 ("vm-unmark-matching-messages")
2057 ("vm-mark-thread-subtree")
2058 ("vm-unmark-thread-subtree")
2059 ("vm-next-command-uses-marks")
2060 ("vm-mark-help")
2061 ("vm-submit-bug-report")
2062 ("vm-goto-message")
2063 ("vm-goto-message-last-seen")
2064 ("vm-next-message")
2065 ("vm-previous-message")
2066 ("vm-next-message-no-skip")
2067 ("vm-previous-message-no-skip")
2068 ("vm-next-unread-message")
2069 ("vm-previous-unread-message")
2070 ("vm-scroll-forward")
2071 ("vm-scroll-backward")
2072 ("vm-expose-hidden-headers")
2073 ("vm-beginning-of-message")
2074 ("vm-end-of-message")
2075 ("vm-yank-message-other-folder")
2076 ("vm-yank-message")
2077 ("vm-mail-send-and-exit")
2078 ("vm-mail-send")
2079 ("vm-reply")
2080 ("vm-reply-include-text")
2081 ("vm-followup")
2082 ("vm-followup-include-text")
2083 ("vm-forward-message")
2084 ("vm-forward-message-all-headers")
2085 ("vm-mail")
2086 ("vm-resend-bounced-message")
2087 ("vm-resend-message")
2088 ("vm-send-digest")
2089 ("vm-send-rfc934-digest")
2090 ("vm-send-rfc1153-digest")
2091 ("vm-reply-other-frame")
2092 ("vm-reply-include-text-other-frame")
2093 ("vm-followup-other-frame")
2094 ("vm-followup-include-text-other-frame")
2095 ("vm-forward-message-other-frame")
2096 ("vm-forward-message-all-headers-other-frame")
2097 ("vm-mail-other-frame")
2098 ("vm-mail-other-window")
2099 ("vm-resend-bounced-message-other-frame")
2100 ("vm-resend-message-other-frame")
2101 ("vm-send-digest-other-frame")
2102 ("vm-send-rfc934-digest-other-frame")
2103 ("vm-send-rfc1153-digest-other-frame")
2104 ("vm-continue-composing-message")
2105 ("vm-auto-archive-messages")
2106 ("vm-save-message")
2107 ("vm-save-message-sans-headers")
2108 ("vm-pipe-message-to-command")
2109 ("vm-isearch-forward")
2110 ("vm-move-message-forward")
2111 ("vm-move-message-backward")
2112 ("vm-move-message-forward-physically")
2113 ("vm-move-message-backward-physically")
2114 ("vm-sort-messages")
2115 ("vm-toggle-threads-display")
2116 ("vm-summarize")
2117 ("vm-summarize-other-frame")
2118 ("vm-undo")
2119 ("vm-visit-virtual-folder")
2120 ("vm-visit-virtual-folder-other-frame")
2121 ("vm-visit-virtual-folder-other-window")))
2122 (defconst vm-supported-sort-keys
2123 '("date" "reversed-date"
2124 "author" "reversed-author"
2125 "subject" "reversed-subject"
2126 "recipients" "reversed-recipients"
2127 "line-count" "reversed-line-count"
2128 "byte-count" "reversed-byte-count"
2129 "physical-order" "reversed-physical-order"))
2130 (defconst vm-supported-interactive-virtual-selectors
2131 '(("any")
2132 ("header")
2133 ("label")
2134 ("text")
2135 ("recipient")
2136 ("author")
2137 ("subject")
2138 ("sent-before")
2139 ("sent-after")
2140 ("more-chars-than")
2141 ("less-chars-than")
2142 ("more-lines-than")
2143 ("less-lines-than")
2144 ("new")
2145 ("unread")
2146 ("read")
2147 ("deleted")
2148 ("replied")
2149 ("forwarded")
2150 ("filed")
2151 ("written")
2152 ("edited")
2153 ("marked")))
2154 (defconst vm-supported-attribute-names
2155 '("new"
2156 "unread"
2157 "read"
2158 "deleted"
2159 "replied"
2160 "forwarded"
2161 "redistributed"
2162 "filed"
2163 "written"
2164 "edited"
2165 "undeleted"
2166 "unreplied"
2167 "unforwarded"
2168 "unredistributed"
2169 "unfiled"
2170 "unwritten"
2171 "unedited"
2172 ;; for babyl cogniscenti
2173 "recent"
2174 "unseen"
2175 "answered"
2176 "unanswered"))
2177
2178 (defvar vm-key-functions nil)
2179 (defconst vm-digest-type-alist '(("rfc934") ("rfc1153")))
2180 (defvar vm-completion-auto-correct t
2181 "Non-nil means that minibuffer-complete-file should aggressively erase
2182 the trailing part of a word that caused completion to fail, and retry
2183 the completion with the resulting word.")
2184 (defvar vm-minibuffer-completion-table nil
2185 "Completion table used by vm-minibuffer-complete-word.
2186 Should be just a list of strings, not an alist or an obarray.")
2187 (defvar vm-completion-auto-space t
2188 "Non-nil value means that vm-minibuffer-complete-word should automatically
2189 append a space to words that complete unambiguously.")
2190 (defconst vm-attributes-vector-length 9)
2191 (defconst vm-cache-vector-length 20)
2192 (defconst vm-softdata-vector-length 16)
2193 (defconst vm-location-data-vector-length 6)
2194 (defconst vm-mirror-data-vector-length 5)
2195 (defconst vm-startup-message-lines
2196 '("Please use \\[vm-submit-bug-report] to report bugs."
2197 "You may give out copies of VM. Type \\[vm-show-copying-restrictions] to see the conditions"
2198 "VM comes with ABSOLUTELY NO WARRANTY; type \\[vm-show-no-warranty] for full details"
2199 "In Stereo (where available)"))
2200 (defconst vm-startup-message-displayed nil)
2201 ;; for the mode line
2202 (defvar vm-mode-line-format
2203 '("" " %&%& "
2204 ("VM: "
2205 (vm-folder-read-only "read-only ")
2206 (vm-virtual-folder-definition (vm-virtual-mirror "mirrored "))
2207 "%b"
2208 (vm-mail-buffer (vm-ml-sort-keys ("" " by " vm-ml-sort-keys)))
2209 (vm-message-list
2210 (" " vm-ml-message-number
2211 " (of " vm-ml-highest-message-number ")")
2212 (vm-folder-type
2213 " (unrecognized folder type)"
2214 " (no messages)")))
2215 (vm-message-list
2216 (" %[ " vm-ml-message-attributes-alist
2217 (vm-ml-labels ("; " vm-ml-labels)) " %] ")
2218 (" %[%] "))
2219 "%p" " " global-mode-string))
2220
2221 (defvar vm-ml-message-attributes-alist
2222 '((vm-ml-message-new
2223 "new"
2224 (vm-ml-message-unread
2225 "unread"
2226 (vm-ml-message-read "read")))
2227 (vm-ml-message-edited " edited")
2228 (vm-ml-message-filed " filed")
2229 (vm-ml-message-written " written")
2230 (vm-ml-message-replied " replied")
2231 (vm-ml-message-forwarded " forwarded")
2232 (vm-ml-message-redistributed " redistributed")
2233 (vm-ml-message-deleted " deleted")
2234 (vm-ml-message-marked " MARKED")))
2235 (defvar vm-ml-message-number nil)
2236 (make-variable-buffer-local 'vm-ml-message-number)
2237 (defvar vm-ml-highest-message-number nil)
2238 (make-variable-buffer-local 'vm-ml-highest-message-number)
2239 (defvar vm-ml-sort-keys nil)
2240 (make-variable-buffer-local 'vm-ml-sort-keys)
2241 (defvar vm-ml-labels nil)
2242 (make-variable-buffer-local 'vm-ml-labels)
2243 ; unused now
2244 ;(defvar vm-ml-attributes-string nil)
2245 ;(make-variable-buffer-local 'vm-ml-attributes-string)
2246 (defvar vm-ml-message-new nil)
2247 (make-variable-buffer-local 'vm-ml-message-new)
2248 (defvar vm-ml-message-unread nil)
2249 (make-variable-buffer-local 'vm-ml-message-unread)
2250 (defvar vm-ml-message-read nil)
2251 (make-variable-buffer-local 'vm-ml-message-read)
2252 (defvar vm-ml-message-edited nil)
2253 (make-variable-buffer-local 'vm-ml-message-edited)
2254 (defvar vm-ml-message-replied nil)
2255 (make-variable-buffer-local 'vm-ml-message-replied)
2256 (defvar vm-ml-message-forwarded nil)
2257 (make-variable-buffer-local 'vm-ml-message-forwarded)
2258 (defvar vm-ml-message-redistributed nil)
2259 (make-variable-buffer-local 'vm-ml-message-redistributed)
2260 (defvar vm-ml-message-deleted nil)
2261 (make-variable-buffer-local 'vm-ml-message-deleted)
2262 (defvar vm-ml-message-filed nil)
2263 (make-variable-buffer-local 'vm-ml-message-filed)
2264 (defvar vm-ml-message-written nil)
2265 (make-variable-buffer-local 'vm-ml-message-written)
2266 (defvar vm-ml-message-marked nil)
2267 (make-variable-buffer-local 'vm-ml-message-marked)
2268 ;; to make the tanjed compiler shut up
2269 (defvar vm-pop-read-point nil)
2270 (defvar vm-reply-list nil)
2271 (defvar vm-forward-list nil)
2272 (defvar vm-redistribute-list nil)
2273 (defvar current-itimer nil)
2274 (defvar mode-popup-menu nil)
2275 (defvar current-menubar nil)
2276 (defvar scrollbar-height nil)
2277 (defvar top-toolbar nil)
2278 (defvar top-toolbar-height nil)
2279 (defvar bottom-toolbar nil)
2280 (defvar bottom-toolbar-height nil)
2281 (defvar right-toolbar nil)
2282 (defvar right-toolbar-width nil)
2283 (defvar left-toolbar nil)
2284 (defvar left-toolbar-width nil)
2285 ;; this defvar matches the XEmacs one so it doesn't matter if VM
2286 ;; is loaded before highlight-headers.el
2287 (defvar highlight-headers-regexp "Subject[ \t]*:")
2288 (defvar vm-url-regexp
2289 "\\(file\\|ftp\\|gopher\\|http\\|https\\|news\\|wais\\|www\\)://[^ \t\n\f\r\"<>|()]*[^ \t\n\f\r\"<>|.!?(){}]"
2290 "Regular expression that matches an absolute URL.")
2291 (defconst vm-month-alist
2292 '(("jan" "January" "1")
2293 ("feb" "February" "2")
2294 ("mar" "March" "3")
2295 ("apr" "April" "4")
2296 ("may" "May" "5")
2297 ("jun" "June" "6")
2298 ("jul" "July" "7")
2299 ("aug" "August" "8")
2300 ("sep" "September" "9")
2301 ("oct" "October" "10")
2302 ("nov" "November" "11")
2303 ("dec" "December" "12")))
2304 (defvar vm-pop-passwords nil)
2305 (defvar pop-up-frames nil)
2306 (defvar vm-parse-date-workspace (make-vector 6 nil))
2307 ;; cache so we don't call timezone-make-date-sortable so much.
2308 ;; messages have their own cache; this is for the virtual folder
2309 ;; alist selectors.
2310 (defvar vm-sortable-date-alist nil)
2311 (defvar vm-summary-=> nil)
2312 (defvar vm-summary-no-=> nil)
2313 (defvar vm-summary-overlay nil)
2314 (make-variable-buffer-local 'vm-summary-overlay)
2315 (defvar vm-thread-loop-obarray (make-vector 29 0))
2316 (defvar vm-delete-duplicates-obarray (make-vector 29 0))
2317 (defvar vm-mail-mode-map-parented nil)
2318 (defvar vm-xface-cache (make-vector 29 0))