Function: rmail-only-expunge
rmail-only-expunge is an interactive and byte-compiled function
defined in rmail.el.gz.
Signature
(rmail-only-expunge &optional DONT-SHOW)
Documentation
Actually erase all deleted messages in the file.
Key Bindings
Source Code
;; Defined in /usr/src/emacs/lisp/mail/rmail.el.gz
(defun rmail-only-expunge (&optional dont-show)
"Actually erase all deleted messages in the file."
(interactive)
(rmail-swap-buffers-maybe)
(set-buffer rmail-buffer)
(message "Expunging deleted messages...")
;; Discard all undo records for this buffer.
(or (eq buffer-undo-list t)
(setq buffer-undo-list nil))
(rmail-maybe-set-message-counters)
(let* ((omax (- (buffer-size) (point-max)))
(omin (- (buffer-size) (point-min)))
(opoint (if (and (> rmail-current-message 0)
(rmail-message-deleted-p rmail-current-message))
0
(if rmail-enable-mime
(with-current-buffer rmail-view-buffer
(- (point)(point-min)))
(- (point) (point-min)))))
(messages-head (cons (aref rmail-message-vector 0) nil))
(messages-tail messages-head)
;; Don't make any undo records for the expunging.
(buffer-undo-list t)
(win))
(unwind-protect
(save-excursion
(widen)
(goto-char (point-min))
(let ((counter 0)
(number 1)
new-summary
(new-msgref (list (list 0)))
(buffer-read-only nil)
(total rmail-total-messages)
(new-message-number rmail-current-message)
(messages rmail-message-vector)
(deleted rmail-deleted-vector)
(summary rmail-summary-vector))
(setq rmail-total-messages nil
rmail-current-message nil
rmail-message-vector nil
rmail-deleted-vector nil
rmail-summary-vector nil)
(while (<= number total)
(if (= (aref deleted number) ?D)
(progn
(delete-region (aref messages number)
(aref messages (1+ number)))
(move-marker (aref messages number) nil)
(if (> new-message-number counter)
(setq new-message-number (1- new-message-number))))
(setq counter (1+ counter))
(setq messages-tail
(setcdr messages-tail
(cons (aref messages number) nil)))
(setq new-summary
(cons (if (= counter number) (aref summary (1- number)))
new-summary))
(setq new-msgref
(cons (aref rmail-msgref-vector number)
new-msgref))
(setcar (car new-msgref) counter))
(if (zerop (% (setq number (1+ number)) 20))
(message "Expunging deleted messages...%d" number)))
(setq messages-tail
(setcdr messages-tail
(cons (aref messages number) nil)))
(setq rmail-current-message new-message-number
rmail-total-messages counter
rmail-message-vector (apply 'vector messages-head)
rmail-deleted-vector (make-string (1+ counter) ?\s)
rmail-summary-vector (vconcat (nreverse new-summary))
rmail-msgref-vector (apply 'vector (nreverse new-msgref))
win t)))
(message "Expunging deleted messages...done")
(if (not win)
(narrow-to-region (- (buffer-size) omin) (- (buffer-size) omax)))
(if (not dont-show)
(rmail-show-message (min rmail-current-message rmail-total-messages)))
(if rmail-enable-mime
(goto-char (+ (point-min) opoint))
(goto-char (+ (point) opoint))))))