aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard M. Stallman2009-08-13 01:13:09 +0000
committerRichard M. Stallman2009-08-13 01:13:09 +0000
commit76e1e40b4eeb45f485f03069a0a9a43480779dfc (patch)
tree4686af921ea3de783c288266c2565ff69d993189
parent5c9509238d351efce4bb9793cad4678d72656b68 (diff)
downloademacs-76e1e40b4eeb45f485f03069a0a9a43480779dfc.tar.gz
emacs-76e1e40b4eeb45f485f03069a0a9a43480779dfc.zip
* mail/rmail.el (rmail-set-message-counters):
Call rmail-set-message-counters-counter just once. It returns # msgs after point. (rmail-set-message-counters-counter): Arg is now SPOT-TO-FIND. Return # messages after that one. * mail/rmail.el (rmail-forget-messages): Ignore nil elt in rmail-message-vector. Use dotimes.
-rw-r--r--lisp/ChangeLog3
-rw-r--r--lisp/mail/rmail.el53
2 files changed, 35 insertions, 21 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index ad18578e4c4..9bd9643568e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -3,6 +3,9 @@
3 * mail/rmail.el (rmail-get-attr-names): 3 * mail/rmail.el (rmail-get-attr-names):
4 Accept an attribute header that is too short. 4 Accept an attribute header that is too short.
5 5
6 * mail/rmail.el (rmail-forget-messages):
7 Ignore nil elt in rmail-message-vector. Use dotimes.
8
6 * progmodes/compile.el (compilation-goto-locus): 9 * progmodes/compile.el (compilation-goto-locus):
7 Use next-error-move-function. 10 Use next-error-move-function.
8 11
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index 2fd99fbd282..c61efeb30be 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -2369,12 +2369,11 @@ change the invisible header text."
2369(defun rmail-forget-messages () 2369(defun rmail-forget-messages ()
2370 (unwind-protect 2370 (unwind-protect
2371 (if (vectorp rmail-message-vector) 2371 (if (vectorp rmail-message-vector)
2372 (let* ((i 0) 2372 (let* ((v rmail-message-vector)
2373 (v rmail-message-vector)
2374 (n (length v))) 2373 (n (length v)))
2375 (while (< i n) 2374 (dotimes (i n)
2376 (move-marker (aref v i) nil) 2375 (if (aref v i)
2377 (setq i (1+ i))))) 2376 (move-marker (aref v i) nil)))))
2378 (setq rmail-message-vector nil) 2377 (setq rmail-message-vector nil)
2379 (setq rmail-msgref-vector nil) 2378 (setq rmail-msgref-vector nil)
2380 (setq rmail-deleted-vector nil))) 2379 (setq rmail-deleted-vector nil)))
@@ -2440,20 +2439,25 @@ Output a helpful message unless NOMSG is non-nil."
2440 ;; the entry for message N+1, which marks 2439 ;; the entry for message N+1, which marks
2441 ;; the end of message N. (N = number of messages). 2440 ;; the end of message N. (N = number of messages).
2442 (setq messages-head (list (point-marker))) 2441 (setq messages-head (list (point-marker)))
2443 (rmail-set-message-counters-counter (min (point) point-save)) 2442 (setq messages-after-point
2444 (setq messages-after-point total-messages) 2443 (or (rmail-set-message-counters-counter (min (point) point-save))
2444 0))
2445 2445
2446 ;; Determine how many precede point.
2447 (rmail-set-message-counters-counter)
2448 (setq rmail-total-messages total-messages) 2446 (setq rmail-total-messages total-messages)
2449 (setq rmail-current-message 2447 (setq rmail-current-message
2450 (min total-messages 2448 (min total-messages
2451 (max 1 (- total-messages messages-after-point)))) 2449 (max 1 (- total-messages messages-after-point))))
2452 (setq rmail-message-vector 2450
2453 (apply 'vector (cons (point-min-marker) messages-head)) 2451 ;; Make an element 0 in rmail-message-vector and rmail-deleted-vector
2454 rmail-deleted-vector (concat "0" deleted-head) 2452 ;; which will never be used.
2455 rmail-summary-vector (make-vector rmail-total-messages nil) 2453 (push nil messages-head)
2454 (push ?0 deleted-head)
2455 (setq rmail-message-vector (apply 'vector messages-head)
2456 rmail-deleted-vector (concat deleted-head))
2457
2458 (setq rmail-summary-vector (make-vector rmail-total-messages nil)
2456 rmail-msgref-vector (make-vector (1+ rmail-total-messages) nil)) 2459 rmail-msgref-vector (make-vector (1+ rmail-total-messages) nil))
2460
2457 (let ((i 0)) 2461 (let ((i 0))
2458 (while (<= i rmail-total-messages) 2462 (while (<= i rmail-total-messages)
2459 (aset rmail-msgref-vector i (list i)) 2463 (aset rmail-msgref-vector i (list i))
@@ -2480,12 +2484,17 @@ the message. Point is at the beginning of the message."
2480 ?D 2484 ?D
2481 ?\s) deleted-head)))) 2485 ?\s) deleted-head))))
2482 2486
2483(defun rmail-set-message-counters-counter (&optional stop) 2487(defun rmail-set-message-counters-counter (&optional spot-to-find)
2484 ;; Collect the start position for each message into 'messages-head. 2488 "Collect the start positions of messages in list `messages-head'.
2485 (let ((start (point))) 2489Return the number of messages after the one containing SPOT-TO-FIND."
2486 (while (search-backward "\n\nFrom " stop t) 2490 (let ((start (point))
2491 messages-after-spot)
2492 (while (search-backward "\n\nFrom " nil t)
2487 (forward-char 2) 2493 (forward-char 2)
2488 (when (looking-at rmail-unix-mail-delimiter) 2494 (when (looking-at rmail-unix-mail-delimiter)
2495 (if (and (<= (point) spot-to-find)
2496 (null messages-after-spot))
2497 (setq messages-after-spot total-messages))
2489 (rmail-collect-deleted start) 2498 (rmail-collect-deleted start)
2490 (setq messages-head (cons (point-marker) messages-head) 2499 (setq messages-head (cons (point-marker) messages-head)
2491 total-messages (1+ total-messages) 2500 total-messages (1+ total-messages)
@@ -2494,13 +2503,15 @@ the message. Point is at the beginning of the message."
2494 (if (zerop (% total-messages 20)) 2503 (if (zerop (% total-messages 20))
2495 (message "Counting messages...%d" total-messages)))) 2504 (message "Counting messages...%d" total-messages))))
2496 ;; Handle the first message, maybe. 2505 ;; Handle the first message, maybe.
2497 (if stop 2506 (goto-char (point-min))
2498 (goto-char stop)
2499 (goto-char (point-min)))
2500 (unless (not (looking-at rmail-unix-mail-delimiter)) 2507 (unless (not (looking-at rmail-unix-mail-delimiter))
2508 (if (and (<= (point) spot-to-find)
2509 (null messages-after-spot))
2510 (setq messages-after-spot total-messages))
2501 (rmail-collect-deleted start) 2511 (rmail-collect-deleted start)
2502 (setq messages-head (cons (point-marker) messages-head) 2512 (setq messages-head (cons (point-marker) messages-head)
2503 total-messages (1+ total-messages))))) 2513 total-messages (1+ total-messages)))
2514 messages-after-spot))
2504 2515
2505;; Display a message. 2516;; Display a message.
2506 2517