Mercurial > emacs
changeset 2076:5140299129c3
(rmail-delete-forward): Go to summary buf to change D mark.
Always do the motion in the rmail buffer; let that handle summary.
(rmail-undelete-previous-message): Likewise.
(rmail-select-summary): New macro.
(rmail-show-message): Use rmail-select-summary.
(rmail-get-new-mail): Likewise.
(rmail-expunge): Likewise.
(rmail-bury): Record Rmail buffer to bury it later.
Major changes from Bob Weiner <weiner@pts.mot.com>
Handle some Emacs 18 function names to run in 18.
This is to facilitate working with Weiner.
(rmail-reply-prefix): New variable.
(rmail-reply): Use that variable to add to subject.
(rmail-retry-failure): Change binding to M-m.
(rmail-forward): Look for >From as well as for From.
Handle case where neither is found.
(rmail-last-regexp): New variable.
(rmail-mode): Make rmail-last-regexp local.
(rmail): Don't update rmail-mode data for old buffer
if it's not in rmail mode.
Error if in Rmail Edit mode.
(rmail-bury): New command, plus key binding.
(rmail-summary-by-topic): New key binding.
(rmail-insert-inbox-text): Check for pop case earlier.
(rmail-convert-to-babyl-format): Handle Content-Length field.
(rmail-maybe-display-summary): New function.
(rmail-redisplay-summary): New user option.
(rmail-undelete-previous-message, rmail-delete-forward):
(rmail-get-new-mail, rmail-show-message): Update summary buffer if any.
Call rmail-maybe-display-summary to put it back on screen.
(rmail-only-expunge): Renamed from rmail-expunge.
(rmail-expunge): New function.
(rmail-message-recipients-p, rmail-message-regexp-p): New functions.
(rmail-summary-exists, rmail-summary-displayed): New functions.
author | Richard M. Stallman <rms@gnu.org> |
---|---|
date | Tue, 09 Mar 1993 08:08:13 +0000 |
parents | ec62da254d4d |
children | 6885836c2f98 |
files | lisp/mail/rmail.el |
diffstat | 1 files changed, 259 insertions(+), 80 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/mail/rmail.el Tue Mar 09 05:40:33 1993 +0000 +++ b/lisp/mail/rmail.el Tue Mar 09 08:08:13 1993 +0000 @@ -1,6 +1,6 @@ ;;; rmail.el --- main code of "RMAIL" mail reader for Emacs. -;; Copyright (C) 1985, 1986, 1987, 1988, 1991, 1992 Free Software Foundation, Inc. +;; Copyright (C) 1985, 1986, 1987, 1988, 1993 Free Software Foundation, Inc. ;; Maintainer: FSF ;; Keywords: mail @@ -28,8 +28,24 @@ ;; selection by dispatch table, summary by attributes and keywords, ;; expunging by dispatch table, sticky options for file commands. +;; Extended by Bob Weiner of Motorola +;; New features include: rmail and rmail-summary buffers remain +;; synchronized and key bindings basically operate the same way in both +;; buffers, summary by topic or by regular expression, rmail-reply-prefix +;; variable, and a bury rmail buffer (wipe) command. +;; + (require 'mail-utils) -; These variables now declared paths.el + +;; For Emacs V18 compatibility +(and (not (fboundp 'user-original-login-name)) + (fboundp 'user-real-login-name) + (fset 'user-original-login-name 'user-real-login-name)) +(and (not (fboundp 'buffer-disable-undo)) + (fboundp 'buffer-flush-undo) + (fset 'buffer-disable-undo 'buffer-flush-undo)) + +; These variables now declared in paths.el. ;(defvar rmail-spool-directory "/usr/spool/mail/" ; "This is the name of the directory used by the system mailer for\n\ ;delivering new mail. It's name should end with a slash.") @@ -65,9 +81,9 @@ \(the first name varies depending on the operating system, and the value of the environment variable MAIL overrides it).") -;; these may be altered by site-init.el to match the format of mmdf files -;; delimitation used on a given host (delim1 and delim2 from the config -;; files) +;; These may be altered by site-init.el to match the format of mmdf files +;; delimiting used on a given host (delim1 and delim2 from the config +;; files). (defvar mmdf-delim1 "^\001\001\001\001\n" "Regexp marking the start of an mmdf message") @@ -78,6 +94,9 @@ "If non nil, is a filter function for new headers in RMAIL. Called with region narrowed to unformatted header.") +(defvar rmail-reply-prefix "Re: " + "String to prepend to Subject line when replying to a message.") + (defvar rmail-mode-map nil) (defvar rmail-inbox-list nil) @@ -99,9 +118,10 @@ ;; Last individual label specified to a or k. (defvar rmail-last-label nil) -;; Last set of labels specified to C-M-n or C-M-p or C-M-l. +;; Last set of values specified to C-M-n, C-M-p, C-M-s or C-M-l. (defvar rmail-last-multi-labels nil) (defvar rmail-last-file nil) +(defvar rmail-last-regexp nil) (defvar rmail-last-rmail-file nil) ;;; Regexp matching the delimiter of messages in UNIX mail format @@ -145,7 +165,20 @@ "\n")) nil) - +;; Perform BODY in the summary buffer +;; in such a way that its cursor is properly updated in its own window. +(defmacro rmail-select-summary (&rest body) + (` (progn (if (rmail-summary-displayed) + (let ((window (selected-window))) + (unwind-protect + (progn + (pop-to-buffer rmail-summary-buffer) + (,@ body)) + (select-window window))) + (save-excursion + (set-buffer rmail-summary-buffer) + (progn (,@ body)))) + (rmail-maybe-display-summary)))) ;;;; *** Rmail Mode *** @@ -175,11 +208,14 @@ ;; in the last message in the RMAIL file. (let ((enable-local-variables nil)) (find-file file-name)) - (if (verify-visited-file-modtime existed) + (if (and (verify-visited-file-modtime existed) + (eq major-mode 'rmail-mode)) (progn (rmail-forget-messages) (rmail-set-message-counters)))) (let ((enable-local-variables nil)) (find-file file-name))) + (if (eq major-mode 'rmail-edit-mode) + (error "Exit Rmail Edit mode before getting new mail.")) (if (and existed (> (buffer-size) 0)) ;; Buffer not new and not empty; ensure in proper mode, but that's all. (or (eq major-mode 'rmail-mode) @@ -272,48 +308,51 @@ nil (setq rmail-mode-map (make-keymap)) (suppress-keymap rmail-mode-map) - (define-key rmail-mode-map "." 'rmail-beginning-of-message) - (define-key rmail-mode-map " " 'scroll-up) - (define-key rmail-mode-map "\177" 'scroll-down) - (define-key rmail-mode-map "n" 'rmail-next-undeleted-message) - (define-key rmail-mode-map "p" 'rmail-previous-undeleted-message) - (define-key rmail-mode-map "\en" 'rmail-next-message) - (define-key rmail-mode-map "\ep" 'rmail-previous-message) - (define-key rmail-mode-map "\e\C-n" 'rmail-next-labeled-message) - (define-key rmail-mode-map "\e\C-p" 'rmail-previous-labeled-message) - (define-key rmail-mode-map "a" 'rmail-add-label) - (define-key rmail-mode-map "k" 'rmail-kill-label) - (define-key rmail-mode-map "d" 'rmail-delete-forward) - (define-key rmail-mode-map "u" 'rmail-undelete-previous-message) - (define-key rmail-mode-map "x" 'rmail-expunge) - (define-key rmail-mode-map "s" 'rmail-expunge-and-save) - (define-key rmail-mode-map "g" 'rmail-get-new-mail) - (define-key rmail-mode-map "h" 'rmail-summary) + (define-key rmail-mode-map "a" 'rmail-add-label) + (define-key rmail-mode-map "b" 'rmail-bury) + (define-key rmail-mode-map "c" 'rmail-continue) + (define-key rmail-mode-map "d" 'rmail-delete-forward) + (define-key rmail-mode-map "\C-d" 'rmail-delete-backward) + (define-key rmail-mode-map "e" 'rmail-edit-current-message) + (define-key rmail-mode-map "f" 'rmail-forward) + (define-key rmail-mode-map "g" 'rmail-get-new-mail) + (define-key rmail-mode-map "h" 'rmail-summary) + (define-key rmail-mode-map "i" 'rmail-input) + (define-key rmail-mode-map "j" 'rmail-show-message) + (define-key rmail-mode-map "k" 'rmail-kill-label) + (define-key rmail-mode-map "l" 'rmail-summary-by-labels) (define-key rmail-mode-map "\e\C-h" 'rmail-summary) - (define-key rmail-mode-map "l" 'rmail-summary-by-labels) (define-key rmail-mode-map "\e\C-l" 'rmail-summary-by-labels) (define-key rmail-mode-map "\e\C-r" 'rmail-summary-by-recipients) (define-key rmail-mode-map "\e\C-s" 'rmail-summary-by-regexp) - (define-key rmail-mode-map "t" 'rmail-toggle-header) - (define-key rmail-mode-map "m" 'rmail-mail) - (define-key rmail-mode-map "r" 'rmail-reply) - (define-key rmail-mode-map "\e\C-m" 'rmail-retry-failure) - (define-key rmail-mode-map "c" 'rmail-continue) - (define-key rmail-mode-map "f" 'rmail-forward) + (define-key rmail-mode-map "\e\C-t" 'rmail-summary-by-topic) + (define-key rmail-mode-map "m" 'rmail-mail) + (define-key rmail-mode-map "\em" 'rmail-retry-failure) + (define-key rmail-mode-map "n" 'rmail-next-undeleted-message) + (define-key rmail-mode-map "\en" 'rmail-next-message) + (define-key rmail-mode-map "\e\C-n" 'rmail-next-labeled-message) + (define-key rmail-mode-map "o" 'rmail-output-to-rmail-file) + (define-key rmail-mode-map "\C-o" 'rmail-output) + (define-key rmail-mode-map "p" 'rmail-previous-undeleted-message) + (define-key rmail-mode-map "\ep" 'rmail-previous-message) + (define-key rmail-mode-map "\e\C-p" 'rmail-previous-labeled-message) + (define-key rmail-mode-map "q" 'rmail-quit) + (define-key rmail-mode-map "r" 'rmail-reply) ;; I find I can't live without the default M-r command -- rms. -;; (define-key rmail-mode-map "\er" 'rmail-search-backwards) - (define-key rmail-mode-map "\es" 'rmail-search) - (define-key rmail-mode-map "<" 'rmail-first-message) - (define-key rmail-mode-map ">" 'rmail-last-message) - (define-key rmail-mode-map "j" 'rmail-show-message) - (define-key rmail-mode-map "o" 'rmail-output-to-rmail-file) - (define-key rmail-mode-map "\C-o" 'rmail-output) - (define-key rmail-mode-map "i" 'rmail-input) - (define-key rmail-mode-map "q" 'rmail-quit) - (define-key rmail-mode-map "?" 'describe-mode) - (define-key rmail-mode-map "w" 'rmail-edit-current-message) - (define-key rmail-mode-map "e" 'rmail-edit-current-message) - (define-key rmail-mode-map "\C-d" 'rmail-delete-backward)) +;; (define-key rmail-mode-map "\er" 'rmail-search-backwards) + (define-key rmail-mode-map "s" 'rmail-expunge-and-save) + (define-key rmail-mode-map "\es" 'rmail-search) + (define-key rmail-mode-map "t" 'rmail-toggle-header) + (define-key rmail-mode-map "u" 'rmail-undelete-previous-message) + (define-key rmail-mode-map "w" 'rmail-edit-current-message) + (define-key rmail-mode-map "x" 'rmail-expunge) + (define-key rmail-mode-map "." 'rmail-beginning-of-message) + (define-key rmail-mode-map "<" 'rmail-first-message) + (define-key rmail-mode-map ">" 'rmail-last-message) + (define-key rmail-mode-map " " 'scroll-up) + (define-key rmail-mode-map "\177" 'scroll-down) + (define-key rmail-mode-map "?" 'describe-mode) + ) ;; Rmail mode is suitable only for specially formatted data. (put 'rmail-mode 'mode-class 'special) @@ -339,6 +378,7 @@ \\[rmail-delete-backward] Delete this message, move to previous nondeleted. \\[rmail-undelete-previous-message] Undelete message. Tries current message, then earlier messages till a deleted message is found. +\\[rmail-edit-current-message] Edit the current message. \\[rmail-cease-edit] to return to Rmail. \\[rmail-expunge] Expunge deleted messages. \\[rmail-expunge-and-save] Expunge and save the file. \\[rmail-quit] Quit Rmail: expunge, save, then switch to another buffer. @@ -346,8 +386,8 @@ \\[rmail-get-new-mail] Move new mail from system spool directory or mbox into this file. \\[rmail-mail] Mail a message (same as \\[mail-other-window]). \\[rmail-continue] Continue composing outgoing message started before. -\\[rmail-reply] Reply to this message. Like m but initializes some fields. -\\[rmail-retry-failure] Send this message again. Used on a mailer failure message. +\\[rmail-reply] Reply to this message. Like \\[rmail-mail] but initializes some fields. +\\[rmail-retry-failure] Send this message again. Used on a mailer failure message. \\[rmail-forward] Forward this message to another user. \\[rmail-output-to-rmail-file] Output this message to an Rmail file (append it). \\[rmail-output] Output this message to a Unix-format mail file (append it). @@ -357,13 +397,14 @@ \\[rmail-next-labeled-message] Move to Next message with specified label (label defaults to last one specified). Standard labels: filed, unseen, answered, forwarded, deleted. - Any other label is present only if you add it with `a'. + Any other label is present only if you add it with \\[rmail-add-label]. \\[rmail-previous-labeled-message] Move to Previous message with specified label \\[rmail-summary] Show headers buffer, with a one line summary of each message. -\\[rmail-summary-by-labels] Like \\[rmail-summary] only just messages with particular label(s) are summarized. -\\[rmail-summary-by-recipients] Like \\[rmail-summary] only just messages with particular recipient(s) are summarized. -\\[rmail-toggle-header] Toggle header, show Rmail header if unformatted or vice versa. -\\[rmail-edit-current-message] Edit the current message. \\[rmail-cease-edit] to return to Rmail." +\\[rmail-summary-by-labels] Summarize only messages with particular label(s). +\\[rmail-summary-by-recipients] Summarize only messages with particular recipient(s). +\\[rmail-summary-by-regexp] Summarize only messages with particular regexp(s). +\\[rmail-summary-by-topic] Summarize only messages with subject line regexp(s). +\\[rmail-toggle-header] Toggle display of complete header." (interactive) (rmail-mode-2) (rmail-set-message-counters) @@ -393,6 +434,7 @@ (make-local-variable 'revert-buffer-function) (setq revert-buffer-function 'rmail-revert) (make-local-variable 'rmail-last-label) + (make-local-variable 'rmail-last-regexp) (make-local-variable 'rmail-deleted-vector) (make-local-variable 'rmail-summary-buffer) (make-local-variable 'rmail-summary-vector) @@ -462,7 +504,7 @@ ;;;###autoload (defun rmail-input (filename) - "Run RMAIL on file FILENAME." + "Run Rmail on file FILENAME." (interactive "FRun rmail on RMAIL file: ") (rmail filename)) @@ -546,6 +588,9 @@ (progn (goto-char opoint) (if (or file-name rmail-inbox-list) (message "(No new mail has arrived)"))) + (if (rmail-summary-exists) + (rmail-select-summary + (rmail-update-summary))) (message "%d new message%s read" new-messages (if (= 1 new-messages) "" "s")) (and (boundp 'display-time-string) @@ -559,7 +604,7 @@ (rmail-show-message))) (defun rmail-insert-inbox-text (files renamep) - (let (file tofile delete-files movemail) + (let (file tofile delete-files movemail popmail) (while files (setq file (expand-file-name (substitute-in-file-name (car files))) ;;>> un*x specific << @@ -570,32 +615,42 @@ ;; If getting from mail spool directory, ;; use movemail to move rather than just renaming, ;; so as to interlock with the mailer. - (setq movemail (equal (file-name-directory file) rmail-spool-directory)) + (setq movemail (equal (file-name-directory file) rmail-spool-directory) + popmail (string-match "^po:" (file-name-nondirectory file))) + (if popmail (setq file (file-name-nondirectory file) + renamep t)) (if movemail (progn (setq tofile (expand-file-name - ;; Generate name to move to from inbox name, - ;; in case of multiple inboxes that need moving. - (concat ".newmail-" (file-name-nondirectory file)) - (file-name-directory - (expand-file-name rmail-file-name)))) + ;; Generate name to move to from inbox name, + ;; in case of multiple inboxes that need moving. + (concat ".newmail-" (file-name-nondirectory file)) + ;; Use the directory of this rmail file + ;; because it's a nuisance to use the homedir + ;; if that is on a full disk and this rmail + ;; file isn't. + (file-name-directory + (expand-file-name buffer-file-name)))) ;; On some systems, /usr/spool/mail/foo is a directory ;; and the actual inbox is /usr/spool/mail/foo/foo. (if (file-directory-p file) (setq file (expand-file-name (user-original-login-name) file))))) - (if (or (and (file-exists-p tofile) - (/= 0 (nth 7 (file-attributes tofile)))) - (and (file-exists-p file) - (/= 0 (nth 7 (file-attributes file))))) - (message "Getting mail from %s..." file)) + (if popmail + (message "Getting mail from post office ...") + (if (or (and (file-exists-p tofile) + (/= 0 (nth 7 (file-attributes tofile)))) + (and (file-exists-p file) + (/= 0 (nth 7 (file-attributes file))))) + (message "Getting mail from %s..." file))) ;; Set TOFILE if have not already done so, and ;; rename or copy the file FILE to TOFILE if and as appropriate. (cond ((not renamep) (setq tofile file)) - ((or (file-exists-p tofile) (not (file-exists-p file))) + ((or (file-exists-p tofile) (and (not popmail) + (not (file-exists-p file)))) nil) - ((not movemail) + ((and (not movemail) (not popmail)) (rename-file file tofile nil) ;; Make the real inbox file empty. ;; Leaving it deleted could cause lossage @@ -704,6 +759,26 @@ (setq start (point)) (insert "\^L\n0, unseen,,\n*** EOOH ***\n") (rmail-nuke-pinhead-header) + ;; If this message has a Content-Length field, + ;; skip to the end of the contents. + (let* ((header-end (save-excursion + (and (re-search-forward "\n\n" nil t) + (point)))) + (case-fold-search t) + (size + ;; Get the numeric value from the Content-Length field. + (save-excursion + ;; Back up to end of prev line, + ;; in case the Content-Length field comes first. + (forward-char -1) + (and (search-forward "\ncontent-length: " + header-end t) + (let ((beg (point)) + (eol (progn (end-of-line) (point)))) + (read (buffer-substring beg eol))))))) + (if size + (goto-char (+ header-end size)))) + (if (re-search-forward (concat "^[\^_]?\\(" rmail-unix-mail-delimiter @@ -1070,7 +1145,8 @@ (rmail-show-message rmail-current-message)) (defun rmail-show-message (&optional n) - "Show message number N (prefix argument), counting from start of file." + "Show message number N (prefix argument), counting from start of file. +If summary buffer is currently displayed, update current message there also." (interactive "p") (rmail-maybe-set-message-counters) (widen) @@ -1104,6 +1180,13 @@ (goto-char (point-min)) (rmail-display-labels) (run-hooks 'rmail-show-message-hook) + ;; If there is a summary buffer, try to move to this message + ;; in that buffer. But don't complain if this message + ;; is not mentioned in the summary. + (if (rmail-summary-exists) + (let ((curr-msg rmail-current-message)) + (rmail-select-summary + (rmail-summary-goto-msg curr-msg t t)))) (if blurb (message blurb)))))) @@ -1174,6 +1257,24 @@ (setq mid (+ low (/ (- high low) 2)))) (if (>= where (rmail-msgbeg high)) high low))) +(defun rmail-message-recipients-p (msg recipients &optional primary-only) + (save-restriction + (goto-char (rmail-msgbeg msg)) + (search-forward "\n*** EOOH ***\n") + (narrow-to-region (point) (progn (search-forward "\n\n") (point))) + (or (string-match recipients (or (mail-fetch-field "To") "")) + (string-match recipients (or (mail-fetch-field "From") "")) + (if (not primary-only) + (string-match recipients (or (mail-fetch-field "Cc") "")))))) + +(defun rmail-message-regexp-p (msg regexp) + "Return t, if for message number MSG, regexp REGEXP matches in the header." + (goto-char (rmail-msgbeg msg)) + (let ((end + (save-excursion + (search-forward "*** EOOH ***" (point-max)) (point)))) + (re-search-forward regexp end t))) + (defvar rmail-search-last-regexp nil) (defun rmail-search (regexp &optional n) "Show message containing next match for REGEXP. @@ -1307,7 +1408,12 @@ (error "No previous deleted message") (if (/= msg rmail-current-message) (rmail-show-message msg)) - (rmail-set-attribute "deleted" nil)))) + (rmail-set-attribute "deleted" nil) + (if (rmail-summary-exists) + (save-excursion + (set-buffer rmail-summary-buffer) + (rmail-summary-mark-undeleted msg))) + (rmail-maybe-display-summary)))) (defun rmail-delete-forward (&optional backward) "Delete this message and move to next nondeleted one. @@ -1315,7 +1421,13 @@ With prefix argument, delete and move backward." (interactive "P") (rmail-set-attribute "deleted" t) - (rmail-next-undeleted-message (if backward -1 1))) + (let ((del-msg rmail-current-message)) + (if (rmail-summary-exists) + (save-excursion + (set-buffer rmail-summary-buffer) + (rmail-summary-mark-deleted del-msg))) + (rmail-next-undeleted-message (if backward -1 1)) + (rmail-maybe-display-summary))) (defun rmail-delete-backward () "Delete this message and move to previous nondeleted one. @@ -1323,7 +1435,7 @@ (interactive) (rmail-delete-forward t)) -(defun rmail-expunge () +(defun rmail-only-expunge () "Actually erase all deleted messages in the file." (interactive) (message "Expunging deleted messages...") @@ -1392,12 +1504,21 @@ (rmail-show-message (if (zerop rmail-current-message) 1 nil)) (forward-char opoint)))) + +(defun rmail-expunge () + "Erase deleted messages from Rmail file and summary buffer." + (interactive) + (rmail-only-expunge) + (if (rmail-summary-exists) + (rmail-select-summary + (rmail-update-summary)))) ;;;; *** Rmail Mailing Commands *** (defun rmail-mail () - "Send mail in another window. While composing the message, use -\\[mail-yank-original] to yank the original message into it." + "Send mail in another window. +While composing the message, use \\[mail-yank-original] to yank the +original message into it." (interactive) (mail-other-window nil nil nil nil nil (current-buffer))) @@ -1450,9 +1571,10 @@ message-id (cond (resent-reply-to (mail-fetch-field "resent-message-id" t)) ((mail-fetch-field "message-id")))))) - (and subject - (string-match "\\`Re: " subject) - (setq subject (substring subject 4))) + (and (stringp subject) + (or (string-match (concat "\\`" (regexp-quote rmail-reply-prefix)) + subject) + (setq subject (concat rmail-reply-prefix subject)))) (mail-other-window nil (mail-strip-quoted-names reply-to) subject @@ -1528,8 +1650,13 @@ (interactive) (let ((forward-buffer (current-buffer)) (subject (concat "[" - (mail-strip-quoted-names (mail-fetch-field "From")) - ": " (or (mail-fetch-field "Subject") "") "]"))) + (let ((from (or (mail-fetch-field "From") + (mail-fetch-field ">From")))) + (if from + (concat (mail-strip-quoted-names from) ": ") + "")) + (or (mail-fetch-field "Subject") "") + "]"))) ;; Turn off the usual actions for initializing the message body ;; because we want to get only the text from the failure message. (let (mail-signature mail-setup-hook) @@ -1544,7 +1671,8 @@ (list (list (function (lambda (buf msgnum) (save-excursion (set-buffer buf) - (rmail-set-attribute "forwarded" t msgnum)))) + (rmail-set-attribute + "forwarded" t msgnum)))) (current-buffer) rmail-current-message))) (save-excursion @@ -1646,6 +1774,38 @@ (insert orig-message) (goto-char (point-min)) (end-of-line)))))) + +(defun rmail-bury () + "Bury current Rmail buffer and its summary buffer." + (interactive) + (let ((rmail-buffer (current-buffer))) + (if (rmail-summary-exists) + (let (window) + (while (setq window (get-buffer-window rmail-summary-buffer)) + (set-window-buffer (other-buffer rmail-summary-buffer))) + (bury-buffer rmail-summary-buffer))) + (switch-to-buffer (other-buffer (current-buffer))) + (bury-buffer rmail-buffer))) + +(defun rmail-summary-exists () + "Non-nil iff in an RMAIL buffer and an associated summary buffer exists. +Non-nil value returned is the summary buffer." + (and rmail-summary-buffer (buffer-name rmail-summary-buffer) + rmail-summary-buffer)) + +(defun rmail-summary-displayed () + "t iff in RMAIL buffer and an associated summary buffer is displayed." + (and rmail-summary-buffer (get-buffer-window rmail-summary-buffer))) + +(defvar rmail-redisplay-summary nil + "*Non-nil means Rmail should show the summary when it changes. +This has an effect only if a summary buffer exists.") + +;; Put the summary buffer back on the screen, if user wants that. +(defun rmail-maybe-display-summary () + (and rmail-summary-buffer (buffer-name rmail-summary-buffer) + rmail-redisplay-summary + (display-buffer rmail-summary-buffer))) ;;;; *** Rmail Specify Inbox Files *** @@ -1677,6 +1837,10 @@ With prefix argument N moves backward N messages with this label." t) +(autoload 'rmail-read-label "rmailkwd" + "PROMPT and read with completion an Rmail message label." + t) + ;;;; *** Rmail Edit Mode *** (autoload 'rmail-edit-current-message "rmailedit" @@ -1698,7 +1862,22 @@ "Display a summary of all messages with the given RECIPIENTS. Normally checks the To, From and Cc fields of headers; but if PRIMARY-ONLY is non-nil (prefix arg given), only look in the To and From fields. -RECIPIENTS is a string of names separated by commas." +RECIPIENTS is a string of regexps separated by commas." + t) + +(autoload 'rmail-summary-by-regexp "rmailsum" + "Display a summary of all messages according to regexp REGEXP. +If the regular expression is found in the header of the message +\(including in the date and other lines, as well as the subject line), +Emacs will list the header line in the RMAIL-summary." + t) + +(autoload 'rmail-summary-by-topic "rmailsum" + "Display a summary of all messages with the given SUBJECT. +Normally checks the Subject field of headers; +but if WHOLE-MESSAGE is non-nil (prefix arg given), + look in the whole message. +SUBJECT is a string of regexps separated by commas." t) ;;;; *** Rmail output messages to files ***