*** dist/Makefile.dist Sun Oct 28 22:13:03 2001 --- Makefile Thu Mar 7 07:02:17 2002 *************** *** 138,139 **** --- 138,141 ---- + # We use tr -d because Emacs under Cygwin apparently outputs CRLF + # under Windows. We remove the CRs. vm-autoload.elc: $(SOURCES) *************** *** 141,143 **** @echo "(provide 'vm-autoload)" > vm-autoload.el ! @$(EMACS) $(BATCHFLAGS) -l ./make-autoloads -f print-autoloads $(SOURCES) >> vm-autoload.el @echo compiling vm-autoload.el... --- 143,145 ---- @echo "(provide 'vm-autoload)" > vm-autoload.el ! @$(EMACS) $(BATCHFLAGS) -l ./make-autoloads -f print-autoloads $(SOURCES) | tr -d '\r' >> vm-autoload.el @echo compiling vm-autoload.el... *** dist/vm-delete.el.dist Mon Dec 3 08:03:03 2001 --- vm-delete.el Thu Apr 11 18:49:00 2002 *************** *** 239,241 **** ;; remove the message from the thread tree. ! (if vm-thread-obarray (vm-unthread-message (vm-real-message-of (car mp)))) --- 239,241 ---- ;; remove the message from the thread tree. ! (if (vectorp vm-thread-obarray) (vm-unthread-message (vm-real-message-of (car mp)))) *** dist/vm-edit.el.dist Sun Nov 18 23:57:24 2001 --- vm-edit.el Thu Apr 11 18:49:00 2002 *************** *** 148,150 **** (vm-garbage-collect-message) ! (if vm-thread-obarray (vm-unthread-message m t)) --- 148,150 ---- (vm-garbage-collect-message) ! (if (vectorp vm-thread-obarray) (vm-unthread-message m t)) *************** *** 158,160 **** (save-excursion (vm-preview-current-message))) ! (if vm-thread-obarray (vm-build-threads (list m))) --- 158,160 ---- (save-excursion (vm-preview-current-message))) ! (if (vectorp vm-thread-obarray) (vm-build-threads (list m))) *************** *** 171,173 **** (save-excursion (vm-preview-current-message))) ! (if vm-thread-obarray (vm-build-threads (list (car v-list)))) --- 171,173 ---- (save-excursion (vm-preview-current-message))) ! (if (vectorp vm-thread-obarray) (vm-build-threads (list (car v-list)))) *** dist/vm-folder.el.dist Mon Mar 4 07:57:01 2002 --- vm-folder.el Thu Apr 11 18:49:00 2002 *************** *** 2449,2450 **** --- 2449,2457 ---- (and order (vm-startup-apply-message-order order)) + (if vm-summary-show-threads + (progn + ;; get numbering of new messages done now + ;; so that the sort code only has to worry about the + ;; changes it needs to make. + (vm-update-summary-and-mode-line) + (vm-sort-messages "thread"))) (vm-startup-apply-summary summary) *************** *** 3822,3824 **** (vm-gobble-message-order)) ! (if vm-thread-obarray (vm-build-threads (cdr tail-cons)))))) --- 3829,3831 ---- (vm-gobble-message-order)) ! (if (vectorp vm-thread-obarray) (vm-build-threads (cdr tail-cons)))))) *************** *** 3888,3890 **** (setq vm-ml-sort-keys nil) ! (if vm-thread-obarray (vm-build-threads (cdr tail-cons))) --- 3895,3897 ---- (setq vm-ml-sort-keys nil) ! (if (vectorp vm-thread-obarray) (vm-build-threads (cdr tail-cons))) *************** *** 3974,3977 **** selective-display nil ! vm-thread-obarray nil ! vm-thread-subject-obarray nil vm-label-obarray (make-vector 29 0) --- 3981,3984 ---- selective-display nil ! vm-thread-obarray 'bonk ! vm-thread-subject-obarray 'bonk vm-label-obarray (make-vector 29 0) *** dist/vm-imap.el.dist Mon Dec 3 08:03:04 2001 --- vm-imap.el Wed Apr 17 12:07:13 2002 *************** *** 1082,1087 **** (if (looking-at "\042") ! (setq done t) (accept-process-output process) (goto-char curpoint)) ! (setq token (list 'string start (1- curpoint)))))) ;; should be (looking-at "[\000-\040\177-\377]") --- 1082,1089 ---- (if (looking-at "\042") ! (progn ! (setq done t) ! (forward-char 1)) (accept-process-output process) (goto-char curpoint)) ! (setq token (list 'string start curpoint))))) ;; should be (looking-at "[\000-\040\177-\377]") *** dist/vm-macro.el.dist Mon Mar 4 07:57:01 2002 --- vm-macro.el Thu Apr 11 18:49:00 2002 *************** *** 44,46 **** (defsubst vm-build-threads-if-unbuilt () ! (if (null vm-thread-obarray) (vm-build-threads nil))) --- 44,46 ---- (defsubst vm-build-threads-if-unbuilt () ! (if (not (vectorp vm-thread-obarray)) (vm-build-threads nil))) *** dist/vm-menu.el.dist Mon Mar 4 07:57:01 2002 --- vm-menu.el Fri Apr 5 16:10:28 2002 *************** *** 528,541 **** `(,@title ! vm-menu-folder-menu ! vm-menu-motion-menu ! vm-menu-send-menu ! vm-menu-mark-menu ! vm-menu-label-menu ! vm-menu-sort-menu ! vm-menu-virtual-menu ! ;; vm-menu-undo-menu ! vm-menu-dispose-menu "---" "---" ! vm-menu-help-menu))) --- 528,541 ---- `(,@title ! ,vm-menu-folder-menu ! ,vm-menu-motion-menu ! ,vm-menu-send-menu ! ,vm-menu-mark-menu ! ,vm-menu-label-menu ! ,vm-menu-sort-menu ! ,vm-menu-virtual-menu ! ;; ,vm-menu-undo-menu ! ,vm-menu-dispose-menu "---" "---" ! ,vm-menu-help-menu))) *** dist/vm-mime.el.dist Tue Jan 22 14:28:29 2002 --- vm-mime.el Wed Apr 17 12:28:01 2002 *************** *** 930,932 **** (null (string-match "^\\(7bit\\|8bit\\|binary\\)$" ! encoding))) (vm-mime-error "Opaque transfer encoding used with multipart or message type: %s, %s" (car type) encoding)) --- 930,943 ---- (null (string-match "^\\(7bit\\|8bit\\|binary\\)$" ! encoding)) ! (if vm-mime-ignore-composite-type-opaque-transfer-encoding ! (progn ! ;; Some mailers declare an opaque ! ;; encoding on a composite type even ! ;; though it's only a subobject that ! ;; uses that encoding. Deal with it ! ;; by assuming a proper transfer encoding. ! (setq encoding "binary") ! ;; return nil so and-clause will fail ! nil ) ! t )) (vm-mime-error "Opaque transfer encoding used with multipart or message type: %s, %s" (car type) encoding)) *************** *** 1761,1763 **** (defun vm-mime-display-internal-text/html (layout) ! (if (fboundp 'w3-region) (condition-case error-data --- 1772,1775 ---- (defun vm-mime-display-internal-text/html (layout) ! (if (and (fboundp 'w3-region) ! vm-mime-use-w3-for-text/html) (condition-case error-data *************** *** 3206,3224 **** (defun vm-mime-display-button-xxxx (layout disposable) ! (if (or (vm-mime-can-display-internal layout) ! (vm-mime-find-external-viewer (car (vm-mm-layout-type layout))) ! (vm-mime-can-convert (car (vm-mm-layout-type layout)))) ! (progn ! (vm-mime-insert-button ! (vm-mime-sprintf (vm-mime-find-format-for-layout layout) layout) ! (function ! (lambda (layout) ! (save-excursion ! (let ((vm-auto-displayed-mime-content-types t) ! (vm-auto-displayed-mime-content-type-exceptions nil)) ! (vm-decode-mime-layout layout t))))) ! layout disposable) ! t ) ! ;; don't display a button if we have no way of displaying the ! ;; object. ! nil )) --- 3218,3242 ---- (defun vm-mime-display-button-xxxx (layout disposable) ! (vm-mime-insert-button ! (vm-mime-sprintf (vm-mime-find-format-for-layout layout) layout) ! (function ! (lambda (layout) ! (save-excursion ! (let ((vm-auto-displayed-mime-content-types t) ! (vm-auto-displayed-mime-content-type-exceptions nil)) ! (vm-decode-mime-layout layout t))))) ! layout disposable) ! t ) ! ! (defun vm-find-layout-extent-at-point () ! (cond (vm-fsfemacs-p ! (let (o-list o retval (found nil)) ! (setq o-list (overlays-at (point))) ! (while (and o-list (not found)) ! (cond ((overlay-get (car o-list) 'vm-mime-layout) ! (setq found t) ! (setq retval (car o-list)))) ! (setq o-list (cdr o-list))) ! retval )) ! (vm-xemacs-p ! (extent-at (point) nil 'vm-mime-layout)))) *************** *** 3230,3247 **** (save-excursion ! (cond (vm-fsfemacs-p ! (let (o-list o retval (found nil)) ! (setq o-list (overlays-at (point))) ! (while (and o-list (not found)) ! (cond ((overlay-get (car o-list) 'vm-mime-layout) ! (setq found t) ! ;; return value is used by caller. ! (setq retval ! (funcall (or function (overlay-get (car o-list) ! 'vm-mime-function)) ! (car o-list))))) ! (setq o-list (cdr o-list))) ! retval )) ! (vm-xemacs-p ! (let ((e (extent-at (point) nil 'vm-mime-layout))) ! ;; return value is used by caller. (funcall (or function (extent-property e 'vm-mime-function)) --- 3248,3256 ---- (save-excursion ! (let ((e (vm-find-layout-extent-at-point)) ! retval ) ! (cond ((null e) nil) ! (vm-fsfemacs-p ! (funcall (or function (overlay-get e 'vm-mime-function)) ! e)) ! (vm-xemacs-p (funcall (or function (extent-property e 'vm-mime-function)) *************** *** 3582,3584 **** (defun vm-mime-pipe-body-to-queried-command (layout &optional discard-output) ! (let ((command (read-string "Pipe to command: "))) (vm-mime-pipe-body-to-command command layout discard-output))) --- 3591,3593 ---- (defun vm-mime-pipe-body-to-queried-command (layout &optional discard-output) ! (let ((command (read-string "Pipe object to command: "))) (vm-mime-pipe-body-to-command command layout discard-output))) *************** *** 3751,3753 **** (vm-mime-default-face-charset-p name))) ! ((and vm-fsfemacs-mule-p (memq window-system '(x win32 w32))) (or (vm-string-assoc name vm-mime-mule-charset-to-coding-alist) --- 3760,3762 ---- (vm-mime-default-face-charset-p name))) ! ((and vm-fsfemacs-mule-p (memq window-system '(x mac win32 w32))) (or (vm-string-assoc name vm-mime-mule-charset-to-coding-alist) *************** *** 4157,4158 **** --- 4166,4219 ---- (list 'kill-buffer buf))))))) + + (defun vm-mime-attach-object-from-message (composition) + "Attach a object from the current message to a VM composition buffer. + + The object is not inserted into the buffer and MIME encoded until + you execute `vm-mail-send' or `vm-mail-send-and-exit'. A visible tag + indicating the existence of the object is placed in the + composition buffer. You can move the object around or remove + it entirely with normal text editing commands. If you remove the + object tag, the object will not be sent. + + First argument COMPOSITION is the buffer into which the object + will be inserted. When this function is called interactively + COMPOSITION's name will be read from the minibuffer." + (interactive + ;; protect value of last-command and this-command + (let ((last-command last-command) + (this-command this-command)) + (list + (read-buffer "Attach object to buffer: " + (vm-find-composition-buffer) t)))) + (if (null vm-send-using-mime) + (error "MIME attachments disabled, set vm-send-using-mime non-nil to enable.")) + (vm-check-for-killed-summary) + (vm-error-if-folder-empty) + + (let (e layout (work-buffer nil) buf) + (setq e (vm-find-layout-extent-at-point) + layout (and e (vm-extent-property e 'vm-mime-layout))) + (unwind-protect + (if (null layout) + (error "No MIME object found at point.") + (save-excursion + (setq work-buffer (vm-make-work-buffer)) + (set-buffer work-buffer) + (vm-mime-insert-mime-headers layout) + (insert "\n") + (vm-mime-insert-mime-body layout) + (set-buffer composition) + (vm-mime-attach-object work-buffer + (car (vm-mm-layout-type layout)) + (cdr (vm-mm-layout-type layout)) + (vm-mm-layout-description layout) + t) + (setq buf work-buffer + work-buffer nil) + (add-hook 'kill-buffer-hook + (list 'lambda () + (list 'if (list 'eq (current-buffer) + '(current-buffer)) + (list 'kill-buffer buf)))))) + (and work-buffer (kill-buffer work-buffer))))) *** dist/vm-page.el.dist Mon Mar 4 07:57:02 2002 --- vm-page.el Mon Mar 4 20:09:15 2002 *************** *** 508,539 **** (catch 'done ! (let ((case-fold-search t) i g h) ! (if (next-single-property-change (point-min) 'vm-xface) ! nil ! (goto-char (point-min)) ! (if (re-search-forward "^X-Face:" nil t) ! (progn ! (goto-char (match-beginning 0)) ! (vm-match-header) ! (setq h (vm-matched-header-contents)) ! (setq g (intern h vm-xface-cache)) ! (if (boundp g) ! (setq g (symbol-value g)) ! (setq i (vm-convert-xface-to-fsfemacs-image-instantiator h)) ! (cond (i ! (set g i) ! (setq g (symbol-value g))) ! (t (throw 'done nil)))) ! (let ((pos (vm-vheaders-of (car vm-message-pointer))) ! o ) ! ;; An image must replace the normal display of at ! ;; least one character. Since we want to put the ! ;; image at the beginning of the visible headers ! ;; section, it will obscure the first character of ! ;; that section. To display that character we add ! ;; an after-string that contains the character. ! ;; Kludge city, but it works. ! (setq o (make-overlay (+ 0 pos) (+ 1 pos))) ! (overlay-put o 'after-string ! (char-to-string (char-after pos))) ! (overlay-put o 'display g)))))))) --- 508,544 ---- (catch 'done ! (let ((case-fold-search t) i g h ooo) ! (setq ooo (overlays-in (point-min) (point-max))) ! (while ooo ! (if (overlay-get (car ooo) 'vm-xface) ! (delete-overlay (car ooo))) ! (setq ooo (cdr ooo))) ! (goto-char (point-min)) ! (if (re-search-forward "^X-Face:" nil t) ! (progn ! (goto-char (match-beginning 0)) ! (vm-match-header) ! (setq h (vm-matched-header-contents)) ! (setq g (intern h vm-xface-cache)) ! (if (boundp g) ! (setq g (symbol-value g)) ! (setq i (vm-convert-xface-to-fsfemacs-image-instantiator h)) ! (cond (i ! (set g i) ! (setq g (symbol-value g))) ! (t (throw 'done nil)))) ! (let ((pos (vm-vheaders-of (car vm-message-pointer))) ! o ) ! ;; An image must replace the normal display of at ! ;; least one character. Since we want to put the ! ;; image at the beginning of the visible headers ! ;; section, it will obscure the first character of ! ;; that section. To display that character we add ! ;; an after-string that contains the character. ! ;; Kludge city, but it works. ! (setq o (make-overlay (+ 0 pos) (+ 1 pos))) ! (overlay-put o 'vm-xface t) ! (overlay-put o 'evaporate t) ! (overlay-put o 'after-string ! (char-to-string (char-after pos))) ! (overlay-put o 'display g))))))) *** dist/vm-reply.el.dist Tue Jan 22 14:28:29 2002 --- vm-reply.el Mon Apr 15 22:40:34 2002 *************** *** 485,486 **** --- 485,487 ---- (cond ((and vm-fsfemacs-mule-p + (fboundp 'select-message-coding-system) (not (fboundp 'vm-old-select-message-coding-system))) *************** *** 1292,1294 **** (mail-position-on-field "To")) ! (add-hook 'post-command-hook 'vm-update-composition-buffer-name t) (run-hooks 'mail-setup-hook))) --- 1293,1298 ---- (mail-position-on-field "To")) ! (if (boundp 'post-command-idle-hook) ! (add-hook 'post-command-idle-hook ! 'vm-update-composition-buffer-name t) ! (add-hook 'post-command-hook 'vm-update-composition-buffer-name t)) (run-hooks 'mail-setup-hook))) *** dist/vm-startup.el.dist Mon Mar 4 16:15:03 2002 --- vm-startup.el Thu Apr 18 22:02:55 2002 *************** *** 354,356 **** ! This is VM 7.03. --- 354,356 ---- ! This is VM 7.04. *************** *** 558,560 **** --- 558,562 ---- vm-highlighted-header-regexp + vm-honor-mime-content-disposition vm-honor-page-delimiters + vm-icontopbm-program vm-image-directory *************** *** 702,703 **** --- 704,706 ---- vm-trust-From_-with-Content-Length + vm-uncompface-program vm-undisplay-buffer-hook *************** *** 1318,1320 **** --- 1321,1325 ---- 'vm-highlighted-header-regexp + 'vm-honor-mime-content-disposition 'vm-honor-page-delimiters + 'vm-icontopbm-program 'vm-image-directory *************** *** 1473,1474 **** --- 1478,1480 ---- 'vm-trust-From_-with-Content-Length + 'vm-uncompface-program 'vm-undisplay-buffer-hook *************** *** 1590,1591 **** --- 1596,1607 ---- (set-face-background 'gui-button-face "red"))))) + ;; gui-button-face might not exist under XEmacs either. + ;; This can happen if XEmacs is built without window + ;; system support. In any case, create it anyway. + (if (and vm-xemacs-p (not (find-face 'gui-button-face))) + (progn + (make-face 'gui-button-face) + (set-face-foreground 'gui-button-face "black" nil '(win)) + (set-face-background 'gui-button-face "gray75" nil '(win)) + (set-face-foreground 'gui-button-face "white" nil '(tty)) + (set-face-background 'gui-button-face "red" nil '(tty)))) (and (vm-mouse-support-possible-p) *** dist/vm-thread.el.dist Sun Nov 25 22:09:21 2001 --- vm-thread.el Thu Apr 11 18:49:00 2002 *************** *** 34,36 **** (defun vm-build-threads (message-list) ! (if (null vm-thread-obarray) (setq vm-thread-obarray (make-vector 641 0) --- 34,36 ---- (defun vm-build-threads (message-list) ! (if (not (vectorp vm-thread-obarray)) (setq vm-thread-obarray (make-vector 641 0) *** dist/vm-vars.el.dist Mon Mar 4 16:15:03 2002 --- vm-vars.el Thu Apr 11 18:43:49 2002 *************** *** 742,744 **** (defcustom vm-mime-require-mime-version-header t ! "Non-nil means a message must contain MIME-Version to be considered MIME. The MIME standard requires that MIME messages contain a MIME-Version, --- 742,744 ---- (defcustom vm-mime-require-mime-version-header t ! "*Non-nil means a message must contain MIME-Version to be considered MIME. The MIME standard requires that MIME messages contain a MIME-Version, *************** *** 749,750 **** --- 749,759 ---- + (defcustom vm-mime-ignore-composite-type-opaque-transfer-encoding t + "*Non-nil means VM should ignore type declaration of base64 and + quoted-printable for objecto ftype message/* or multipart/*. The + MIME spec requries that these ype use either 7bit, 8bit, or binary + transfer encodings but some mailers declare quoted-printable and + base64 even when they are not used. Set this variable if you want + VM to ignore this problem and try to display the object anyway." + :type 'boolean) + (defcustom vm-send-using-mime t *************** *** 3212,3214 **** (point-max)." ! :type '(list function)) --- 3221,3223 ---- (point-max)." ! :type 'hook) *************** *** 3220,3222 **** (point-max)." ! :type '(list function)) --- 3229,3231 ---- (point-max)." ! :type 'hook) *************** *** 3228,3230 **** (point-max)." ! :type '(list function)) --- 3237,3239 ---- (point-max)." ! :type 'hook) *************** *** 3237,3239 **** bracketed by (point-min) and (point-max)." ! :type '(list function)) --- 3246,3248 ---- bracketed by (point-min) and (point-max)." ! :type 'hook) *************** *** 3243,3245 **** run." ! :type '(list function)) --- 3252,3254 ---- run." ! :type 'hook) *************** *** 3253,3255 **** the messages." ! :type '(list function)) --- 3262,3264 ---- the messages." ! :type 'hook) *************** *** 3260,3262 **** the Mail mode buffer." ! :type '(list function)) --- 3269,3271 ---- the Mail mode buffer." ! :type 'hook) *************** *** 3267,3269 **** user in the Mail mode buffer." ! :type '(list function)) --- 3276,3278 ---- user in the Mail mode buffer." ! :type 'hook) *************** *** 3274,3276 **** the user in the Mail mode buffer." ! :type '(list function)) --- 3283,3285 ---- the user in the Mail mode buffer." ! :type 'hook) *************** *** 3281,3283 **** the user in the Mail mode buffer." ! :type '(list function)) --- 3290,3292 ---- the user in the Mail mode buffer." ! :type 'hook) *************** *** 3288,3290 **** the user in the Mail mode buffer." ! :type '(list function)) --- 3297,3299 ---- the user in the Mail mode buffer." ! :type 'hook) *************** *** 3296,3298 **** leaving the user in the Mail mode buffer." ! :type '(list function)) --- 3305,3307 ---- leaving the user in the Mail mode buffer." ! :type 'hook) *************** *** 3301,3303 **** entry a folder summary." ! :type '(list function)) --- 3310,3312 ---- entry a folder summary." ! :type 'hook) *************** *** 3306,3308 **** entries from a folder summary." ! :type '(list function)) --- 3315,3317 ---- entries from a folder summary." ! :type 'hook) *************** *** 3313,3315 **** It is NOT run after `vm-mode' is called." ! :type '(list function)) --- 3322,3324 ---- It is NOT run after `vm-mode' is called." ! :type 'hook) *************** *** 3322,3324 **** incorporated." ! :type '(list function)) --- 3331,3333 ---- incorporated." ! :type 'hook) *************** *** 3328,3330 **** in the edit buffer." ! :type '(list function)) --- 3337,3339 ---- in the edit buffer." ! :type 'hook) *************** *** 3334,3336 **** does before leaving the user in the Mail mode buffer." ! :type '(list function)) --- 3343,3345 ---- does before leaving the user in the Mail mode buffer." ! :type 'hook) *************** *** 3340,3342 **** and local variables." ! :type '(list function)) --- 3349,3351 ---- and local variables." ! :type 'hook) *************** *** 3346,3348 **** You should use the new name." ! :type '(list function)) --- 3355,3357 ---- You should use the new name." ! :type 'hook) *************** *** 3351,3353 **** The current buffer will be that buffer when the hooks are run." ! :type '(list function)) --- 3360,3362 ---- The current buffer will be that buffer when the hooks are run." ! :type 'hook) *************** *** 3357,3359 **** You should use the new name." ! :type '(list function)) --- 3366,3368 ---- You should use the new name." ! :type 'hook) *************** *** 3362,3364 **** The current buffer will be that buffer when the hooks are run." ! :type '(list function)) --- 3371,3373 ---- The current buffer will be that buffer when the hooks are run." ! :type 'hook) *************** *** 3367,3369 **** The current buffer will be that buffer when the hooks are run." ! :type '(list function)) --- 3376,3378 ---- The current buffer will be that buffer when the hooks are run." ! :type 'hook) *************** *** 3374,3376 **** must be done to the message to make it presentable. E.g. MIME decoding." ! :type '(list function)) --- 3383,3385 ---- must be done to the message to make it presentable. E.g. MIME decoding." ! :type 'hook) *************** *** 3379,3381 **** This applies to any VM quit command." ! :type '(list function)) --- 3388,3390 ---- This applies to any VM quit command." ! :type 'hook) *************** *** 3384,3386 **** When the hooks are run, the current buffer will be the summary buffer." ! :type '(list function)) --- 3393,3395 ---- When the hooks are run, the current buffer will be the summary buffer." ! :type 'hook) *************** *** 3395,3397 **** configuration system as the result is likely to be confusing." ! :type '(list function)) --- 3404,3406 ---- configuration system as the result is likely to be confusing." ! :type 'hook) *************** *** 3407,3409 **** confusing." ! :type '(list function)) --- 3416,3418 ---- confusing." ! :type 'hook) *************** *** 3411,3413 **** "*List of hook functions that are run whenever VM iconifies a frame." ! :type '(list function)) --- 3420,3422 ---- "*List of hook functions that are run whenever VM iconifies a frame." ! :type 'hook) *************** *** 3415,3417 **** "*List of hook functions that are run just after all menus are initialized." ! :type '(list function)) --- 3424,3426 ---- "*List of hook functions that are run just after all menus are initialized." ! :type 'hook) *************** *** 3440,3442 **** return nil. If all the hooks return nil, VM will signal an error." ! :type '(list function)) --- 3449,3451 ---- return nil. If all the hooks return nil, VM will signal an error." ! :type 'hook) *************** *** 3447,3449 **** FCC processing." ! :type '(list function)) --- 3456,3458 ---- FCC processing." ! :type 'hook) *************** *** 3469,3471 **** instead of no action." ! :type '(list function)) --- 3478,3480 ---- instead of no action." ! :type 'hook) *************** *** 3831,3832 **** --- 3840,3842 ---- (let ((map (make-sparse-keymap))) + (define-key map "$a" 'vm-mime-attach-object-from-message) (define-key map "$s" 'vm-mime-reader-map-save-message) *************** *** 3924,3928 **** (make-variable-buffer-local 'vm-need-summary-pointer-update) ! (defvar vm-thread-obarray nil) (make-variable-buffer-local 'vm-thread-obarray) ! (defvar vm-thread-subject-obarray nil) (make-variable-buffer-local 'vm-thread-subject-obarray) --- 3934,3938 ---- (make-variable-buffer-local 'vm-need-summary-pointer-update) ! (defvar vm-thread-obarray 'bonk) (make-variable-buffer-local 'vm-thread-obarray) ! (defvar vm-thread-subject-obarray 'bonk) (make-variable-buffer-local 'vm-thread-subject-obarray) *** dist/vm-version.el.dist Mon Mar 4 16:15:03 2002 --- vm-version.el Thu Apr 18 22:02:55 2002 *************** *** 4,6 **** ! (defconst vm-version "7.03" "Version number of VM.") --- 4,6 ---- ! (defconst vm-version "7.04" "Version number of VM.") *************** *** 79,81 **** (vm-fsfemacs-p ! (memq window-system '(x w32 win32))))) --- 79,81 ---- (vm-fsfemacs-p ! (memq window-system '(x mac w32 win32))))) *************** *** 95,97 **** (vm-fsfemacs-p ! (memq window-system '(x w32 win32))))) --- 95,97 ---- (vm-fsfemacs-p ! (memq window-system '(x mac w32 win32)))))