diff options
| author | Richard M. Stallman | 2009-08-13 01:13:09 +0000 |
|---|---|---|
| committer | Richard M. Stallman | 2009-08-13 01:13:09 +0000 |
| commit | 76e1e40b4eeb45f485f03069a0a9a43480779dfc (patch) | |
| tree | 4686af921ea3de783c288266c2565ff69d993189 | |
| parent | 5c9509238d351efce4bb9793cad4678d72656b68 (diff) | |
| download | emacs-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/ChangeLog | 3 | ||||
| -rw-r--r-- | lisp/mail/rmail.el | 53 |
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))) | 2489 | Return 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 | ||