;;;###autoload
(defcustom rmail-summary-line-count-flag t
- "*Non-nil if Rmail summary should show the number of lines in each message."
+ "*Non-nil means Rmail summary should show the number of lines in each message."
:type 'boolean
:group 'rmail-summary)
(defvar rmail-summary-font-lock-keywords
- '(("^....D.*" . font-lock-string-face) ; Deleted.
- ("^....-.*" . font-lock-type-face) ; Unread.
+ '(("^.....D.*" . font-lock-string-face) ; Deleted.
+ ("^.....-.*" . font-lock-type-face) ; Unread.
;; Neither of the below will be highlighted if either of the above are:
- ("^....[^D-] \\(......\\)" 1 font-lock-keyword-face) ; Date.
- ("{ \\([^\n}]+\\),}" 1 font-lock-comment-face)) ; Labels.
+ ("^.....[^D-] \\(......\\)" 1 font-lock-keyword-face) ; Date.
+ ("{ \\([^\n}]+\\) }" 1 font-lock-comment-face)) ; Labels.
"Additional expressions to highlight in Rmail Summary mode.")
;; Entry points for making a summary buffer.
(interactive "sRegexp to summarize by: ")
(if (string= regexp "")
(setq regexp (or rmail-last-regexp
- (error "No regexp specified."))))
+ (error "No regexp specified"))))
(setq rmail-last-regexp regexp)
(rmail-new-summary (concat "regexp " regexp)
(list 'rmail-summary-by-regexp regexp)
(defun rmail-summary-by-topic (subject &optional whole-message)
"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),
+but if WHOLE-MESSAGE is non-nil (prefix arg given),
look in the whole message.
SUBJECT is a string of regexps separated by commas."
(interactive "sTopics to summarize by: \nP")
(progn (search-forward (if whole-message "\^_" "\n\n")) (point)))
(goto-char (point-min))
(if whole-message (re-search-forward subject nil t)
- (string-match subject (or (funcall rmail-summary-line-decoder
- (mail-fetch-field "Subject")) "")) )))
+ (string-match subject (let ((subj (mail-fetch-field "Subject")))
+ (if subj
+ (funcall rmail-summary-line-decoder subj)
+ ""))))))
;;;###autoload
(defun rmail-summary-by-senders (senders)
new-summary-line-count))
(rmail-make-summary-line-1 msg)))))
;; Fix up the part of the summary that says "deleted" or "unseen".
- (aset line 4
+ (aset line 5
(if (rmail-message-deleted-p msg) ?\D
(if (= ?0 (char-after (+ 3 (rmail-msgbeg msg))))
?\- ?\ )))
""
(concat "{"
(buffer-substring (point)
- (progn (end-of-line) (point)))
- "} ")))))
+ (progn (end-of-line)
+ (backward-char)
+ (if (looking-at ",")
+ (point)
+ (1+ (point)))))
+ " } ")))))
(line
(progn
(forward-line 1)
(setq pos (string-match "#" line))
(aset rmail-summary-vector (1- msg)
(funcall rmail-summary-line-decoder
- (concat (format "%4d " msg)
+ (concat (format "%5d " msg)
(substring line 0 pos)
labels
(substring line (1+ pos)))))
Usually you don't have to set this variable, except if you collect mails
sent by you under different user names.
-Then it should be a regexp matching your mail adresses.
+Then it should be a regexp matching your mail addresses.
Setting this variable has an effect only before reading a mail."
:type '(choice (const :tag "None" nil) regexp)
(cond ((re-search-forward "\\([^0-9:]\\)\\([0-3]?[0-9]\\)\\([- \t_]+\\)\\([adfjmnos][aceopu][bcglnprtvy]\\)"
(save-excursion (end-of-line) (point)) t)
(format "%2d-%3s"
- (string-to-int (buffer-substring
- (match-beginning 2)
- (match-end 2)))
+ (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]?\\)"
(save-excursion (end-of-line) (point)) t)
(format "%2d-%3s"
- (string-to-int (buffer-substring
- (match-beginning 4)
- (match-end 4)))
+ (string-to-number (buffer-substring
+ (match-beginning 4)
+ (match-end 4)))
(buffer-substring
(match-beginning 2) (match-end 2))))
((re-search-forward "\\(19\\|20\\)\\([0-9][0-9]\\)-\\([01][0-9]\\)-\\([0-3][0-9]\\)"
(t "??????"))))
" "
(save-excursion
- (if (not (re-search-forward "^From:[ \t]*" nil t))
- " "
- (let* ((from (mail-strip-quoted-names
- (buffer-substring
- (1- (point))
- ;; Get all the lines of the From field
- ;; so that we get a whole comment if there is one,
- ;; so that mail-strip-quoted-names can discard it.
- (let ((opoint (point)))
- (while (progn (forward-line 1)
- (looking-at "[ \t]")))
- ;; Back up over newline, then trailing spaces or tabs
- (forward-char -1)
- (skip-chars-backward " \t")
- (point)))))
- len mch lo)
- (if (string-match
- (or rmail-user-mail-address-regexp
- (concat "^\\("
- (regexp-quote (user-login-name))
- "\\($\\|@\\)\\|"
- (regexp-quote
- ;; Don't lose if run from init file
- ;; where user-mail-address is not
- ;; set yet.
- (or user-mail-address
- (concat (user-login-name) "@"
- (or mail-host-address
- (system-name)))))
- "\\>\\)"))
- from)
- (save-excursion
- (goto-char (point-min))
- (if (not (re-search-forward "^To:[ \t]*" nil t))
- nil
- (setq from
- (concat "to: "
- (mail-strip-quoted-names
- (buffer-substring
- (point)
- (progn (end-of-line)
- (skip-chars-backward " \t")
- (point)))))))))
+ (let* ((from (and (re-search-forward "^From:[ \t]*" nil t)
+ (mail-strip-quoted-names
+ (buffer-substring
+ (1- (point))
+ ;; Get all the lines of the From field
+ ;; so that we get a whole comment if there is one,
+ ;; so that mail-strip-quoted-names can discard it.
+ (let ((opoint (point)))
+ (while (progn (forward-line 1)
+ (looking-at "[ \t]")))
+ ;; Back up over newline, then trailing spaces or tabs
+ (forward-char -1)
+ (skip-chars-backward " \t")
+ (point))))))
+ len mch lo)
+ (if (or (null from)
+ (string-match
+ (or rmail-user-mail-address-regexp
+ (concat "^\\("
+ (regexp-quote (user-login-name))
+ "\\($\\|@\\)\\|"
+ (regexp-quote
+ ;; Don't lose if run from init file
+ ;; where user-mail-address is not
+ ;; set yet.
+ (or user-mail-address
+ (concat (user-login-name) "@"
+ (or mail-host-address
+ (system-name)))))
+ "\\>\\)"))
+ from))
+ ;; No From field, or it's this user.
+ (save-excursion
+ (goto-char (point-min))
+ (if (not (re-search-forward "^To:[ \t]*" nil t))
+ nil
+ (setq from
+ (concat "to: "
+ (mail-strip-quoted-names
+ (buffer-substring
+ (point)
+ (progn (end-of-line)
+ (skip-chars-backward " \t")
+ (point)))))))))
+ (if (null from)
+ " "
(setq len (length from))
(setq mch (string-match "[@%]" from))
(format "%25s"
non-del-msg-found)))
(setq count (1- count))))
(beginning-of-line)
- (display-buffer rmail-view-buffer)
- )
+ (display-buffer rmail-view-buffer))
(defun rmail-summary-previous-msg (&optional number)
+ "Display previous non-deleted msg from rmail file.
+With optional prefix argument NUMBER, moves backward this number of
+non-deleted messages."
(interactive "p")
(rmail-summary-next-msg (- (if number number 1))))
(defun rmail-summary-next-labeled-message (n labels)
- "Show next message with LABEL. Defaults to last labels used.
+ "Show next message with LABELS. Defaults to last labels used.
With prefix argument N moves forward N messages with these labels."
(interactive "p\nsMove to next msg with labels: ")
(let (msg)
(rmail-summary-goto-msg msg)))
(defun rmail-summary-previous-labeled-message (n labels)
- "Show previous message with LABEL. Defaults to last labels used.
+ "Show previous message with LABELS. Defaults to last labels used.
With prefix argument N moves backward N messages with these labels."
(interactive "p\nsMove to previous msg with labels: ")
(let (msg)
;; Advance thru summary.
(forward-line (if forward 1 -1))
;; Get msg number of this line.
- (setq i (string-to-int
+ (setq i (string-to-number
(buffer-substring (point)
- (min (point-max) (+ 5 (point))))))
+ (min (point-max) (+ 6 (point))))))
;; See if that msg has desired subject.
(save-excursion
(set-buffer rmail-buffer)
(make-local-variable 'rmail-summary-redo)
(setq rmail-summary-redo nil)
(make-local-variable 'revert-buffer-function)
- (make-local-hook 'post-command-hook)
(make-local-variable 'font-lock-defaults)
(setq font-lock-defaults '(rmail-summary-font-lock-keywords t))
(rmail-summary-enable)
- (run-hooks 'rmail-summary-mode-hook))
+ (run-mode-hooks 'rmail-summary-mode-hook))
;; Summary features need to be disabled during edit mode.
(defun rmail-summary-disable ()
(forward-line -1))
(beginning-of-line)
(skip-chars-forward " ")
- (let ((msg-num (string-to-int (buffer-substring
- (point)
- (progn (skip-chars-forward "0-9")
- (point))))))
+ (let ((msg-num (string-to-number (buffer-substring
+ (point)
+ (progn (skip-chars-forward "0-9")
+ (point))))))
;; Always leave `unseen' removed
;; if we get out of isearch mode.
;; Don't let a subsequent isearch restore that `unseen'.
(buf rmail-buffer)
(cur (point))
message-not-found
- (curmsg (string-to-int
+ (curmsg (string-to-number
(buffer-substring (point)
- (min (point-max) (+ 5 (point))))))
+ (min (point-max) (+ 6 (point))))))
(total (save-excursion (set-buffer buf) rmail-total-messages)))
;; If message number N was specified, find that message's line
;; or set message-not-found.
(if (< n 1)
(progn (message "No preceding message")
(setq n 1)))
- (if (> n total)
+ (if (and (> n total)
+ (> total 0))
(progn (message "No following message")
(goto-char (point-max))
(rmail-summary-goto-msg nil nowarn skip-rmail)))
(goto-char (point-min))
- (if (not (re-search-forward (format "^%4d[^0-9]" n) nil t))
+ (if (not (re-search-forward (format "^%5d[^0-9]" n) nil t))
(progn (or nowarn (message "Message %d not found" n))
(setq n curmsg)
(setq message-not-found t)
;;;; *** Rmail Summary Mailing Commands ***
(defun rmail-summary-override-mail-send-and-exit ()
- "Replace bindings to 'mail-send-and-exit with 'rmail-summary-send-and-exit"
+ "Replace bindings to `mail-send-and-exit' with `rmail-summary-send-and-exit'."
(use-local-map (copy-keymap (current-local-map)))
(dolist (key (where-is-internal 'mail-send-and-exit))
(define-key (current-local-map) key 'rmail-summary-send-and-exit)))
(rmail-summary-override-mail-send-and-exit)))
(defun rmail-summary-resend ()
- "Resend current message using 'rmail-resend'."
+ "Resend current message using `rmail-resend'."
(interactive)
(save-excursion
(let ((window (get-buffer-window rmail-buffer)))
(list (rmail-output-read-rmail-file-name)
(prefix-numeric-value current-prefix-arg))))
(let ((i 0) prev-msg)
- (while
+ (while
(and (< i n)
(progn (rmail-summary-goto-msg)
(not (eq prev-msg
(setq prev-msg
- (with-current-buffer rmail-buffer
+ (with-current-buffer rmail-buffer
rmail-current-message))))))
(setq i (1+ i))
(with-current-buffer rmail-buffer
(progn (require 'rmailout)
(list (rmail-output-read-file-name)
(prefix-numeric-value current-prefix-arg))))
- (let ((i 0))
- (while (< i n)
+ (let ((i 0) prev-msg)
+ (while
+ (and (< i n)
+ (progn (rmail-summary-goto-msg)
+ (not (eq prev-msg
+ (setq prev-msg
+ (with-current-buffer rmail-buffer
+ rmail-current-message))))))
(setq i (1+ i))
(with-current-buffer rmail-buffer
(let ((rmail-delete-after-output nil))
(if files
(progn
(define-key rmail-summary-mode-map [menu-bar classify input-menu]
- (cons "Input Rmail File"
- (rmail-list-to-menu "Input Rmail File"
+ (cons "Input Rmail File"
+ (rmail-list-to-menu "Input Rmail File"
files
'rmail-summary-input)))
(define-key rmail-summary-mode-map [menu-bar classify output-menu]
- (cons "Output Rmail File"
- (rmail-list-to-menu "Output Rmail File"
+ (cons "Output Rmail File"
+ (rmail-list-to-menu "Output Rmail File"
files
'rmail-summary-output-to-rmail-file))))
(define-key rmail-summary-mode-map [menu-bar classify input-menu]
(provide 'rmailsum)
+;;; arch-tag: 556079ee-75c1-47f5-9884-2e0a0bc6c5a1
;;; rmailsum.el ends here