*** dist/README.dist Wed Nov 29 20:40:32 2000 --- README Fri Dec 1 13:31:59 2000 *************** *** 20,25 **** ! 3) If you're using XEmacs and you want toolbar support, make a ! directory called `vm' in the XEmacs `etc' directory. Copy ! the files in pixmaps directory into the directory you just ! created. VM will look for the pixmaps there by default. --- 20,26 ---- ! 3) If you're using XEmacs or Emacs 21 and you want toolbar ! support, make a directory called `vm' in the XEmacs `etc' ! directory. Copy the files in pixmaps directory into the ! directory you just created. VM will look for the pixmaps ! there by default. *************** *** 33,38 **** ! in your .emacs or .vm file. 4) If you built the Info document, copy the file vm.info* files ! into the Emacs' info. You may need to edit the "dir" file in that directory and add a menu entry for VM. It should look --- 34,41 ---- ! in your .emacs or .vm file. If you've set PIXMAPDIR, 'make ! install' will copy the files to that directory. 4) If you built the Info document, copy the file vm.info* files ! into the Emacs' info. ('make install' will do this for you if ! you've set INFODIR). You may need to edit the "dir" file in that directory and add a menu entry for VM. It should look *** dist/qp-encode.c.dist Tue Sep 5 12:19:39 2000 --- qp-encode.c Thu Nov 30 13:19:52 2000 *************** *** 38,40 **** } else if (c == ' ') { ! int nextc = getchar(); if (nextc != '\n' && nextc != EOF) { --- 38,41 ---- } else if (c == ' ') { ! int nextc; ! nextc = getchar(); if (nextc != '\n' && nextc != EOF) { *************** *** 58,60 **** } else if (c == '.' && cols == 0) { ! int nextc = getchar(); if (nextc == EOF || nextc == '\n') { --- 59,62 ---- } else if (c == '.' && cols == 0) { ! int nextc; ! nextc = getchar(); if (nextc == EOF || nextc == '\n') { *** dist/vm-delete.el.dist Wed Nov 29 20:40:32 2000 --- vm-delete.el Sun Dec 3 18:09:29 2000 *************** *** 154,162 **** "Delete duplicate messages in the current folder. ! This command works by computing an MD5 hash for each non-deleted ! message in the folder and deleting messages that have a hash that ! has already been seen. Messages that already deleted are never ! hashed, so VM will never delete the last copy of a message in a ! folder. 'Deleting' means flagging for deletion; you will have to ! expunge the messages with `vm-expunge-folder' to really get rid ! of them. as usual. --- 154,162 ---- "Delete duplicate messages in the current folder. ! This command works by computing an MD5 hash for the body ofeach ! non-deleted message in the folder and deleting messages that have ! a hash that has already been seen. Messages that already deleted ! are never hashed, so VM will never delete the last copy of a ! message in a folder. 'Deleting' means flagging for deletion; you ! will have to expunge the messages with `vm-expunge-folder' to ! really get rid of them, as usual. *** dist/vm-folder.el.dist Wed Nov 29 20:40:32 2000 --- vm-folder.el Sun Dec 10 13:29:21 2000 *************** *** 480,482 **** ! (defun vm-get-folder-type (&optional file start end) "Return a symbol indicating the folder type of the current buffer. --- 480,482 ---- ! (defun vm-get-folder-type (&optional file start end ignore-visited) "Return a symbol indicating the folder type of the current buffer. *************** *** 484,485 **** --- 484,486 ---- If optional arg FILE is present the type of FILE is returned instead. + If FILE is being visited, the type of the buffer is returned. If optional second and third arg START and END are provided, *************** *** 487,488 **** --- 488,491 ---- positions. START and END default to 1 and (buffer-size) + 1. + If IGNORED-VISITED is non-nil, even if FILE is being visited, its + buffer is ignored and the disk copy of FILE is examined. *************** *** 509,511 **** (let ((temp-buffer nil) ! b (case-fold-search nil)) --- 512,514 ---- (let ((temp-buffer nil) ! (b nil) (case-fold-search nil)) *************** *** 515,517 **** (progn ! (setq b (vm-get-file-buffer file)) (if b --- 518,521 ---- (progn ! (if (not ignore-visited) ! (setq b (vm-get-file-buffer file))) (if b *************** *** 2325,2326 **** --- 2329,2333 ---- + (defun vm-make-index-file-name () + (concat buffer-file-name vm-index-file-suffix)) + (defun vm-read-index-file-maybe () *************** *** 2330,2332 **** (throw 'done nil)) ! (let ((index-file (concat buffer-file-name vm-index-file-suffix))) (if (file-readable-p index-file) --- 2337,2339 ---- (throw 'done nil)) ! (let ((index-file (vm-make-index-file-name))) (if (file-readable-p index-file) *************** *** 2490,2492 **** (throw 'done nil)) ! (let ((index-file (concat buffer-file-name vm-index-file-suffix))) (vm-write-index-file index-file)))) --- 2497,2499 ---- (throw 'done nil)) ! (let ((index-file (vm-make-index-file-name))) (vm-write-index-file index-file)))) *************** *** 2649,2651 **** (if (stringp vm-index-file-suffix) ! (let ((index-file (concat buffer-file-name vm-index-file-suffix))) (vm-error-free-call 'delete-file index-file)))) --- 2656,2658 ---- (if (stringp vm-index-file-suffix) ! (let ((index-file (vm-make-index-file-name))) (vm-error-free-call 'delete-file index-file)))) *************** *** 2907,2919 **** ;; to avoid reentrance into the pop and imap code ! (not vm-block-new-mail) ! ;; Don't bother checking if we already know from ! ;; a previous check that there's mail waiting ! ;; and the user hasn't retrieved it yet. Not ! ;; completely accurate, but saves network ! ;; connection build and tear down which is slow ! ;; for some users. ! (not vm-spooled-mail-waiting)) (progn (setq oldval vm-spooled-mail-waiting) ! (vm-check-for-spooled-mail nil) (if (not (eq oldval vm-spooled-mail-waiting)) --- 2914,2919 ---- ;; to avoid reentrance into the pop and imap code ! (not vm-global-block-new-mail)) (progn (setq oldval vm-spooled-mail-waiting) ! (setq vm-spooled-mail-waiting (vm-check-for-spooled-mail nil t)) (if (not (eq oldval vm-spooled-mail-waiting)) *************** *** 2921,2925 **** (intern (buffer-name) vm-buffers-needing-display-update) - (vm-update-summary-and-mode-line) (run-hooks 'vm-spooled-mail-waiting-hook)))))) (setq b-list (cdr b-list))) ;; make the timer go away if we didn't encounter a vm-mode buffer. --- 2921,2925 ---- (intern (buffer-name) vm-buffers-needing-display-update) (run-hooks 'vm-spooled-mail-waiting-hook)))))) (setq b-list (cdr b-list))) + (vm-update-summary-and-mode-line) ;; make the timer go away if we didn't encounter a vm-mode buffer. *************** *** 2958,2960 **** buffer-file-name))) ! (not vm-block-new-mail) (not vm-folder-read-only) --- 2958,2960 ---- buffer-file-name))) ! (not vm-global-block-new-mail) (not vm-folder-read-only) *************** *** 3378,3404 **** ! (defun vm-compute-spool-files () (let ((fallback-triples nil) triples) - (cond ((and buffer-file-name - (consp vm-spool-file-suffixes) - (stringp vm-crash-box-suffix)) - (setq fallback-triples - (mapcar (function - (lambda (suffix) - (list buffer-file-name - (concat buffer-file-name suffix) - (concat buffer-file-name - vm-crash-box-suffix)))) - vm-spool-file-suffixes)))) - (cond ((and buffer-file-name - vm-make-spool-file-name vm-make-crash-box-name) - (setq fallback-triples - (nconc fallback-triples - (list (list buffer-file-name - (save-excursion - (funcall vm-make-spool-file-name - buffer-file-name)) - (save-excursion - (funcall vm-make-crash-box-name - buffer-file-name)))))))) (cond ((null (vm-spool-files)) --- 3378,3383 ---- ! (defun vm-compute-spool-files (&optional all) (let ((fallback-triples nil) + file file-list triples) (cond ((null (vm-spool-files)) *************** *** 3415,3416 **** --- 3394,3421 ---- (setq triples (vm-spool-files)))) + (setq file-list (if all (mapcar 'car triples) (list buffer-file-name))) + (while file-list + (setq file (car file-list)) + (setq file-list (cdr file-list)) + (cond ((and file + (consp vm-spool-file-suffixes) + (stringp vm-crash-box-suffix)) + (setq fallback-triples + (mapcar (function + (lambda (suffix) + (list file + (concat file suffix) + (concat file + vm-crash-box-suffix)))) + vm-spool-file-suffixes)))) + (cond ((and file + vm-make-spool-file-name vm-make-crash-box-name) + (setq fallback-triples + (nconc fallback-triples + (list (list file + (save-excursion + (funcall vm-make-spool-file-name + file)) + (save-excursion + (funcall vm-make-crash-box-name + file))))))))) (setq triples (append triples fallback-triples)) *************** *** 3426,3429 **** (funcall handler 'vm-spool-check-mail source) ! (and (not (equal 0 (nth 7 (file-attributes source)))) ! (file-readable-p source))))) --- 3431,3473 ---- (funcall handler 'vm-spool-check-mail source) ! (let ((size (nth 7 (file-attributes source))) ! (hash vm-spool-file-message-count-hash) ! val) ! (setq val (symbol-value (intern-soft source hash))) ! (if (and val (equal size (car val))) ! (> (nth 1 val) 0) ! (let ((count (vm-count-messages-in-file source))) ! (if (null count) ! nil ! (set (intern source hash) (list size count)) ! (vm-store-folder-totals source (list count 0 0 0)) ! (> count 0)))))))) ! ! (defun vm-count-messages-in-file (file) ! (let ((type (vm-get-folder-type file nil nil t)) ! (work-buffer nil) ! count) ! (if (or (memq type '(unknown nil)) (null vm-grep-program)) ! 0 ! (unwind-protect ! (let (regexp) ! (save-excursion ! (setq work-buffer (vm-make-work-buffer)) ! (set-buffer work-buffer) ! (cond ((memq type '(From_ BellFrom_ From_-with-Content-Length)) ! (setq regexp "^From ")) ! ((eq type 'mmdf) ! (setq regexp "^\001\001\001\001")) ! ((eq type 'babyl) ! (setq regexp "^\037"))) ! (call-process vm-grep-program nil t nil "-c" regexp ! (expand-file-name file)) ! (setq count (string-to-int (buffer-string))) ! (cond ((memq type '(From_ BellFrom_ From_-with-Content-Length)) ! t ) ! ((eq type 'mmdf) ! (setq count (/ count 2))) ! ((eq type 'babyl) ! (setq count (1- count)))) ! count )) ! (and work-buffer (kill-buffer work-buffer)))))) *************** *** 3432,3437 **** ! (defun vm-check-for-spooled-mail (&optional interactive) ! (if vm-block-new-mail nil ! (let ((triples (vm-compute-spool-files)) ;; since we could accept-process-output here (POP code), --- 3476,3481 ---- ! (defun vm-check-for-spooled-mail (&optional interactive this-buffer-only) ! (if vm-global-block-new-mail nil ! (let ((triples (vm-compute-spool-files (not this-buffer-only))) ;; since we could accept-process-output here (POP code), *************** *** 3439,3490 **** ;; before we finish. block these attempts. ! (vm-block-new-mail t) (vm-pop-ok-to-ask interactive) (vm-imap-ok-to-ask interactive) ! (done nil) ! crash in maildrop meth (mail-waiting nil)) ! ;; vm-block-new-mail is bound and it is a local variable. ! ;; Emacs 19 has a bug where if the current buffer changes ! ;; while such a variable is bound, the wrong buffers value ! ;; of the variable is restored. So we protect against ! ;; this. ! (save-excursion ! (while (and triples (not done)) ! (setq in (expand-file-name (nth 0 (car triples)) vm-folder-directory) ! maildrop (nth 1 (car triples)) ! crash (nth 2 (car triples))) ! (if (vm-movemail-specific-spool-file-p maildrop) ! ;; spool file is accessible only with movemail ! ;; so skip it. ! nil ! (if (eq (current-buffer) (vm-get-file-buffer in)) ! (progn ! (if (file-exists-p crash) ! (progn ! (setq mail-waiting t ! done t)) ! (cond ((and vm-recognize-imap-maildrops ! (string-match vm-recognize-imap-maildrops ! maildrop)) ! (setq meth 'vm-imap-check-mail)) ! ((and vm-recognize-pop-maildrops ! (string-match vm-recognize-pop-maildrops ! maildrop)) ! (setq meth 'vm-pop-check-mail)) ! (t (setq meth 'vm-spool-check-mail))) ! (if (not interactive) ! ;; allow no error to be signaled ! (condition-case nil ! (setq mail-waiting ! (or mail-waiting ! (funcall meth maildrop))) ! (error nil)) ! (setq mail-waiting ! (or mail-waiting ! (funcall meth maildrop)))) ! (if mail-waiting ! (setq done t)))))) ! (setq triples (cdr triples))) ! (setq vm-spooled-mail-waiting mail-waiting) ! mail-waiting )))) --- 3483,3524 ---- ;; before we finish. block these attempts. ! (vm-global-block-new-mail t) (vm-pop-ok-to-ask interactive) (vm-imap-ok-to-ask interactive) ! this-buffer crash in maildrop meth (mail-waiting nil)) ! (while triples ! (setq in (expand-file-name (nth 0 (car triples)) vm-folder-directory) ! maildrop (nth 1 (car triples)) ! crash (nth 2 (car triples))) ! (if (vm-movemail-specific-spool-file-p maildrop) ! ;; spool file is accessible only with movemail ! ;; so skip it. ! nil ! (setq this-buffer (eq (current-buffer) (vm-get-file-buffer in))) ! (if (or this-buffer (not this-buffer-only)) ! (progn ! (if (file-exists-p crash) ! (progn ! (setq mail-waiting t)) ! (cond ((and vm-recognize-imap-maildrops ! (string-match vm-recognize-imap-maildrops ! maildrop)) ! (setq meth 'vm-imap-check-mail)) ! ((and vm-recognize-pop-maildrops ! (string-match vm-recognize-pop-maildrops ! maildrop)) ! (setq meth 'vm-pop-check-mail)) ! (t (setq meth 'vm-spool-check-mail))) ! (if (not interactive) ! ;; allow no error to be signaled ! (condition-case nil ! (setq mail-waiting ! (or mail-waiting ! (funcall meth maildrop))) ! (error nil)) ! (setq mail-waiting ! (or mail-waiting ! (funcall meth maildrop)))))))) ! (setq triples (cdr triples))) ! mail-waiting ))) *************** *** 3493,3510 **** (error "Can't get new mail until you save this folder.")) ! (let ((triples (vm-compute-spool-files)) ! ;; since we could accept-process-output here (POP code), ! ;; a timer process might try to start retrieving mail ! ;; before we finish. block these attempts. ! (vm-block-new-mail t) ! (vm-pop-ok-to-ask interactive) ! (vm-imap-ok-to-ask interactive) ! non-file-maildrop crash in safe-maildrop maildrop popdrop ! retrieval-function ! (got-mail nil)) ! ;; vm-block-new-mail is bound and it is a local variable. ! ;; Emacs 19 has a bug where if the current buffer changes ! ;; while such a variable is bound, the wrong buffers value ! ;; of the variable is restored. So we protect against ! ;; this. ! (save-excursion (if (and (not (verify-visited-file-modtime (current-buffer))) --- 3527,3540 ---- (error "Can't get new mail until you save this folder.")) ! (if vm-global-block-new-mail ! nil ! (let ((triples (vm-compute-spool-files)) ! ;; since we could accept-process-output here (POP code), ! ;; a timer process might try to start retrieving mail ! ;; before we finish. block these attempts. ! (vm-global-block-new-mail t) ! (vm-pop-ok-to-ask interactive) ! (vm-imap-ok-to-ask interactive) ! non-file-maildrop crash in safe-maildrop maildrop popdrop ! retrieval-function ! (got-mail nil)) (if (and (not (verify-visited-file-modtime (current-buffer))) *************** *** 3585,3589 **** (funcall retrieval-function maildrop crash)) ! (if (vm-gobble-crash-box crash) (progn (setq got-mail t) (message "Got mail from %s." --- 3615,3621 ---- (funcall retrieval-function maildrop crash)) ! (if (vm-gobble-crash-box crash) (progn (setq got-mail t) + (if (not non-file-maildrop) + (vm-store-folder-totals maildrop '(0 0 0 0))) (message "Got mail from %s." *************** *** 3704,3706 **** gobble-order ! labels) (let ((tail-cons (vm-last vm-message-list)) --- 3736,3738 ---- gobble-order ! labels first-time) (let ((tail-cons (vm-last vm-message-list)) *************** *** 3763,3774 **** new-messages ! ;; tail-cons == nil means vm-message-list was empty. ! ;; Thus new-messages == vm-message-list. In this ! ;; case, run the hooks only if this is not the first ;; time vm-assimilate-new-messages has been called ! ;; in this folder. gobble-order non-nil is a good ! ;; indicator that this is the first time because the ! ;; order is gobbled only once per visit and always ! ;; the first time vm-assimilate-new-messages is ! ;; called. ! (or tail-cons (null gobble-order))) (let ((new-messages new-messages)) --- 3795,3800 ---- new-messages ! ;; Run the hooks only if this is not the first ;; time vm-assimilate-new-messages has been called ! ;; in this folder. ! (not first-time)) (let ((new-messages new-messages)) *** dist/vm-imap.el.dist Thu Nov 16 00:07:05 2000 --- vm-imap.el Fri Dec 8 22:48:24 2000 *************** *** 136,138 **** (vm-imap-send-command process ! (format "FETCH %d (RFC822.PEEK)" n)) (vm-imap-retrieve-to-crashbox process destination statblob) --- 136,138 ---- (vm-imap-send-command process ! (format "FETCH %d (BODY.PEEK[])" n)) (vm-imap-retrieve-to-crashbox process destination statblob) *************** *** 176,177 **** --- 176,178 ---- (imapdrop (vm-imapdrop-sans-password source)) + (count 0) msg-count uid-validity x response select mailbox source-list) *************** *** 193,195 **** (if (zerop msg-count) ! (throw 'end-of-session nil)) ;; sweep through the retrieval list, removing entries --- 194,198 ---- (if (zerop msg-count) ! (progn ! (vm-store-folder-totals source '(0 0 0 0)) ! (throw 'end-of-session nil))) ;; sweep through the retrieval list, removing entries *************** *** 207,209 **** ;; messages in the mailbox. ! (throw 'end-of-session nil) (while response --- 210,214 ---- ;; messages in the mailbox. ! (progn ! (vm-store-folder-totals source '(0 0 0 0)) ! (throw 'end-of-session nil)) (while response *************** *** 213,218 **** (eq (nth 2 x) 'uid))) ! (throw 'end-of-session t)) (setq response (cdr response)))) ! ;; all messages in the mailbox have already been retrieved ! (throw 'end-of-session nil)) (not (equal 0 (car select))))) --- 218,223 ---- (eq (nth 2 x) 'uid))) ! (vm-increment count)) (setq response (cdr response)))) ! (vm-store-folder-totals source (list count 0 0 0)) ! (throw 'done (not (eq count 0)))) (not (equal 0 (car select))))) *************** *** 234,236 **** (delete-count 0) ! (vm-block-new-mail t) (vm-imap-ok-to-ask t) --- 239,241 ---- (delete-count 0) ! (vm-global-block-new-mail t) (vm-imap-ok-to-ask t) *************** *** 488,490 **** ;;(vm-imap-read-ok-response process) ! (if (not keep-buffer) (kill-buffer (process-buffer process)) --- 493,495 ---- ;;(vm-imap-read-ok-response process) ! (if (and (not vm-imap-keep-trace-buffer) (not keep-buffer)) (kill-buffer (process-buffer process)) *************** *** 741,745 **** (setq list (cdr (nth 3 fetch-response))) ! (if (not (vm-imap-response-matches list 'RFC822 'string)) ! (vm-imap-protocol-error "expected (RFC822 string) in FETCH response")) ! (setq p (nth 1 list) start (nth 1 p)) --- 746,750 ---- (setq list (cdr (nth 3 fetch-response))) ! (if (not (vm-imap-response-matches list 'BODY '(vector) 'string)) ! (vm-imap-protocol-error "expected (BODY[] string) in FETCH response")) ! (setq p (nth 2 list) start (nth 1 p)) *************** *** 969,971 **** (setq token (list 'string start (1- curpoint)))))) ! ((looking-at "[\000-\040\177-\377]") (vm-imap-protocol-error "unexpected char (%d)" --- 974,978 ---- (setq token (list 'string start (1- curpoint)))))) ! ;; should be (looking-at "[\000-\040\177-\377]") ! ;; but Microsoft Exchange emits 8-bit chars. ! ((looking-at "[\000-\040\177]") (vm-imap-protocol-error "unexpected char (%d)" *************** *** 975,981 **** (curpoint (point)) ! ;; \376 instead of \377 because Emacs 19.34 ! ;; has a bug in the fastmap initialization ! ;; code that causes it to infloop ! (not-word-chars "^\000-\040\177-\376()[]{}") ! (not-word-regexp "[][\000-\040\177-\376(){}]")) (while (not done) --- 982,993 ---- (curpoint (point)) ! ;; We should be considering 8-bit chars as ! ;; non-word chars also but Microsoft Exchange ! ;; uses them, despite the RFC 2060 prohibition. ! ;; If we ever resume disallowing 8-bit chars, ! ;; remember to write the range as \177-\376 ... ! ;; \376 instead of \377 because Emacs 19.34 has ! ;; a bug in the fastmap initialization code ! ;; that causes it to infloop. ! (not-word-chars "^\000-\040\177()[]{}") ! (not-word-regexp "[][\000-\040\177(){}]")) (while (not done) *** dist/vm-menu.el.dist Tue Nov 14 21:42:27 2000 --- vm-menu.el Wed Dec 6 18:06:13 2000 *************** *** 428,429 **** --- 428,433 ---- t] + ["mMosaic" + (vm-mouse-send-url-at-position (point) + 'vm-mouse-send-url-to-mmosaic) + t] ["Netscape" *************** *** 708,709 **** --- 712,714 ---- (define-key map [rootmenu vm help] 'undefined) + (define-key map [rootmenu vm mule] 'undefined) ;; 19.29 changed the tag for the Help menu. *** dist/vm-mime.el.dist Wed Nov 29 20:40:32 2000 --- vm-mime.el Mon Dec 11 12:49:22 2000 *************** *** 150,152 **** ;; let the calling function know where the region ends ! ;; after encode-coding-region has the scrambled markers. (and (markerp b-end) --- 150,152 ---- ;; let the calling function know where the region ends ! ;; after encode-coding-region has scrambled the markers. (and (markerp b-end) *************** *** 177,179 **** ;; let the calling function know where the region ends ! ;; after decode-coding-region has the scrambled markers. (and (markerp b-end) --- 177,179 ---- ;; let the calling function know where the region ends ! ;; after decode-coding-region has scrambled the markers. (and (markerp b-end) *************** *** 1150,1175 **** (narrow-to-region beg end) ! (vm-with-multibyte-buffer ! (catch 'done ! (goto-char (point-min)) ! (if (or vm-xemacs-mule-p vm-fsfemacs-mule-p) ! (let ((charsets (delq 'ascii (vm-charsets-in-region ! (point-min) (point-max))))) ! (cond ((null charsets) ! "us-ascii") ! ((cdr charsets) ! (or (car (cdr ! (assq (vm-coding-system-name ! buffer-file-coding-system) ! vm-mime-mule-coding-to-charset-alist))) ! "iso-2022-jp")) ! (t ! (or (car (cdr ! (assoc ! (car charsets) ! vm-mime-mule-charset-to-charset-alist))) ! "unknown")))) ! (and (re-search-forward "[^\000-\177]" nil t) ! (throw 'done (or vm-mime-8bit-composition-charset ! "iso-8859-1"))) ! (throw 'done vm-mime-7bit-composition-charset))))))) --- 1150,1175 ---- (narrow-to-region beg end) ! (catch 'done ! (goto-char (point-min)) ! (if (or vm-xemacs-mule-p ! (and vm-fsfemacs-mule-p enable-multibyte-characters)) ! (let ((charsets (delq 'ascii (vm-charsets-in-region ! (point-min) (point-max))))) ! (cond ((null charsets) ! "us-ascii") ! ((cdr charsets) ! (or (car (cdr ! (assq (vm-coding-system-name ! buffer-file-coding-system) ! vm-mime-mule-coding-to-charset-alist))) ! "iso-2022-jp")) ! (t ! (or (car (cdr ! (assoc ! (car charsets) ! vm-mime-mule-charset-to-charset-alist))) ! "unknown")))) ! (and (re-search-forward "[^\000-\177]" nil t) ! (throw 'done (or vm-mime-8bit-composition-charset ! "iso-8859-1"))) ! (throw 'done vm-mime-7bit-composition-charset)))))) *************** *** 2625,2626 **** --- 2625,2627 ---- ;; for all + (vm-set-extent-property e 'vm-button t) (vm-set-extent-property e 'vm-mime-disposable disposable) *** dist/vm-mouse.el.dist Thu Nov 16 00:07:05 2000 --- vm-mouse.el Wed Dec 6 18:03:24 2000 *************** *** 217,252 **** (defun vm-mouse-send-url-to-mosaic (url &optional new-mosaic new-window) ! (message "Sending URL to Mosaic...") ! (if (null new-mosaic) ! (let ((pid-file "~/.mosaicpid") ! (work-buffer " *mosaic work*") ! (coding-system-for-read (vm-line-ending-coding-system)) ! (coding-system-for-write (vm-line-ending-coding-system)) ! pid) ! (cond ((file-exists-p pid-file) ! (set-buffer (get-buffer-create work-buffer)) ! (setq selective-display nil) ! (erase-buffer) ! (insert-file-contents pid-file) ! (setq pid (int-to-string (string-to-int (buffer-string)))) ! (erase-buffer) ! (insert (if new-window "newwin" "goto") ?\n) ! (insert url ?\n) ! ;; newline convention used should be the local ! ;; one, whatever that is. ! (setq buffer-file-type nil) ! (if (fboundp 'set-buffer-file-coding-system) ! (set-buffer-file-coding-system ! (vm-line-ending-coding-system) nil)) ! (write-region (point-min) (point-max) ! (concat "/tmp/Mosaic." pid) ! nil 0) ! (set-buffer-modified-p nil) ! (kill-buffer work-buffer))) ! (cond ((or (null pid) ! (not (equal 0 (vm-run-command "kill" "-USR1" pid)))) ! (setq new-mosaic t))))) ! (if new-mosaic ! (apply 'vm-run-background-command vm-mosaic-program ! (append vm-mosaic-program-switches (list url)))) ! (message "Sending URL to Mosaic... done")) --- 217,267 ---- (defun vm-mouse-send-url-to-mosaic (url &optional new-mosaic new-window) ! (vm-mouse-send-url-to-xxxx-mosaic 'mosaic url new-mosaic new-window)) ! ! (defun vm-mouse-send-url-to-mmosaic (url &optional new-mosaic new-window) ! (vm-mouse-send-url-to-xxxx-mosaic 'mmosaic url new-mosaic new-window)) ! ! (defun vm-mouse-send-url-to-xxxx-mosaic (m-type url &optional ! new-mosaic new-window) ! (let ((what (cond ((eq m-type 'mmosaic) "mMosaic") ! (t "Mosaic")))) ! (message "Sending URL to %s..." what) ! (if (null new-mosaic) ! (let ((pid-file (cond ((eq m-type 'mmosaic) ! "~/.mMosaic/.mosaicpid") ! (t "~/.mosaicpid"))) ! (work-buffer " *mosaic work*") ! (coding-system-for-read (vm-line-ending-coding-system)) ! (coding-system-for-write (vm-line-ending-coding-system)) ! pid) ! (cond ((file-exists-p pid-file) ! (set-buffer (get-buffer-create work-buffer)) ! (setq selective-display nil) ! (erase-buffer) ! (insert-file-contents pid-file) ! (setq pid (int-to-string (string-to-int (buffer-string)))) ! (erase-buffer) ! (insert (if new-window "newwin" "goto") ?\n) ! (insert url ?\n) ! ;; newline convention used should be the local ! ;; one, whatever that is. ! (setq buffer-file-type nil) ! (if (fboundp 'set-buffer-file-coding-system) ! (set-buffer-file-coding-system ! (vm-line-ending-coding-system) nil)) ! (write-region (point-min) (point-max) ! (concat "/tmp/Mosaic." pid) ! nil 0) ! (set-buffer-modified-p nil) ! (kill-buffer work-buffer))) ! (cond ((or (null pid) ! (not (equal 0 (vm-run-command "kill" "-USR1" pid)))) ! (setq new-mosaic t))))) ! (if new-mosaic ! (apply 'vm-run-background-command ! (cond ((eq m-type 'mmosaic) vm-mmosaic-program) ! (t vm-mosaic-program)) ! (append (cond ((eq m-type 'mmosaic) vm-mmosaic-program-switches) ! (t vm-mosaic-program-switches)) ! (list url)))) ! (message "Sending URL to %s... done" what))) *** dist/vm-page.el.dist Wed Nov 29 20:40:32 2000 --- vm-page.el Fri Dec 8 22:40:03 2000 *************** *** 222,236 **** (defun vm-emit-eom-blurb () ! (if (vm-full-name-of (car vm-message-pointer)) ! (progn ! (if (and (stringp vm-summary-uninteresting-senders) ! (string-match vm-summary-uninteresting-senders ! (vm-su-from (car vm-message-pointer)))) ! (message "End of message %s to %s" ! (vm-number-of (car vm-message-pointer)) ! (vm-su-to-names (car vm-message-pointer))) ! (message "End of message %s from %s" ! (vm-number-of (car vm-message-pointer)) ! (vm-full-name-of (car vm-message-pointer))))) ! (message "End of message %s" ! (vm-number-of (car vm-message-pointer))))) --- 222,230 ---- (defun vm-emit-eom-blurb () ! (message (if (and (stringp vm-summary-uninteresting-senders) ! (string-match vm-summary-uninteresting-senders ! (vm-su-from (car vm-message-pointer)))) ! "End of message %s to %s" ! "End of message %s from %s") ! (vm-number-of (car vm-message-pointer)) ! (vm-summary-sprintf "%F" (car vm-message-pointer)))) *************** *** 338,339 **** --- 332,334 ---- (vm-mouse-send-url-at-position (point))))) + (set-extent-property e 'vm-button t) (set-extent-property e 'keymap keymap) *************** *** 374,375 **** --- 369,371 ---- 'vm-menu-popup-url-browser-menu))) + (overlay-put o 'vm-button t) (overlay-put o 'mouse-face 'highlight) *************** *** 600,602 **** vm-preview-lines - (not (equal vm-preview-lines 0)) (if vm-mail-buffer --- 596,597 ---- *************** *** 917,924 **** (progn ! (if (or (vm-extent-property e 'keymap) ! (vm-extent-property e 'local-map)) (vm-decrement count)) ! (goto-char (funcall extent-end-position e))) ! (goto-char old-point) ! (error "No more buttons"))) ! (and e (goto-char (vm-extent-start-position e))))) --- 912,919 ---- (progn ! (if (vm-extent-property e 'vm-button) (vm-decrement count)) ! (goto-char (funcall extent-end-position e))))) ! (if e ! (goto-char (vm-extent-start-position e)) ! (goto-char old-point) ! (error "No more buttons")))) *** dist/vm-pop.el.dist Sun Nov 26 16:19:34 2000 --- vm-pop.el Sun Dec 3 16:33:16 2000 *************** *** 195,196 **** --- 195,197 ---- (popdrop (vm-popdrop-sans-password source)) + (count 0) x response) *************** *** 213,215 **** ;; messages in the mailbox. ! (throw 'done nil) (while response --- 214,218 ---- ;; messages in the mailbox. ! (progn ! (vm-store-folder-totals source '(0 0 0 0)) ! (throw 'done nil)) (while response *************** *** 218,223 **** (eq (nth 2 x) 'uidl))) ! (throw 'done t)) (setq response (cdr response)))) ! ;; all messages in the mailbox have already been retrieved ! (throw 'done nil)) (vm-pop-send-command process "STAT") --- 221,226 ---- (eq (nth 2 x) 'uidl))) ! (vm-increment count)) (setq response (cdr response)))) ! (vm-store-folder-totals source (list count 0 0 0)) ! (throw 'done (not (eq count 0)))) (vm-pop-send-command process "STAT") *************** *** 226,229 **** nil (not (equal 0 (car response)))))) ! (and process (vm-pop-end-session process))))) --- 229,233 ---- nil + (vm-store-folder-totals source (list (car response) 0 0 0)) (not (equal 0 (car response)))))) ! (and process (vm-pop-end-session process nil vm-pop-ok-to-ask))))) *************** *** 242,244 **** (delete-count 0) ! (vm-block-new-mail t) (vm-pop-ok-to-ask t) --- 246,248 ---- (delete-count 0) ! (vm-global-block-new-mail t) (vm-pop-ok-to-ask t) *************** *** 466,468 **** ! (defun vm-pop-end-session (process &optional keep-buffer) (save-excursion --- 470,472 ---- ! (defun vm-pop-end-session (process &optional keep-buffer verbose) (save-excursion *************** *** 479,483 **** (progn ! (message "Waiting for response to POP QUIT command...") (vm-pop-read-response process) ! (message "Waiting for response to POP QUIT command... done"))) (if (not keep-buffer) --- 483,489 ---- (progn ! (and verbose ! (message "Waiting for response to POP QUIT command...")) (vm-pop-read-response process) ! (and verbose ! (message "Waiting for response to POP QUIT command... done")))) (if (not keep-buffer) *** dist/vm-sort.el.dist Tue Sep 5 12:19:40 2000 --- vm-sort.el Thu Dec 7 08:42:50 2000 *************** *** 344,349 **** (if (and vm-summary-show-threads ! (not (equal key-funcs '(vm-sort-compare-thread))) (progn (setq vm-summary-show-threads nil) ! (vm-set-summary-redo-start-point t)))) (message "Sorting...") --- 344,349 ---- (if (and vm-summary-show-threads ! (not (equal key-funcs '(vm-sort-compare-thread)))) (progn (setq vm-summary-show-threads nil) ! (vm-set-summary-redo-start-point t))) (message "Sorting...") *** dist/vm-startup.el.dist Wed Nov 29 20:40:33 2000 --- vm-startup.el Mon Dec 11 21:09:58 2000 *************** *** 180,182 **** ! (vm-assimilate-new-messages nil (not did-read-index-file) nil) --- 180,184 ---- ! ;; builds message list, reads attributes if they weren't ! ;; read from an index file. ! (vm-assimilate-new-messages nil (not did-read-index-file) nil t) *************** *** 339,341 **** ! This is VM 6.87. --- 341,343 ---- ! This is VM 6.88. *************** *** 985,986 **** --- 987,1062 ---- (vm-mail to))) + + (fset 'vm-folders-summary-mode 'vm-mode) + (put 'vm-folders-summary-mode 'mode-class 'special) + + ;;;###autoload + (defun vm-folders-summarize (&optional display raise) + "Generate a summary of the folders in your folder directories. + Set `vm-folders-summary-directories' to specify the folder directories. + Press RETURN or click mouse button 2 on an entry in the folders + summary buffer to select a folder." + (interactive "p\np") + (vm-session-initialization) + (vm-check-for-killed-summary) + (if (not (featurep 'berkeley-db)) + (error "Berkeley DB support needed to run this command")) + (if (null vm-folders-summary-database) + (error "'vm-folders-summary-database' must be non-nil to run this command")) + (if (null vm-folders-summary-buffer) + (let ((folder-buffer (and (eq major-mode 'vm-mode) + (current-buffer)))) + (setq vm-folders-summary-buffer + (let ((default-enable-multibyte-characters t)) + (get-buffer-create "VM Folders Summary"))) + (save-excursion + (set-buffer vm-folders-summary-buffer) + (abbrev-mode 0) + (auto-fill-mode 0) + (vm-fsfemacs-nonmule-display-8bit-chars) + (if (fboundp 'buffer-disable-undo) + (buffer-disable-undo (current-buffer)) + ;; obfuscation to make the v19 compiler not whine + ;; about obsolete functions. + (let ((x 'buffer-flush-undo)) + (funcall x (current-buffer)))) + (vm-folders-summary-mode-internal)) + (vm-make-folders-summary-associative-hashes) + (vm-do-folders-summary))) + ;; if this command was run from a VM related buffer, select + ;; the folder buffer in the folders summary, but only if that + ;; folder has an entry there. + (and vm-mail-buffer + (vm-check-for-killed-folder)) + (save-excursion + (and vm-mail-buffer + (vm-select-folder-buffer)) + (vm-check-for-killed-summary) + (let ((folder-buffer (and (eq major-mode 'vm-mode) + (current-buffer))) + fs ) + (if (or (null vm-folders-summary-hash) (null folder-buffer) + (null buffer-file-name)) + nil + (setq fs (symbol-value (intern-soft (vm-make-folders-summary-key + buffer-file-name) + vm-folders-summary-hash))) + (if (null fs) + nil + (vm-mark-for-folders-summary-update buffer-file-name) + (set-buffer vm-folders-summary-buffer) + (setq vm-mail-buffer folder-buffer))))) + (if display + (save-excursion + (vm-goto-new-folders-summary-frame-maybe) + (vm-display vm-folders-summary-buffer t + '(vm-folders-summarize) + (list this-command) (not raise)) + ;; need to do this after any frame creation because the + ;; toolbar sets frame-specific height and width specifiers. + (set-buffer vm-folders-summary-buffer) + (and (vm-toolbar-support-possible-p) vm-use-toolbar + (vm-toolbar-install-toolbar))) + (vm-display nil nil '(vm-folders-summarize) + (list this-command))) + (vm-update-summary-and-mode-line)) *** dist/vm-summary.el.dist Sun Nov 26 16:19:34 2000 --- vm-summary.el Sun Dec 10 13:25:35 2000 *************** *** 1152,1157 **** (defun vm-make-folders-summary-key (folder &optional dir) ! (concat "folder-summary0:" ! (file-truename (expand-file-name folder ! (or dir vm-folder-directory))))) --- 1152,1174 ---- + (defun vm-fs-spooled (fs) + (let ((count 0) + (list (symbol-value + (intern-soft (vm-fs-folder-key-of fs) + vm-folders-summary-folder-hash)))) + (while list + (setq count (+ count (car (vm-get-folder-totals (car list)))) + list (cdr list))) + (int-to-string count))) + (defun vm-make-folders-summary-key (folder &optional dir) ! (cond ((and (stringp vm-recognize-pop-maildrops) ! (string-match vm-recognize-pop-maildrops folder)) ! (vm-safe-popdrop-string folder)) ! ((and (stringp vm-recognize-imap-maildrops) ! (string-match vm-recognize-imap-maildrops folder)) ! (vm-safe-imapdrop-string folder)) ! (t ! (concat "folder-summary0:" ! (file-truename ! (expand-file-name folder (or dir vm-folder-directory))))))) *************** *** 1164,1165 **** --- 1181,1196 ---- + (defun vm-get-folder-totals (folder) + (let ((default "(0 0 0 0)") fs db key data) + (catch 'done + (if (null vm-folders-summary-database) + (throw 'done (read default))) + (if (not (featurep 'berkeley-db)) + (throw 'done (read default))) + (if (null (setq db (vm-open-folders-summary-database "rw+"))) + (throw 'done (read default))) + (setq key (vm-make-folders-summary-key folder) + data (read (get-database key db default))) + (close-database db) + data ))) + (defun vm-store-folder-totals (folder totals) *************** *** 1271,1273 **** (string-match ! "%\\(-\\)?\\([0-9]+\\)?\\(\\.\\(-?[0-9]+\\)\\)?\\([()dfntu%]\\)" format last-match-end)) --- 1302,1304 ---- (string-match ! "%\\(-\\)?\\([0-9]+\\)?\\(\\.\\(-?[0-9]+\\)\\)?\\([()dfnstu%]\\)" format last-match-end)) *************** *** 1275,1277 **** (setq new-match-end (match-end 0)) ! (if (memq conv-spec '(?\( ?d ?f ?n ?t ?u)) (progn --- 1306,1308 ---- (setq new-match-end (match-end 0)) ! (if (memq conv-spec '(?\( ?d ?f ?n ?s ?t ?u)) (progn *************** *** 1297,1298 **** --- 1328,1332 ---- 'vm-folder-summary) sexp))) + ((= conv-spec ?s) + (setq sexp (cons (list 'vm-fs-spooled + 'vm-folder-summary) sexp))) ((= conv-spec ?u) *************** *** 1420,1474 **** (if (and vm-mutable-frames vm-frame-per-folders-summary) ! (vm-set-hooks-for-frame-deletion))) ! ! (fset 'vm-folders-summary-mode 'vm-mode) ! (put 'vm-folders-summary-mode 'mode-class 'special) ! ! (defun vm-folders-summarize (&optional display raise) ! "Generate a summary of the folders in your folder directories. ! Set `vm-folders-summary-directories' to specify the folder directories. ! Press RETURN or click mouse button 2 on an entry in the folders ! summary buffer to select a folder." ! (interactive "p\np") ! (vm-session-initialization) ! (vm-select-folder-buffer) ! (vm-check-for-killed-summary) ! (if (not (featurep 'berkeley-db)) ! (error "Berkeley DB support needed to run this command")) ! (if (null vm-folders-summary-database) ! (error "'vm-folders-summary-database' must be non-nil to run this command")) ! (if (null vm-folders-summary-buffer) ! (let ((buffer-read-only nil) ! (folder-buffer (and (eq major-mode 'vm-mode) ! (current-buffer)))) ! (setq vm-folders-summary-buffer ! (let ((default-enable-multibyte-characters t)) ! (get-buffer-create "VM Folders Summary"))) ! (save-excursion ! (set-buffer vm-folders-summary-buffer) ! (abbrev-mode 0) ! (auto-fill-mode 0) ! (vm-fsfemacs-nonmule-display-8bit-chars) ! (if (fboundp 'buffer-disable-undo) ! (buffer-disable-undo (current-buffer)) ! ;; obfuscation to make the v19 compiler not whine ! ;; about obsolete functions. ! (let ((x 'buffer-flush-undo)) ! (funcall x (current-buffer)))) ! (setq vm-mail-buffer folder-buffer) ! (vm-folders-summary-mode-internal)) ! (vm-do-folders-summary))) ! (if display ! (save-excursion ! (vm-goto-new-folders-summary-frame-maybe) ! (vm-display vm-folders-summary-buffer t ! '(vm-folders-summarize) ! (list this-command) (not raise)) ! ;; need to do this after any frame creation because the ! ;; toolbar sets frame-specific height and width specifiers. ! (set-buffer vm-folders-summary-buffer) ! (and (vm-toolbar-support-possible-p) vm-use-toolbar ! (vm-toolbar-install-toolbar))) ! (vm-display nil nil '(vm-folders-summarize) ! (list this-command))) ! (vm-update-summary-and-mode-line)) --- 1454,1457 ---- (if (and vm-mutable-frames vm-frame-per-folders-summary) ! (vm-set-hooks-for-frame-deletion)) ! (run-hooks 'vm-folders-summary-mode-hook)) *************** *** 1563,1566 **** (let ((fs (symbol-value sym))) ! (vm-update-folders-summary-entry fs) ! (vm-set-fs-modflag-of fs nil)))) vm-folders-summary-hash) --- 1546,1551 ---- (let ((fs (symbol-value sym))) ! (if (null (vm-fs-modflag-of fs)) ! nil ! (vm-update-folders-summary-entry fs) ! (vm-set-fs-modflag-of fs nil))))) vm-folders-summary-hash) *************** *** 1569,1574 **** ! (defun vm-mark-for-folders-summary-update (folder) (let ((key (vm-make-folders-summary-key folder)) (hash vm-folders-summary-hash) ! fs ) (setq fs (symbol-value (intern-soft key hash))) --- 1554,1560 ---- ! (defun vm-mark-for-folders-summary-update (folder &optional dont-descend) (let ((key (vm-make-folders-summary-key folder)) (hash vm-folders-summary-hash) ! (spool-hash vm-folders-summary-spool-hash) ! list fs ) (setq fs (symbol-value (intern-soft key hash))) *************** *** 1580,1582 **** (set-buffer vm-folders-summary-buffer) ! (vm-increment vm-modification-counter)))))) --- 1566,1592 ---- (set-buffer vm-folders-summary-buffer) ! (vm-increment vm-modification-counter)))) ! (if dont-descend ! nil ! (setq list (symbol-value (intern-soft key spool-hash))) ! (while list ! (vm-mark-for-folders-summary-update (car list) t) ! (setq list (cdr list)))))) ! ! (defun vm-make-folders-summary-associative-hashes () ! (let ((triples (vm-compute-spool-files t)) ! (spool-hash (make-vector 61 0)) ! (folder-hash (make-vector 61 0)) ! s-list f-list folder-key spool-key) ! (while triples ! (setq folder-key (vm-make-folders-summary-key (car (car triples))) ! spool-key (vm-make-folders-summary-key (nth 1 (car triples))) ! s-list (symbol-value (intern-soft spool-key spool-hash)) ! s-list (cons (car (car triples)) s-list) ! f-list (symbol-value (intern-soft folder-key folder-hash)) ! f-list (cons (nth 1 (car triples)) f-list) ! triples (cdr triples)) ! (set (intern spool-key spool-hash) s-list) ! (set (intern folder-key folder-hash) f-list)) ! (setq vm-folders-summary-spool-hash spool-hash) ! (setq vm-folders-summary-folder-hash folder-hash))) *** dist/vm-toolbar.el.dist Wed Nov 29 20:40:33 2000 --- vm-toolbar.el Thu Nov 30 14:14:15 2000 *************** *** 519,521 **** (setq t-spec (symbol-value ! (intern (format "vm-toolbar-%s-button" sym)))) (if (and (eq sym 'mime) (string= extension "xpm")) --- 519,524 ---- (setq t-spec (symbol-value ! (intern (format "vm-toolbar-%s-button" ! (if (eq sym 'mime) ! 'decode-mime ! sym))))) (if (and (eq sym 'mime) (string= extension "xpm")) *** dist/vm-vars.el.dist Sun Nov 26 16:19:34 2000 --- vm-vars.el Sun Dec 10 12:02:41 2000 *************** *** 273,275 **** ! MAILBOX should be a pop mailbox specification as described in the documentation for the variable `vm-spool-files'. If you have --- 273,275 ---- ! MAILBOX should be a POP mailbox specification as described in the documentation for the variable `vm-spool-files'. If you have *************** *** 386,389 **** buffer local variable `vm-spooled-mail-waiting' is set non-nil in ! the buffers of those folders that have mail waiting. VM uses ! the displays \"Mail\" in the mode line of folders that have mail waiting.") --- 386,389 ---- buffer local variable `vm-spooled-mail-waiting' is set non-nil in ! the buffers of those folders that have mail waiting. VM ! displays \"Mail\" in the mode line of folders that have mail waiting.") *************** *** 2183,2186 **** ! (defvar vm-folders-summary-format " %12f %4t total, %n new, %u unread\n" ! "*String which specifies the folders summary format. The string may contain the printf-like `%' conversion specifiers which --- 2183,2187 ---- ! (defvar vm-folders-summary-format ! " %12f %4t total, %n new, %u unread, %s spooled\n" ! "*String that specifies the folders summary format. The string may contain the printf-like `%' conversion specifiers which *************** *** 2214,2218 **** ! The summary format need not be one line per message but it must end with ! a newline, otherwise the message pointer will not be displayed correctly ! in the summary window.") --- 2215,2218 ---- ! The summary format need not be one line per folder, but it should end with ! a newline.") *************** *** 2421,2423 **** This variable only has meaning under XEmacs 19.12 and beyond. ! Under FSF Emacs 21 the toolbar is always at the top of the frame") --- 2421,2423 ---- This variable only has meaning under XEmacs 19.12 and beyond. ! Under FSF Emacs 21 the toolbar is always at the top of the frame.") *************** *** 2540,2541 **** --- 2540,2545 ---- + (setq vm-url-browser 'vm-mouse-send-url-to-mmosaic) + + for mMosaic, and + (setq vm-url-browser 'vm-mouse-send-url-to-mosaic) *************** *** 2839,2840 **** --- 2843,2848 ---- + (defvar vm-folders-summary-mode-hook nil + "*List of hook functions to run when a VM folders summary buffer is created. + The current buffer will be that buffer when the hooks are run.") + (defvar vm-virtual-mode-hook nil *************** *** 2981,2985 **** (defvar vm-wget-program "wget" "*Name of program to use to run wget. ! This is uses to retrieve URLs.") --- 2989,3000 ---- + (defvar vm-mmosaic-program "mMosaic" + "*Name of program to use to run mMosaic. + `vm-mouse-send-url-to-mosaic' uses this.") + + (defvar vm-mmosaic-program-switches nil + "*List of command line switches to pass to mMosaic.") + (defvar vm-wget-program "wget" "*Name of program to use to run wget. ! This is used to retrieve URLs.") *************** *** 2987,2989 **** "*Name of program to use to run lynx. ! This is uses to retrieve URLs.") --- 3002,3009 ---- "*Name of program to use to run lynx. ! This is used to retrieve URLs.") ! ! (defvar vm-grep-program "grep" ! "*Name of program to use to run grep. ! This is used to count message separators in folders. ! Set this to nil and VM will not use it.") *************** *** 3159,3161 **** (define-key map "\C-c\C-v" vm-mode-map) ! (define-key map "\C-c\C-p" 'vm-mime-preview-composition) (define-key map "\C-c\C-e" 'vm-mime-encode-composition) --- 3179,3181 ---- (define-key map "\C-c\C-v" vm-mode-map) ! (define-key map "\C-c\C-p" 'vm-preview-composition) (define-key map "\C-c\C-e" 'vm-mime-encode-composition) *************** *** 3224,3225 **** --- 3244,3247 ---- (defvar vm-folders-summary-hash nil) + (defvar vm-folders-summary-spool-hash nil) + (defvar vm-folders-summary-folder-hash nil) (defvar vm-folders-summary-buffer nil) *************** *** 3279,3280 **** --- 3301,3303 ---- (make-variable-buffer-local 'vm-block-new-mail) + (defvar vm-global-block-new-mail nil) (defvar vm-saved-buffer-modified-p nil) *************** *** 3699,3700 **** --- 3722,3724 ---- (defvar vm-kept-imap-buffers nil) + (defvar vm-imap-keep-trace-buffer nil) (defvar vm-reply-list nil) *************** *** 3758,3759 **** --- 3782,3784 ---- (defvar vm-folders-summary-overlay nil) + (defvar vm-spool-file-message-count-hash (make-vector 61 0)) (defvar vm-page-end-overlay nil) *************** *** 3763,3765 **** 'before-string)) ! (defvar vm-thread-loop-obarray (make-vector 29 0)) (defvar vm-delete-duplicates-obarray (make-vector 29 0)) --- 3788,3790 ---- 'before-string)) ! (defvar vm-thread-loop-obarray (make-vector 641 0)) (defvar vm-delete-duplicates-obarray (make-vector 29 0)) *** dist/vm-version.el.dist Wed Nov 29 20:40:33 2000 --- vm-version.el Mon Dec 11 21:09:58 2000 *************** *** 4,6 **** ! (defconst vm-version "6.87" "Version number of VM.") --- 4,6 ---- ! (defconst vm-version "6.88" "Version number of VM.")