;;;###autoload
(defun rmail-summary-by-senders (senders)
- "Display a summary of all messages with the given SENDERS.
-SENDERS is a string of names separated by commas."
+ "Display a summary of all messages whose \"From\" field matches SENDERS.
+SENDERS is a string of regexps separated by commas."
(interactive "sSenders to summarize by: ")
(rmail-new-summary
(concat "senders " senders)
summary-msgs))))
(setq msgnum (1+ msgnum))
;; Provide a periodic User progress message.
- (if (zerop (% rmail-new-summary-line-count 10))
+ (if (and (not (zerop rmail-new-summary-line-count))
+ (zerop (% rmail-new-summary-line-count 10)))
(message "Computing summary lines...%d"
rmail-new-summary-line-count)))
(setq summary-msgs (nreverse summary-msgs)))
sumbuf))
(defun rmail-get-create-summary-buffer ()
- "Obtain a summary buffer by re-using an existing summary
-buffer, or by creating a new summary buffer."
+ "Return the Rmail summary buffer.
+If necessary, it is created and undo is disabled."
(if (and rmail-summary-buffer (buffer-name rmail-summary-buffer))
rmail-summary-buffer
- (generate-new-buffer (concat (buffer-name) "-summary"))))
+ (let ((buff (generate-new-buffer (concat (buffer-name) "-summary"))))
+ (with-current-buffer buff
+ (setq buffer-undo-list t))
+ buff)))
\f
;; Low levels of generating a summary.
(concat (save-excursion
(if (not (re-search-forward "^Date:" nil t))
" "
- (cond ((re-search-forward "\\([^0-9:]\\)\\([0-3]?[0-9]\\)\\([- \t_]+\\)\\([adfjmnos][aceopu][bcglnprtvy]\\)"
- (line-end-position) t)
+ ;; Match month names case-insensitively
+ (cond ((let ((case-fold-search t))
+ (re-search-forward "\\([^0-9:]\\)\\([0-3]?[0-9]\\)\\([- \t_]+\\)\\([adfjmnos][aceopu][bcglnprtvy]\\)"
+ (line-end-position) t))
(format "%2d-%3s"
(string-to-number (buffer-substring
(match-beginning 2)
(match-end 2)))
(buffer-substring
(match-beginning 4) (match-end 4))))
- ((re-search-forward "\\([^a-z]\\)\\([adfjmnos][acepou][bcglnprtvy]\\)\\([-a-z \t_]*\\)\\([0-9][0-9]?\\)"
- (line-end-position) t)
+ ((let ((case-fold-search t))
+ (re-search-forward "\\([^a-z]\\)\\([adfjmnos][acepou][bcglnprtvy]\\)\\([-a-z \t_]*\\)\\([0-9][0-9]?\\)"
+ (line-end-position) t))
(format "%2d-%3s"
(string-to-number (buffer-substring
(match-beginning 4)
(define-key rmail-summary-mode-map "\e\C-l" 'rmail-summary-by-labels)
(define-key rmail-summary-mode-map "\e\C-r" 'rmail-summary-by-recipients)
(define-key rmail-summary-mode-map "\e\C-s" 'rmail-summary-by-regexp)
+ ;; `f' for "from".
+ (define-key rmail-summary-mode-map "\e\C-f" 'rmail-summary-by-senders)
(define-key rmail-summary-mode-map "\e\C-t" 'rmail-summary-by-topic)
(define-key rmail-summary-mode-map "m" 'rmail-summary-mail)
(define-key rmail-summary-mode-map "\M-m" 'rmail-summary-retry-failure)
(define-key rmail-summary-mode-map "Q" 'rmail-summary-wipe)
(define-key rmail-summary-mode-map "r" 'rmail-summary-reply)
(define-key rmail-summary-mode-map "s" 'rmail-summary-expunge-and-save)
+ ;; See rms's comment in rmail.el
+;;; (define-key rmail-summary-mode-map "\er" 'rmail-summary-search-backward)
(define-key rmail-summary-mode-map "\es" 'rmail-summary-search)
(define-key rmail-summary-mode-map "t" 'rmail-summary-toggle-header)
(define-key rmail-summary-mode-map "u" 'rmail-summary-undelete)
(prefix-numeric-value current-prefix-arg))))
;; Don't use save-excursion because that prevents point from moving
;; properly in the summary buffer.
- (let ((buffer (current-buffer)))
+ (let ((buffer (current-buffer))
+ (selwin (selected-window)))
(unwind-protect
(progn
- (set-buffer rmail-buffer)
+ (pop-to-buffer rmail-buffer)
(rmail-search regexp n))
+ (select-window selwin)
(set-buffer buffer))))
(defun rmail-summary-toggle-header ()
;; Sorting messages in Rmail Summary buffer.
(defun rmail-summary-sort-by-date (reverse)
- "Sort messages of current Rmail summary by date.
-If prefix argument REVERSE is non-nil, sort them in reverse order."
+ "Sort messages of current Rmail summary by \"Date\" header.
+If prefix argument REVERSE is non-nil, sorts in reverse order."
(interactive "P")
(rmail-sort-from-summary (function rmail-sort-by-date) reverse))
(defun rmail-summary-sort-by-subject (reverse)
- "Sort messages of current Rmail summary by subject.
-If prefix argument REVERSE is non-nil, sort them in reverse order."
+ "Sort messages of current Rmail summary by \"Subject\" header.
+Ignores any \"Re: \" prefix. If prefix argument REVERSE is
+non-nil, sorts in reverse order."
(interactive "P")
(rmail-sort-from-summary (function rmail-sort-by-subject) reverse))
(defun rmail-summary-sort-by-author (reverse)
"Sort messages of current Rmail summary by author.
-If prefix argument REVERSE is non-nil, sort them in reverse order."
+This uses either the \"From\" or \"Sender\" header, downcased.
+If prefix argument REVERSE is non-nil, sorts in reverse order."
(interactive "P")
(rmail-sort-from-summary (function rmail-sort-by-author) reverse))
(defun rmail-summary-sort-by-recipient (reverse)
"Sort messages of current Rmail summary by recipient.
-If prefix argument REVERSE is non-nil, sort them in reverse order."
+This uses either the \"To\" or \"Apparently-To\" header, downcased.
+If prefix argument REVERSE is non-nil, sorts in reverse order."
(interactive "P")
(rmail-sort-from-summary (function rmail-sort-by-recipient) reverse))
(defun rmail-summary-sort-by-correspondent (reverse)
"Sort messages of current Rmail summary by other correspondent.
-If prefix argument REVERSE is non-nil, sort them in reverse order."
+This uses either the \"From\", \"Sender\", \"To\", or
+\"Apparently-To\" header, downcased. Uses the first header not
+excluded by `rmail-dont-reply-to-names'. If prefix argument
+REVERSE is non-nil, sorts in reverse order."
(interactive "P")
(rmail-sort-from-summary (function rmail-sort-by-correspondent) reverse))
(defun rmail-summary-sort-by-lines (reverse)
- "Sort messages of current Rmail summary by lines of the message.
-If prefix argument REVERSE is non-nil, sort them in reverse order."
+ "Sort messages of current Rmail summary by the number of lines.
+If prefix argument REVERSE is non-nil, sorts in reverse order."
(interactive "P")
(rmail-sort-from-summary (function rmail-sort-by-lines) reverse))
(defun rmail-summary-sort-by-labels (reverse labels)
"Sort messages of current Rmail summary by labels.
-If prefix argument REVERSE is non-nil, sort them in reverse order.
-KEYWORDS is a comma-separated list of labels."
+LABELS is a comma-separated list of labels.
+If prefix argument REVERSE is non-nil, sorts in reverse order."
(interactive "P\nsSort by labels: ")
(rmail-sort-from-summary
- (function (lambda (reverse)
- (rmail-sort-by-labels reverse labels)))
+ (lambda (reverse) (rmail-sort-by-labels reverse labels))
reverse))
(defun rmail-sort-from-summary (sortfun reverse)
- "Sort Rmail messages from Summary buffer and update it after sorting."
+ "Sort the Rmail buffer using sorting function SORTFUN.
+Passes REVERSE to SORTFUN as its sole argument. Then regenerates
+the summary. Note that the whole Rmail buffer is sorted, even if
+the summary is only showing a subset of messages."
(require 'rmailsort)
(let ((selwin (selected-window)))
(unwind-protect