*** dist/Makefile.dist Fri Apr 19 13:45:09 2002 --- Makefile Fri May 10 07:47:06 2002 *************** *** 54,57 **** vm-message.elc \ ! vm-mime.elc vm-minibuf.elc vm-misc.elc vm-mouse.elc \ ! vm-motion.elc vm-page.elc vm-pop.elc vm-reply.elc \ vm-save.elc \ --- 54,57 ---- vm-message.elc \ ! vm-mime.elc vm-minibuf.elc vm-misc.elc vm-motion.elc \ ! vm-mouse.elc vm-page.elc vm-pop.elc vm-reply.elc \ vm-save.elc \ *************** *** 66,69 **** vm-imap.el vm-license.el vm-macro.el vm-mark.el vm-menu.el vm-message.el \ ! vm-mime.el vm-minibuf.el vm-misc.el vm-mouse.el \ ! vm-motion.el vm-page.el vm-pop.el vm-reply.el vm-save.el \ vm-search.el vm-sort.el vm-startup.el vm-summary.el vm-thread.el \ --- 66,69 ---- vm-imap.el vm-license.el vm-macro.el vm-mark.el vm-menu.el vm-message.el \ ! vm-mime.el vm-minibuf.el vm-misc.el vm-motion.el \ ! vm-mouse.el vm-page.el vm-pop.el vm-reply.el vm-save.el \ vm-search.el vm-sort.el vm-startup.el vm-summary.el vm-thread.el \ *************** *** 122,123 **** --- 122,127 ---- cp *.elc $(LISPDIR) + + install-el: + test -d $(LISPDIR) || mkdir -p $(LISPDIR) + cp *.el $(LISPDIR) *** dist/vm-folder.el.dist Fri Apr 19 13:45:09 2002 --- vm-folder.el Wed May 8 18:14:05 2002 *************** *** 65,68 **** (let ((mp vm-message-list)) ! (while (and mp (not (or (eq mp start-point) ! (eq mp vm-numbering-redo-start-point)))) (setq mp (cdr mp))) --- 65,70 ---- (let ((mp vm-message-list)) ! (while (and mp ! (not ! (or (eq (car mp) (car start-point)) ! (eq (car mp) (car vm-numbering-redo-start-point))))) (setq mp (cdr mp))) *************** *** 70,72 **** (error "Something is wrong in vm-set-numbering-redo-start-point")) ! (if (eq mp start-point) (setq vm-numbering-redo-start-point start-point))) --- 72,74 ---- (error "Something is wrong in vm-set-numbering-redo-start-point")) ! (if (eq (car mp) (car start-point)) (setq vm-numbering-redo-start-point start-point))) *************** *** 1808,1811 **** ! (defun vm-stuff-folder-attributes (&optional abort-if-input-pending) ! (let ((newlist nil) mp) ;; stuff the attributes of messages that need it. --- 1810,1813 ---- ! (defun vm-stuff-folder-attributes (&optional abort-if-input-pending quiet) ! (let ((newlist nil) mp len (n 0)) ;; stuff the attributes of messages that need it. *************** *** 1817,1818 **** --- 1819,1824 ---- (setq mp (cdr mp))) + (if (and newlist (not quiet)) + (progn + (setq len (length newlist)) + (message "%d message%s to stuff" len (if (= 1 len) "" "s")))) ;; now sort the list by physical order so that we *************** *** 1823,1824 **** --- 1829,1832 ---- ;; the gap moves to accomodate the insertions. + (if (not quiet) + (message "Ordering updates...")) (let ((vm-key-functions '(vm-sort-compare-physical-order-r))) *************** *** 1827,1828 **** --- 1835,1839 ---- (vm-stuff-attributes (car mp)) + (setq n (1+ n)) + (if (not quiet) + (message "Stuffing %d%% complete..." (* (/ (+ n 0.0) len) 100))) (setq mp (cdr mp))) *************** *** 2661,2663 **** (throw 'done nil)))) ! (vm-error-free-call 'set-file-modes index-file 384) ;; 384 == 0600 (message "Writing index file... done") --- 2672,2674 ---- (throw 'done nil)))) ! (vm-error-free-call 'set-file-modes index-file (vm-octal 600)) (message "Writing index file... done") *************** *** 3029,3031 **** (vm-stuff-message-order)) ! (and (vm-stuff-folder-attributes t) (setq vm-flushed-modification-counter --- 3040,3042 ---- (vm-stuff-message-order)) ! (and (vm-stuff-folder-attributes t t) (setq vm-flushed-modification-counter *************** *** 3046,3048 **** --- 3057,3061 ---- (let ((buffer-read-only)) + (message "Stuffing attributes...") (vm-stuff-folder-attributes nil) + (message "Stuffing attributes... done") (if vm-message-list *************** *** 3136,3137 **** --- 3149,3151 ---- (vm-stuff-folder-attributes nil) + (message "Stuffing attributes... done") ;; stuff bookmark and header variable values *************** *** 3829,3831 **** (vm-gobble-message-order)) ! (if (vectorp vm-thread-obarray) (vm-build-threads (cdr tail-cons)))))) --- 3843,3846 ---- (vm-gobble-message-order)) ! (if (or (vectorp vm-thread-obarray) ! vm-summary-show-threads) (vm-build-threads (cdr tail-cons)))))) *************** *** 3859,3864 **** (progn - ;; get numbering and summary 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"))) --- 3874,3875 ---- *************** *** 3967,3969 **** ;; must come after the setting of major-mode ! mode-popup-menu (and vm-use-menus vm-popup-menu-on-mouse-3 (vm-menu-support-possible-p) --- 3978,3980 ---- ;; must come after the setting of major-mode ! mode-popup-menu (and vm-use-menus (vm-menu-support-possible-p) *** dist/vm-mime.el.dist Fri Apr 19 13:45:10 2002 --- vm-mime.el Wed May 8 16:20:50 2002 *************** *** 1154,1156 **** vm-mail-buffer mail-buffer ! mode-popup-menu (and vm-use-menus vm-popup-menu-on-mouse-3 (vm-menu-support-possible-p) --- 1154,1156 ---- vm-mail-buffer mail-buffer ! mode-popup-menu (and vm-use-menus (vm-menu-support-possible-p) *************** *** 1535,1561 **** ! (defun vm-mime-should-display-internal (layout dont-honor-content-disposition) ! (if (and vm-honor-mime-content-disposition ! (not dont-honor-content-disposition) ! (vm-mm-layout-disposition layout)) ! (let ((case-fold-search t)) ! (string-match "^inline$" (car (vm-mm-layout-disposition layout)))) ! (let ((i-list vm-mime-internal-content-types) ! (type (car (vm-mm-layout-type layout))) ! (matched nil)) ! (if (if (eq i-list t) ! t ! (while (and i-list (not matched)) ! (if (vm-mime-types-match (car i-list) type) ! (setq matched t) ! (setq i-list (cdr i-list)))) ! matched ) ! (progn ! (setq i-list vm-mime-internal-content-type-exceptions ! matched nil) ! (while (and i-list (not matched)) ! (if (vm-mime-types-match (car i-list) type) ! (setq matched t) ! (setq i-list (cdr i-list)))) ! (not matched)) ! nil )))) --- 1535,1556 ---- ! (defun vm-mime-should-display-internal (layout) ! (let ((i-list vm-mime-internal-content-types) ! (type (car (vm-mm-layout-type layout))) ! (matched nil)) ! (if (if (eq i-list t) ! t ! (while (and i-list (not matched)) ! (if (vm-mime-types-match (car i-list) type) ! (setq matched t) ! (setq i-list (cdr i-list)))) ! matched ) ! (progn ! (setq i-list vm-mime-internal-content-type-exceptions ! matched nil) ! (while (and i-list (not matched)) ! (if (vm-mime-types-match (car i-list) type) ! (setq matched t) ! (setq i-list (cdr i-list)))) ! (not matched)) ! nil ))) *************** *** 1722,1724 **** (void-function nil))))) ! ((and (vm-mime-should-display-internal layout dont-honor-c-d) (or (condition-case nil --- 1717,1719 ---- (void-function nil))))) ! ((and (vm-mime-should-display-internal layout) (or (condition-case nil *************** *** 2062,2065 **** (cond ((and (vm-mime-can-display-internal (car part-list) t) ! (vm-mime-should-display-internal (car part-list) ! nil)) (setq best (car part-list) --- 2057,2059 ---- (cond ((and (vm-mime-can-display-internal (car part-list) t) ! (vm-mime-should-display-internal (car part-list))) (setq best (car part-list) *************** *** 2111,2114 **** (cond ((and (vm-mime-can-display-internal (car part-list) t) ! (vm-mime-should-display-internal (car part-list) ! nil)) (if (vm-mime-types-match (car favs) type) --- 2105,2107 ---- (cond ((and (vm-mime-can-display-internal (car part-list) t) ! (vm-mime-should-display-internal (car part-list))) (if (vm-mime-types-match (car favs) type) *************** *** 4559,4560 **** --- 4552,4554 ---- (vm-set-line-count-of m nil) + (vm-set-modflag-of m t) ;; For the dreaded From_-with-Content-Length folders recompute *** dist/vm-misc.el.dist Mon Mar 4 16:15:02 2002 --- vm-misc.el Wed May 1 20:06:29 2002 *************** *** 851,853 **** (defun vm-url-decode-buffer () ! (let ((case-fold-search nil) (hex-digit-alist '((?0 . 0) (?1 . 1) (?2 . 2) (?3 . 3) --- 851,853 ---- (defun vm-url-decode-buffer () ! (let ((case-fold-search t) (hex-digit-alist '((?0 . 0) (?1 . 1) (?2 . 2) (?3 . 3) *** dist/vm-reply.el.dist Fri Apr 19 13:45:10 2002 --- vm-reply.el Tue Apr 30 14:18:46 2002 *************** *** 1186,1188 **** (setq vm-mail-buffer folder-buffer ! mode-popup-menu (and vm-use-menus vm-popup-menu-on-mouse-3 (vm-menu-support-possible-p) --- 1186,1188 ---- (setq vm-mail-buffer folder-buffer ! mode-popup-menu (and vm-use-menus (vm-menu-support-possible-p) *************** *** 1473,1474 **** --- 1473,1476 ---- (goto-char (point-max)) + (if (not (eq (preceding-char) ?\n)) + (insert ?\n)) (insert (vm-trailing-message-separator 'mmdf)) *** dist/vm-save.el.dist Sat Jun 23 18:58:00 2001 --- vm-save.el Fri Apr 26 18:12:44 2002 *************** *** 218,219 **** --- 218,221 ---- (let ((mlist (vm-select-marked-or-prefixed-messages count)) + (oldmodebits (and (fboundp 'default-file-modes) + (default-file-modes))) (m nil) (count 0) folder-buffer target-type) *************** *** 245,337 **** (vm-folder-header target-type)))))) ! (save-excursion ! (while mlist ! (setq m (vm-real-message-of (car mlist))) ! (set-buffer (vm-buffer-of m)) ! (vm-save-restriction ! (widen) ! ;; have to stuff the attributes in all cases because ! ;; the deleted attribute may have been stuffed ! ;; previously and we don't want to save that attribute. ! ;; also we don't want to save out the cached summary entry. ! (vm-stuff-attributes m t) ! (if (null folder-buffer) ! (if (or (null vm-check-folder-types) ! (eq target-type (vm-message-type-of m))) ! (write-region (vm-start-of m) ! (vm-end-of m) ! folder t 'quiet) ! (if (null vm-convert-folder-types) ! (if (not (vm-virtual-message-p (car mlist))) ! (error "Folder type mismatch: %s, %s" ! (vm-message-type-of m) target-type) ! (error "Message %s type mismatches folder %s" ! (vm-number-of (car mlist)) ! folder ! (vm-message-type-of m) ! target-type)) ! (vm-write-string ! folder ! (vm-leading-message-separator target-type m t)) ! (if (eq target-type 'From_-with-Content-Length) (vm-write-string folder ! (concat vm-content-length-header " " ! (vm-su-byte-count m) "\n"))) ! (write-region (vm-headers-of m) ! (vm-text-end-of m) ! folder t 'quiet) ! (vm-write-string ! folder ! (vm-trailing-message-separator target-type)))) ! (save-excursion ! (set-buffer folder-buffer) ! ;; if the buffer is a live VM folder ! ;; honor vm-folder-read-only. ! (if vm-folder-read-only ! (signal 'folder-read-only (list (current-buffer)))) ! (let ((buffer-read-only nil)) ! (vm-save-restriction ! (widen) ! (save-excursion ! (goto-char (point-max)) ! (if (or (null vm-check-folder-types) ! (eq target-type (vm-message-type-of m))) ! (insert-buffer-substring ! (vm-buffer-of m) ! (vm-start-of m) (vm-end-of m)) ! (if (null vm-convert-folder-types) ! (if (not (vm-virtual-message-p (car mlist))) ! (error "Folder type mismatch: %s, %s" ! (vm-message-type-of m) target-type) ! (error "Message %s type mismatches folder %s" ! (vm-number-of (car mlist)) ! folder ! (vm-message-type-of m) ! target-type)) ! (vm-write-string ! (current-buffer) ! (vm-leading-message-separator target-type m t)) ! (if (eq target-type 'From_-with-Content-Length) (vm-write-string (current-buffer) ! (concat vm-content-length-header " " ! (vm-su-byte-count m) "\n"))) ! (insert-buffer-substring (vm-buffer-of m) ! (vm-headers-of m) ! (vm-text-end-of m)) ! (vm-write-string ! (current-buffer) ! (vm-trailing-message-separator target-type))))) ! ;; vars should exist and be local ! ;; but they may have strange values, ! ;; so check the major-mode. ! (cond ((eq major-mode 'vm-mode) ! (vm-increment vm-messages-not-on-disk) ! (vm-clear-modification-flag-undos))))))) ! (if (null (vm-filed-flag m)) ! (vm-set-filed-flag m t)) ! (vm-increment count) ! (vm-modify-folder-totals folder 'saved 1 m) ! (vm-update-summary-and-mode-line) ! (setq mlist (cdr mlist))))) (if m --- 247,343 ---- (vm-folder-header target-type)))))) ! (unwind-protect ! (save-excursion ! (and oldmodebits (set-default-file-modes ! vm-default-folder-permission-bits)) ! (while mlist ! (setq m (vm-real-message-of (car mlist))) ! (set-buffer (vm-buffer-of m)) ! (vm-save-restriction ! (widen) ! ;; have to stuff the attributes in all cases because ! ;; the deleted attribute may have been stuffed ! ;; previously and we don't want to save that attribute. ! ;; also we don't want to save out the cached summary entry. ! (vm-stuff-attributes m t) ! (if (null folder-buffer) ! (if (or (null vm-check-folder-types) ! (eq target-type (vm-message-type-of m))) ! (write-region (vm-start-of m) ! (vm-end-of m) ! folder t 'quiet) ! (if (null vm-convert-folder-types) ! (if (not (vm-virtual-message-p (car mlist))) ! (error "Folder type mismatch: %s, %s" ! (vm-message-type-of m) target-type) ! (error "Message %s type mismatches folder %s" ! (vm-number-of (car mlist)) ! folder ! (vm-message-type-of m) ! target-type)) (vm-write-string folder ! (vm-leading-message-separator target-type m t)) ! (if (eq target-type 'From_-with-Content-Length) ! (vm-write-string ! folder ! (concat vm-content-length-header " " ! (vm-su-byte-count m) "\n"))) ! (write-region (vm-headers-of m) ! (vm-text-end-of m) ! folder t 'quiet) ! (vm-write-string ! folder ! (vm-trailing-message-separator target-type)))) ! (save-excursion ! (set-buffer folder-buffer) ! ;; if the buffer is a live VM folder ! ;; honor vm-folder-read-only. ! (if vm-folder-read-only ! (signal 'folder-read-only (list (current-buffer)))) ! (let ((buffer-read-only nil)) ! (vm-save-restriction ! (widen) ! (save-excursion ! (goto-char (point-max)) ! (if (or (null vm-check-folder-types) ! (eq target-type (vm-message-type-of m))) ! (insert-buffer-substring ! (vm-buffer-of m) ! (vm-start-of m) (vm-end-of m)) ! (if (null vm-convert-folder-types) ! (if (not (vm-virtual-message-p (car mlist))) ! (error "Folder type mismatch: %s, %s" ! (vm-message-type-of m) target-type) ! (error "Message %s type mismatches folder %s" ! (vm-number-of (car mlist)) ! folder ! (vm-message-type-of m) ! target-type)) ! (vm-write-string ! (current-buffer) ! (vm-leading-message-separator target-type m t)) ! (if (eq target-type 'From_-with-Content-Length) ! (vm-write-string ! (current-buffer) ! (concat vm-content-length-header " " ! (vm-su-byte-count m) "\n"))) ! (insert-buffer-substring (vm-buffer-of m) ! (vm-headers-of m) ! (vm-text-end-of m)) (vm-write-string (current-buffer) ! (vm-trailing-message-separator target-type))))) ! ;; vars should exist and be local ! ;; but they may have strange values, ! ;; so check the major-mode. ! (cond ((eq major-mode 'vm-mode) ! (vm-increment vm-messages-not-on-disk) ! (vm-clear-modification-flag-undos))))))) ! (if (null (vm-filed-flag m)) ! (vm-set-filed-flag m t)) ! (vm-increment count) ! (vm-modify-folder-totals folder 'saved 1 m) ! (vm-update-summary-and-mode-line) ! (setq mlist (cdr mlist))))) ! (and oldmodebits (set-default-file-modes oldmodebits))) (if m *************** *** 407,408 **** --- 413,416 ---- (let ((mlist (vm-select-marked-or-prefixed-messages count)) + (oldmodebits (and (fboundp 'default-file-modes) + (default-file-modes))) (m nil) file-buffer) *************** *** 416,444 **** (error "Aborted")) ! (save-excursion ! (while mlist ! (setq m (vm-real-message-of (car mlist))) ! (set-buffer (vm-buffer-of m)) ! (vm-save-restriction ! (widen) ! (if (null file-buffer) ! (write-region (vm-text-of m) ! (vm-text-end-of m) ! file t 'quiet) ! (let ((start (vm-text-of m)) ! (end (vm-text-end-of m))) ! (save-excursion ! (set-buffer file-buffer) ! (save-excursion ! (let (buffer-read-only) ! (vm-save-restriction ! (widen) ! (save-excursion ! (goto-char (point-max)) ! (insert-buffer-substring ! (vm-buffer-of m) ! start end)))))))) ! (if (null (vm-written-flag m)) ! (vm-set-written-flag m t)) ! (vm-update-summary-and-mode-line) ! (setq mlist (cdr mlist))))) (if m --- 424,456 ---- (error "Aborted")) ! (unwind-protect ! (save-excursion ! (and oldmodebits (set-default-file-modes ! vm-default-folder-permission-bits)) ! (while mlist ! (setq m (vm-real-message-of (car mlist))) ! (set-buffer (vm-buffer-of m)) ! (vm-save-restriction ! (widen) ! (if (null file-buffer) ! (write-region (vm-text-of m) ! (vm-text-end-of m) ! file t 'quiet) ! (let ((start (vm-text-of m)) ! (end (vm-text-end-of m))) ! (save-excursion ! (set-buffer file-buffer) ! (save-excursion ! (let (buffer-read-only) ! (vm-save-restriction ! (widen) ! (save-excursion ! (goto-char (point-max)) ! (insert-buffer-substring ! (vm-buffer-of m) ! start end)))))))) ! (if (null (vm-written-flag m)) ! (vm-set-written-flag m t)) ! (vm-update-summary-and-mode-line) ! (setq mlist (cdr mlist))))) ! (and oldmodebits (set-default-file-modes oldmodebits))) (if m *** dist/vm-sort.el.dist Thu Mar 1 20:17:42 2001 --- vm-sort.el Thu May 9 20:37:36 2002 *************** *** 458,464 **** (let ((list1 (vm-th-thread-list m1)) ! (list2 (vm-th-thread-list m2))) (catch 'done (if (not (eq (car list1) (car list2))) ! (let ((date1 (get (car list1) 'oldest-date)) ! (date2 (get (car list2) 'oldest-date))) (cond ((string-lessp date1 date2) t) --- 458,465 ---- (let ((list1 (vm-th-thread-list m1)) ! (list2 (vm-th-thread-list m2)) ! p1 p2 d1 d2) (catch 'done (if (not (eq (car list1) (car list2))) ! (let ((date1 (get (car list1) 'youngest-date)) ! (date2 (get (car list2) 'youngest-date))) (cond ((string-lessp date1 date2) t) *************** *** 467,472 **** (t nil))) (while (and list1 list2) ! (cond ((string-lessp (car list1) (car list2)) (throw 'done t)) ! ((not (string-equal (car list1) (car list2))) ! (throw 'done nil))) (setq list1 (cdr list1) --- 468,482 ---- (t nil))) + (setq list1 (cdr list1) list2 (cdr list2)) (while (and list1 list2) ! (setq p1 (car list1) p2 (car list2)) ! (cond ((not (string-equal p1 p2)) ! (setq d1 (or (get p1 'date) "0") d2 (or (get p2 'date) "0")) ! (cond ((string-lessp d1 d2) ! (throw 'done t)) ! ((string-lessp d2 d1) ! (throw 'done nil)) ! ((string-lessp p1 p2) ! (throw 'done t)) ! (t ! (throw 'done t))))) (setq list1 (cdr list1) *** dist/vm-startup.el.dist Fri Apr 19 13:45:10 2002 --- vm-startup.el Fri May 10 07:53:46 2002 *************** *** 354,356 **** ! This is VM 7.04. --- 354,356 ---- ! This is VM 7.05. *************** *** 524,525 **** --- 524,526 ---- vm-default-From_-folder-type + vm-default-folder-permission-bits vm-default-folder-type *************** *** 617,618 **** --- 618,620 ---- vm-mime-ignore-mime-version + vm-mime-ignore-composite-type-opaque-transfer-encoding vm-mime-internal-content-type-exceptions *************** *** 1002,1004 **** ;; must come after the setting of major-mode ! (setq mode-popup-menu (and vm-use-menus vm-popup-menu-on-mouse-3 (vm-menu-support-possible-p) --- 1004,1006 ---- ;; must come after the setting of major-mode ! (setq mode-popup-menu (and vm-use-menus (vm-menu-support-possible-p) *************** *** 1285,1286 **** --- 1287,1289 ---- 'vm-default-From_-folder-type + 'vm-default-folder-permission-bits 'vm-default-folder-type *************** *** 1383,1384 **** --- 1386,1388 ---- 'vm-mime-ignore-mime-version + 'vm-mime-ignore-composite-type-opaque-transfer-encoding 'vm-mime-internal-content-type-exceptions *** dist/vm-summary.el.dist Tue Jan 22 14:28:29 2002 --- vm-summary.el Tue Apr 23 14:57:57 2002 *************** *** 24,26 **** ;; must come after the setting of major-mode ! mode-popup-menu (and vm-use-menus vm-popup-menu-on-mouse-3 (vm-menu-support-possible-p) --- 24,26 ---- ;; must come after the setting of major-mode ! mode-popup-menu (and vm-use-menus (vm-menu-support-possible-p) *************** *** 1092,1094 **** --- 1092,1096 ---- (setq mp (cdr mp))) + (message "Stuffing attributes...") (vm-stuff-folder-attributes nil) + (message "Stuffing attributes... done") (set-buffer-modified-p t) *************** *** 1453,1455 **** ;; must come after the setting of major-mode ! mode-popup-menu (and vm-use-menus vm-popup-menu-on-mouse-3 (vm-menu-support-possible-p) --- 1455,1457 ---- ;; must come after the setting of major-mode ! mode-popup-menu (and vm-use-menus (vm-menu-support-possible-p) *** dist/vm-thread.el.dist Fri Apr 19 13:45:10 2002 --- vm-thread.el Thu May 9 19:09:18 2002 *************** *** 52,53 **** --- 52,54 ---- (put id-sym 'messages (cons m (get id-sym 'messages))) + (put id-sym 'date date) (if (and (null (cdr (get id-sym 'messages))) *************** *** 119,121 **** (set subject-sym ! (vector id-sym (vm-so-sortable-datestring m) nil (list m))) --- 120,122 ---- (set subject-sym ! (vector id-sym date nil (list m))) *************** *** 193,195 **** (loop-recovery-point nil) ! thread-list id-sym subject-sym loop-sym root-date) (save-excursion --- 194,197 ---- (loop-recovery-point nil) ! (date (vm-so-sortable-datestring message)) ! thread-list id-sym subject-sym loop-sym root-date youngest-date) (save-excursion *************** *** 204,207 **** (if (or (null root-date) ! (string< (vm-so-sortable-datestring message) root-date)) ! (put id-sym 'oldest-date (vm-so-sortable-datestring message))) (if (and (boundp id-sym) (symbol-value id-sym)) --- 206,214 ---- (if (or (null root-date) ! (string< date root-date)) ! (put id-sym 'oldest-date date)) ! ;; save the date of the youngest message in this thread ! (setq youngest-date (get id-sym 'youngest-date)) ! (if (or (null root-date) ! (string< youngest-date date)) ! (put id-sym 'youngest-date date)) (if (and (boundp id-sym) (symbol-value id-sym)) *************** *** 256,301 **** (setq m (car mp)) ! (let ((inhibit-quit t)) ! (vm-set-thread-list-of m nil) ! (vm-set-thread-indentation-of m nil) ! (set-buffer (vm-buffer-of m)) ! (setq id-sym (intern (vm-su-message-id m) vm-thread-obarray) ! subject-sym (intern (vm-so-sortable-subject m) ! vm-thread-subject-obarray)) ! (if (boundp id-sym) ! (progn ! (put id-sym 'messages (delq m (get id-sym 'messages))) ! (vm-thread-mark-for-summary-update (get id-sym 'children)) ! (setq p-sym (symbol-value id-sym)) ! (and p-sym (put p-sym 'children ! (delq m (get p-sym 'children)))) ! (if message-changing ! (set id-sym nil)))) ! (if (and (boundp subject-sym) (setq vect (symbol-value subject-sym))) ! (if (not (eq id-sym (aref vect 0))) ! (aset vect 2 (delq m (aref vect 2))) ! (if message-changing ! (if (null (cdr (aref vect 3))) ! (makunbound subject-sym) ! (let ((p (aref vect 3)) ! oldest-msg oldest-date children) ! (setq oldest-msg (car p) ! oldest-date (vm-so-sortable-datestring (car p)) ! p (cdr p)) ! (while p ! (if (and (string-lessp (vm-so-sortable-datestring (car p)) ! oldest-date) ! (not (eq m (car p)))) ! (setq oldest-msg (car p) ! oldest-date (vm-so-sortable-datestring (car p)))) ! (setq p (cdr p))) ! (aset vect 0 (intern (vm-su-message-id oldest-msg) ! vm-thread-obarray)) ! (aset vect 1 oldest-date) ! (setq children (delq oldest-msg (aref vect 2))) ! (aset vect 2 children) ! (aset vect 3 (delq m (aref vect 3))) ! ;; I'm not sure there aren't situations ! ;; where this might loop forever. ! (let ((inhibit-quit nil)) ! (vm-thread-mark-for-summary-update children)))))))) (setq mp (cdr mp)))))) --- 263,310 ---- (setq m (car mp)) ! (set-buffer (vm-buffer-of m)) ! (if (not (vectorp vm-thread-obarray)) ! nil ! (let ((inhibit-quit t)) ! (vm-set-thread-list-of m nil) ! (vm-set-thread-indentation-of m nil) ! (setq id-sym (intern (vm-su-message-id m) vm-thread-obarray) ! subject-sym (intern (vm-so-sortable-subject m) ! vm-thread-subject-obarray)) ! (if (boundp id-sym) ! (progn ! (put id-sym 'messages (delq m (get id-sym 'messages))) ! (vm-thread-mark-for-summary-update (get id-sym 'children)) ! (setq p-sym (symbol-value id-sym)) ! (and p-sym (put p-sym 'children ! (delq m (get p-sym 'children)))) ! (if message-changing ! (set id-sym nil)))) ! (if (and (boundp subject-sym) (setq vect (symbol-value subject-sym))) ! (if (not (eq id-sym (aref vect 0))) ! (aset vect 2 (delq m (aref vect 2))) ! (if message-changing ! (if (null (cdr (aref vect 3))) ! (makunbound subject-sym) ! (let ((p (aref vect 3)) ! oldest-msg oldest-date children) ! (setq oldest-msg (car p) ! oldest-date (vm-so-sortable-datestring (car p)) ! p (cdr p)) ! (while p ! (if (and (string-lessp (vm-so-sortable-datestring (car p)) ! oldest-date) ! (not (eq m (car p)))) ! (setq oldest-msg (car p) ! oldest-date (vm-so-sortable-datestring (car p)))) ! (setq p (cdr p))) ! (aset vect 0 (intern (vm-su-message-id oldest-msg) ! vm-thread-obarray)) ! (aset vect 1 oldest-date) ! (setq children (delq oldest-msg (aref vect 2))) ! (aset vect 2 children) ! (aset vect 3 (delq m (aref vect 3))) ! ;; I'm not sure there aren't situations ! ;; where this might loop forever. ! (let ((inhibit-quit nil)) ! (vm-thread-mark-for-summary-update children))))))))) (setq mp (cdr mp)))))) *** dist/vm-vars.el.dist Fri Apr 19 13:45:10 2002 --- vm-vars.el Mon May 6 12:43:55 2002 *************** *** 279,281 **** required for all mail retrieval from spool files." ! :type '(list string)) --- 279,281 ---- required for all mail retrieval from spool files." ! :type '(repeat string)) *************** *** 802,804 **** ! (defcustom vm-auto-displayed-mime-content-types '("text" "multipart") "*List of MIME content types that should be displayed immediately --- 802,804 ---- ! (defcustom vm-auto-displayed-mime-content-types '("text" "image" "multipart") "*List of MIME content types that should be displayed immediately *************** *** 832,834 **** object to a file." ! :type '(list string)) --- 832,834 ---- object to a file." ! :type '(repeat string)) *************** *** 849,851 **** that type are assumed to be included." ! :type '(list string)) --- 849,851 ---- that type are assumed to be included." ! :type '(repeat string)) *************** *** 868,870 **** There is no need to list them here." ! :type '(choice (const t) (const nil) (list string))) --- 868,870 ---- There is no need to list them here." ! :type '(choice (const t) (const nil) (repeat string))) *************** *** 882,884 **** that type are assumed to be included." ! :type '(list string)) --- 882,884 ---- that type are assumed to be included." ! :type '(repeat string)) *************** *** 958,960 **** that type are assumed to be included." ! :type '(list string)) --- 958,960 ---- that type are assumed to be included." ! :type '(repeat string)) *************** *** 1096,1098 **** `vm-mime-charset-font-alist'." ! :type '(choice (const t) (list string))) --- 1096,1098 ---- `vm-mime-charset-font-alist'." ! :type '(choice (const t) (repeat string))) *************** *** 1103,1105 **** default face even if they are also listed in `vm-mime-default-face-charsets'." ! :type '(list string)) --- 1103,1105 ---- default face even if they are also listed in `vm-mime-default-face-charsets'." ! :type '(repeat string)) *************** *** 1481,1483 **** `vm-mime-base64-decoder-program'." ! :type '(list string)) --- 1481,1483 ---- `vm-mime-base64-decoder-program'." ! :type '(repeat string)) *************** *** 1494,1496 **** `vm-mime-base64-encoder-program'." ! :type '(list string)) --- 1494,1496 ---- `vm-mime-base64-encoder-program'." ! :type '(repeat string)) *************** *** 1507,1509 **** `vm-mime-qp-decoder-program'." ! :type '(list string)) --- 1507,1509 ---- `vm-mime-qp-decoder-program'." ! :type '(repeat string)) *************** *** 1520,1522 **** `vm-mime-qp-encoder-program'." ! :type '(list string)) --- 1520,1522 ---- `vm-mime-qp-encoder-program'." ! :type '(repeat string)) *************** *** 1534,1536 **** `vm-mime-uuencode-decoder-program'." ! :type '(list string)) --- 1534,1536 ---- `vm-mime-uuencode-decoder-program'." ! :type '(repeat string)) *************** *** 1987,1989 **** Case is ignored when matching the addresses." ! :type '(list regexp)) --- 1987,1989 ---- Case is ignored when matching the addresses." ! :type '(repeat regexp)) *************** *** 2000,2002 **** leaving no way to reply to just the author of a message." ! :type '(list regexp)) --- 2000,2002 ---- leaving no way to reply to just the author of a message." ! :type '(repeat regexp)) *************** *** 2037,2039 **** section of the included text." ! :type '(list regexp)) --- 2037,2039 ---- section of the included text." ! :type '(repeat regexp)) *************** *** 2085,2087 **** the forwarded message." ! :type '(list regexp)) --- 2085,2087 ---- the forwarded message." ! :type '(repeat regexp)) *************** *** 2214,2216 **** of the digestified messages." ! :type '(list regexp)) --- 2214,2216 ---- of the digestified messages." ! :type '(repeat regexp)) *************** *** 2261,2263 **** the digestified messages." ! :type '(list regexp)) --- 2261,2263 ---- the digestified messages." ! :type '(repeat regexp)) *************** *** 2310,2312 **** of the digestified messages." ! :type '(list regexp)) --- 2310,2312 ---- of the digestified messages." ! :type '(repeat regexp)) *************** *** 2358,2360 **** the message." ! :type '(list regexp)) --- 2358,2360 ---- the message." ! :type '(repeat regexp)) *************** *** 2398,2400 **** the message." ! :type '(list regexp)) --- 2398,2400 ---- the message." ! :type '(repeat regexp)) *************** *** 2648,2650 **** List the directories in the order you wish them to appear in the summary." ! :type '(list directory)) --- 2648,2650 ---- List the directories in the order you wish them to appear in the summary." ! :type '(repeat directory)) *************** *** 2800,2809 **** the function `make-frame'." ! :type '(repeat (list (choice completion) ! (choice composition) ! (choice edit) ! (choice folder) ! (choice folders-summary) ! (choice primary-folder) ! (choice summary)) ! (repeat (cons symbol sexp)))) --- 2800,2809 ---- the function `make-frame'." ! :type '(repeat (cons (choice (const completion) ! (const composition) ! (const edit) ! (const folder) ! (const folders-summary) ! (const primary-folder) ! (const summary)) ! (repeat (cons symbol sexp))))) *************** *** 2857,2872 **** See also `vm-toolbar-orientation' to control where the toolbar is placed." ! :type '(list (choice autofile) ! (choice compose) ! (choice delete/undelete) ! (choice file) ! (choice getmail) ! (choice help) ! (choice mime) ! (choice next) ! (choice previous) ! (choice print) ! (choice quit) ! (choice reply) ! (choice visit) ! (choice nil))) --- 2857,2873 ---- See also `vm-toolbar-orientation' to control where the toolbar is placed." ! :type '(repeat (choice integer ! (const autofile) ! (const compose) ! (const delete/undelete) ! (const file) ! (const getmail) ! (const help) ! (const mime) ! (const next) ! (const previous) ! (const print) ! (const quit) ! (const reply) ! (const visit) ! (const nil)))) *************** *** 2879,2884 **** Under FSF Emacs 21 the toolbar is always at the top of the frame." ! :type '(list (choice left) ! (choice right) ! (choice top) ! (choice bottom))) --- 2880,2885 ---- Under FSF Emacs 21 the toolbar is always at the top of the frame." ! :type '(choice (const left) ! (const right) ! (const top) ! (const bottom))) *************** *** 2940,2953 **** window system." ! :type '(list (choice dispose) ! (choice emacs) ! (choice folder) ! (choice help) ! (choice label) ! (choice mark) ! (choice motion) ! (choice send) ! (choice sort) ! (choice undo) ! (choice virtual) ! (choice nil))) --- 2941,2955 ---- window system." ! :type '(choice (const 1) ! (repeat (choice (const dispose) ! (const emacs) ! (const folder) ! (const help) ! (const label) ! (const mark) ! (const motion) ! (const send) ! (const sort) ! (const undo) ! (const virtual) ! (const nil))))) *************** *** 2985,2987 **** use any URL retrieval methods." ! :type '(list symbol)) --- 2987,2992 ---- use any URL retrieval methods." ! :type '(set (const lynx) ! (const wget) ! (const w3m) ! (const url-w3))) *************** *** 3029,3031 **** A nil value means VM should not enable URL passing to browsers." ! :type 'function) --- 3034,3038 ---- A nil value means VM should not enable URL passing to browsers." ! :type '(choice (const nil) ! function ! string)) *************** *** 3198,3200 **** messages." ! :type '(list string)) --- 3205,3207 ---- messages." ! :type '(repeat string)) *************** *** 3516,3518 **** named by `vm-movemail-program'." ! :type '(list string)) --- 3523,3525 ---- named by `vm-movemail-program'." ! :type '(repeat string)) *************** *** 3525,3527 **** "*List of command line switches to pass to Netscape." ! :type '(list string)) --- 3532,3534 ---- "*List of command line switches to pass to Netscape." ! :type '(repeat string)) *************** *** 3534,3536 **** "*List of command line switches to pass to Mosaic." ! :type '(list string)) --- 3541,3543 ---- "*List of command line switches to pass to Mosaic." ! :type '(repeat string)) *************** *** 3543,3545 **** "*List of command line switches to pass to mMosaic." ! :type '(list string)) --- 3550,3552 ---- "*List of command line switches to pass to mMosaic." ! :type '(repeat string)) *************** *** 3605,3607 **** "*List of command line switches to pass to SSH." ! :type '(list string)) --- 3612,3614 ---- "*List of command line switches to pass to SSH." ! :type '(repeat string)) *************** *** 3656,3658 **** ! (defconst vm-maintainer-address "bug-vm@uunet.uu.net" "Where to send VM bug reports.") --- 3663,3680 ---- ! (defun vm-octal (n) ! (let ((val 0) digit (expo 1)) ! (while (> n 0) ! (setq digit (% n 10)) ! (if (>= digit 8) ! (error "invalid octal digit: %d" digit)) ! (setq val (+ val (* digit expo)) ! n (/ n 10) ! expo (* expo 8))) ! val )) ! ! (defcustom vm-default-folder-permission-bits (vm-octal 600) ! "*Default UNIX permission bits for newly created folders." ! :type 'integer) ! ! (defconst vm-maintainer-address "bug-vm@wonderworks.com" "Where to send VM bug reports.") *** dist/vm-version.el.dist Fri Apr 19 13:45:10 2002 --- vm-version.el Fri May 10 07:53:46 2002 *************** *** 4,6 **** ! (defconst vm-version "7.04" "Version number of VM.") --- 4,6 ---- ! (defconst vm-version "7.05" "Version number of VM.")