[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] emacs/lisp/mail pmail.el
From: |
Richard M. Stallman |
Subject: |
[Emacs-diffs] emacs/lisp/mail pmail.el |
Date: |
Mon, 05 Jan 2009 15:49:51 +0000 |
CVSROOT: /cvsroot/emacs
Module name: emacs
Changes by: Richard M. Stallman <rms> 09/01/05 15:49:50
Modified files:
lisp/mail : pmail.el
Log message:
(basic-save-buffer): Protect buffer-modified flag around first swap.
(pmail-show-message): Protect buffer-modified flag around swap.
(pmail-change-major-mode-hook): Likewise.
(pmail-use-collection-buffer, pmail-swap-buffers-maybe): Likewise.
(pmail-error-bad-format): Always phrase the error as about an invalid
message.
(pmail-convert-file-maybe): Don't use pmail-error-bad-format.
(pmail-mode-map): Move pmail-widen to C-c C-w.
(pmail-mode-1): Don't alter mode-line-modified.
(pmail-perm-variables): Turn off undo in view buffer.
(pmail-variables): Turn off undo.
(pmail-show-message): Delete useless calls to `widen'.
Avoid passing thru temp buffer if we don't need
base64 or quoted printable decoding for whole message.
(pmail-keywords): Variable deleted.
(pmail-last-label, pmail-last-multi-labels): Moved to pmailkwd.el.
(pmail-perm-variables): Don't mess with pmail-last-label.
Don't mess with pmail-keywords.
(pmail-copy-headers): Doc fix.
(pmail-set-header): New function.
(pmail-get-keywords): Doc fix.
(pmail-get-labels): New function.
(pmail-display-labels): Use pmail-get-labels.
(pmail-set-attribute): Mark pmail-buffer modified
if we change an attribute.
(pmail-apply-in-message): New function.
(pmail-message-labels-p): Function moved to pmailsum.el.
(pmail-message-recipients-p, pmail-message-regexp-p): Likewise.
(pmail-current-subject, pmail-current-subject-regexp): Fns deleted.
(pmail-simplified-subject, pmail-simplified-subject-regexp): New fns.
(pmail-next-same-subject): Fetch each msg's subject and compare.
(pmail-speedbar-move-message): Use pmail-output.
(pmail-construct-io-menu): Use pmail-output.
(pmail-default-pmail-file): Variable deleted.
(pmail-auto-file): Use pmail-output.
(pmail-mode-map): Remove pmail-output-to-babyl-file.
Add pmail-output-as-seen.
(pmail-mode): Update output commands in doc string.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/emacs/lisp/mail/pmail.el?cvsroot=emacs&r1=1.44&r2=1.45
Patches:
Index: pmail.el
===================================================================
RCS file: /cvsroot/emacs/emacs/lisp/mail/pmail.el,v
retrieving revision 1.44
retrieving revision 1.45
diff -u -b -r1.44 -r1.45
--- pmail.el 5 Jan 2009 03:22:34 -0000 1.44
+++ pmail.el 5 Jan 2009 15:49:50 -0000 1.45
@@ -60,9 +60,18 @@
advice is temporarily used by pmail until a satisfactory solution
can be written."
(if (not buffer-swapped-with)
- ad-do-it
+ (progn
+;; (if (and (string= "PMAIL" (buffer-name))
+;; (< (buffer-size) 1000000))
+;; (debug))
+ ad-do-it)
(unwind-protect
(let ((modp (buffer-modified-p)))
+;; (save-match-data
+;; (let ((case-fold-search nil))
+;; (unless (or (string-match "PMAIL" (buffer-name))
+;; (string-match "xmail" (buffer-name)))
+;; (debug))))
(buffer-swap-text buffer-swapped-with)
(set-buffer-modified-p modp)
ad-do-it)
@@ -567,9 +576,6 @@
(defvar pmail-inbox-list nil)
(put 'pmail-inbox-list 'permanent-local t)
-(defvar pmail-keywords nil)
-(put 'pmail-keywords 'permanent-local t)
-
(defvar pmail-buffer nil
"The PMAIL buffer related to the current buffer.
In an PMAIL buffer, this holds the PMAIL buffer itself.
@@ -612,13 +618,6 @@
;; `Sticky' default variables.
-;; Last individual label specified to a or k.
-(defvar pmail-last-label nil)
-(put 'pmail-last-label 'permanent-local t)
-
-;; Last set of values specified to C-M-n, C-M-p, C-M-s or C-M-l.
-(defvar pmail-last-multi-labels nil)
-
(defvar pmail-last-regexp nil)
(put 'pmail-last-regexp 'permanent-local t)
@@ -626,10 +625,6 @@
"*Default file name for \\[pmail-output]."
:type 'file
:group 'pmail-files)
-(defcustom pmail-default-pmail-file "~/XMAIL"
- "*Default file name for \\[pmail-output-to-babyl-file]."
- :type 'file
- :group 'pmail-files)
(defcustom pmail-default-body-file "~/mailout"
"*Default file name for \\[pmail-output-body-to-file]."
:type 'file
@@ -946,14 +941,14 @@
((equal (point-min) (point-max))
(message "Empty Pmail file."))
((looking-at "From "))
- (t (pmail-error-bad-format))))
+ (t (error "Invalid mbox file"))))
(defun pmail-error-bad-format (&optional msgnum)
"Report that the buffer is not in the mbox file format.
MSGNUM, if present, indicates the malformed message."
(if msgnum
- (error "Message %s is not a valid RFC2822 message." msgnum)
- (error "Invalid mbox format mail file.")))
+ (error "Message %d is not a valid RFC2822 message" msgnum)
+ (error "Message is not a valid RFC2822 message")))
(defun pmail-convert-babyl-to-mbox ()
"Convert the mail file from Babyl version 5 to mbox.
@@ -990,6 +985,8 @@
(substring content-type-header (match-beginning 1) (match-end 1))
'undecided)))
+;;; Set up Pmail mode keymaps
+
(defvar pmail-mode-map nil)
(if pmail-mode-map
nil
@@ -1032,7 +1029,7 @@
(define-key pmail-mode-map "t" 'pmail-toggle-header)
(define-key pmail-mode-map "u" 'pmail-undelete-previous-message)
(define-key pmail-mode-map "w" 'pmail-output-body-to-file)
- (define-key pmail-mode-map "C-w" 'pmail-widen)
+ (define-key pmail-mode-map "\C-c\C-w" 'pmail-widen)
(define-key pmail-mode-map "x" 'pmail-expunge)
(define-key pmail-mode-map "." 'pmail-beginning-of-message)
(define-key pmail-mode-map "/" 'pmail-end-of-message)
@@ -1067,10 +1064,10 @@
'("Output body to file..." . pmail-output-body-to-file))
(define-key pmail-mode-map [menu-bar classify output-inbox]
- '("Output (inbox)..." . pmail-output))
+ '("Output..." . pmail-output))
(define-key pmail-mode-map [menu-bar classify output]
- '("Output (Pmail)..." . pmail-output-to-babyl-file))
+ '("Output as seen..." . pmail-output-as-seen))
(define-key pmail-mode-map [menu-bar classify kill-label]
'("Kill Label..." . pmail-kill-label))
@@ -1238,8 +1235,8 @@
\\[pmail-reply] Reply to this message. Like \\[pmail-mail] but
initializes some fields.
\\[pmail-retry-failure] Send this message again. Used on a mailer
failure message.
\\[pmail-forward] Forward this message to another user.
-\\[pmail-output-to-babyl-file] Output this message to an Pmail file
(append it).
-\\[pmail-output] Output this message to a Unix-format mail file (append
it).
+\\[pmail-output] Output (append) this message to another mail file.
+\\[pmail-output-as-seen] Output (append) this message to file as it's
displayed.
\\[pmail-output-body-to-file] Save message body to a file. Default filename
comes from Subject line.
\\[pmail-input] Input Pmail file. Run Pmail on that file.
\\[pmail-add-label] Add label to message. It will be displayed in the mode
line.
@@ -1287,10 +1284,9 @@
;; No need to auto save PMAIL files in normal circumstances
;; because they contain no info except attribute changes
;; and deletion of messages.
- ;; The one exception is when messages are copied into an Pmail mode buffer.
- ;; pmail-output-to-babyl-file enables auto save when you do that.
+ ;; The one exception is when messages are copied into another mbox buffer.
+ ;; pmail-output enables auto save when you do that.
(setq buffer-auto-save-file-name nil)
- (setq mode-line-modified "--")
(use-local-map pmail-mode-map)
(set-syntax-table text-mode-syntax-table)
(setq local-abbrev-table text-mode-abbrev-table)
@@ -1312,7 +1308,9 @@
(if buffer-swapped-with
(when (pmail-buffers-swapped-p)
(setq buffer-swapped-with nil)
- (buffer-swap-text pmail-view-buffer))))
+ (let ((modp (buffer-modified-p)))
+ (buffer-swap-text pmail-view-buffer)
+ (set-buffer-modified-p modp)))))
;; Throw away the summary.
;;(when (buffer-live-p pmail-view-buffer) (kill-buffer pmail-view-buffer)))
@@ -1330,7 +1328,6 @@
;; Set up the permanent locals associated with an Pmail file.
(defun pmail-perm-variables ()
- (make-local-variable 'pmail-last-label)
(make-local-variable 'pmail-last-regexp)
(make-local-variable 'pmail-deleted-vector)
(make-local-variable 'pmail-buffer)
@@ -1340,6 +1337,7 @@
(save-excursion
(setq pmail-view-buffer (pmail-generate-viewer-buffer))
(set-buffer pmail-view-buffer)
+ (setq buffer-undo-list t)
(set-buffer-multibyte t))
(make-local-variable 'pmail-summary-buffer)
(make-local-variable 'pmail-summary-vector)
@@ -1361,13 +1359,12 @@
(list (or (getenv "MAIL")
(concat rmail-spool-directory
(user-login-name)))))))
- (make-local-variable 'pmail-keywords)
- (set (make-local-variable 'tool-bar-map) pmail-tool-bar-map)
- ;; this gets generated as needed
- (setq pmail-keywords nil))
+ (set (make-local-variable 'tool-bar-map) pmail-tool-bar-map))
;; Set up the non-permanent locals associated with Pmail mode.
(defun pmail-variables ()
+ ;; Turn off undo. We turn it back on in pmail-edit.
+ (setq buffer-undo-list t)
;; Don't let a local variables list in a message cause confusion.
(make-local-variable 'local-enable-local-variables)
(setq local-enable-local-variables nil)
@@ -1547,7 +1544,7 @@
(cons "Output Pmail File"
(pmail-list-to-menu "Output Pmail File"
files
- 'pmail-output-to-babyl-file))))
+ 'pmail-output))))
(define-key pmail-mode-map [menu-bar classify input-menu]
'("Input Pmail File" . pmail-disable-menu))
@@ -1993,7 +1990,7 @@
(defun pmail-copy-headers (beg end &optional ignored-headers)
"Copy displayed header fields to the message viewer buffer.
BEG and END marks the start and end positions of the message in
-the mail buffer. If the optional argument IGNORED-HEADERS is
+the mbox buffer. If the optional argument IGNORED-HEADERS is
non-nil, ignore all header fields whose names match that regexp.
Otherwise, if `rmail-displayed-headers' is non-nil, copy only
those header fields whose names match that regexp. Otherwise,
@@ -2062,8 +2059,6 @@
(goto-char (point-min))
(vertical-motion (- (point-max) (point-min))))))
-;;;; *** Pmail Attributes and Keywords ***
-
(defun pmail-get-header (name &optional msgnum)
"Return the value of message header NAME, nil if it has none.
MSGNUM specifies the message number to get it from.
@@ -2088,6 +2083,41 @@
(mail-fetch-field name))
(pmail-error-bad-format msgnum)))))))))
+(defun pmail-set-header (name &optional msgnum value)
+ "Store VALUE in message header NAME, nil if it has none.
+MSGNUM specifies the message number to operate on.
+If MSGNUM is nil, use the current message."
+ (with-current-buffer pmail-buffer
+ (or msgnum (setq msgnum pmail-current-message))
+ (when (> msgnum 0)
+ (let (msgbeg end)
+ (setq msgbeg (pmail-msgbeg msgnum))
+ ;; All access to the buffer's local variables is now finished...
+ (save-excursion
+ ;; ... so it is ok to go to a different buffer.
+ (if (pmail-buffers-swapped-p) (set-buffer pmail-view-buffer))
+ (save-restriction
+ (widen)
+ (save-excursion
+ (goto-char msgbeg)
+ (setq end (search-forward "\n\n" nil t))
+ (if end (setq end (1- end)))
+ (if end
+ (progn
+ (narrow-to-region msgbeg end)
+ (goto-char msgbeg)
+ (if (re-search-forward (concat "^"
+ (regexp-quote name)
+ ":")
+ nil t)
+ (progn
+ (delete-region (point) (line-end-position))
+ (insert " " value))
+ (goto-char end)
+ (insert name ": " value "\n")))
+ (pmail-error-bad-format msgnum)))))))))
+
+;;;; *** Pmail Attributes and Keywords ***
(defun pmail-get-attr-names (&optional msg)
"Return the message attributes in a comma separated string.
@@ -2107,23 +2137,31 @@
(defun pmail-get-keywords (&optional msg)
"Return the message keywords in a comma separated string.
-MSG, if set identifies the message number to use. The current
-mail message will be used otherwise."
+MSG, if non-nil, identifies the message number to use.
+If nil, that means the current message."
(pmail-get-header pmail-keyword-header msg))
-(defun pmail-display-labels ()
- "Update the current messages's attributes and keywords in mode line."
+(defun pmail-get-labels (&optional msg)
+ "Return a string with the labels (attributes and keywords) of msg MSG.
+It is put in comma-separated form.
+MSG, if non-nil, identifies the message number to use.
+If nil, that means the current message."
(let (blurb attr-names keywords)
;; Combine the message attributes and keywords
;; into a comma-separated list.
(setq attr-names (pmail-get-attr-names pmail-current-message)
keywords (pmail-get-keywords pmail-current-message))
- (setq blurb
+ (if (string= keywords "")
+ (setq keywords nil))
(cond
((and attr-names keywords) (concat " " attr-names ", " keywords))
(attr-names (concat " " attr-names))
(keywords (concat " " keywords))
- (t "")))
+ (t ""))))
+
+(defun pmail-display-labels ()
+ "Update the current messages's attributes and keywords in mode line."
+ (let ((blurb (pmail-get-labels)))
(setq mode-line-process
(format " %d/%d%s"
pmail-current-message pmail-total-messages blurb))
@@ -2155,6 +2193,7 @@
(let ((value (pmail-get-attr-value attr state))
(inhibit-read-only t)
limit
+ altered
msgbeg)
(or msgnum (setq msgnum pmail-current-message))
(when (> msgnum 0)
@@ -2190,6 +2229,7 @@
(forward-char attr))
;; Change this attribute.
(when (/= value (char-after))
+ (setq altered t)
(delete-char 1)
(insert value)))
;; Otherwise add a header line to record the attributes
@@ -2197,9 +2237,15 @@
(let ((header-value "--------"))
(aset header-value attr value)
(goto-char (if limit (- limit 1) (point-max)))
+ (setq altered (/= value ?-))
(insert pmail-attribute-header ": " header-value
"\n"))))))
(if (= msgnum pmail-current-message)
- (pmail-display-labels)))))))
+ (pmail-display-labels))))
+ ;; If we made a significant change in an attribute,
+ ;; mark pmail-buffer modified, so it will be (1) saved
+ ;; and (2) displayed in the mode line.
+ (if altered
+ (set-buffer-modified-p t)))))
(defun pmail-message-attr-p (msg attrs)
"Return t if the attributes header for message MSG matches regexp ATTRS.
@@ -2221,18 +2267,6 @@
Return non-nil if the unseen attribute is set, nil otherwise."
(pmail-message-attr-p msgnum "......U"))
-;; Return t if the attributes/keywords line of msg number MSG
-;; contains a match for the regexp LABELS.
-(defun pmail-message-labels-p (msg labels)
- ;;;??? BROKEN
- (error "pmail-message-labels-p has not been updated for Pmail")
- (save-excursion
- (save-restriction
- (widen)
- (goto-char (pmail-msgbeg msg))
- (forward-char 3)
- (re-search-backward labels (prog1 (point) (end-of-line)) t))))
-
;;;; *** Pmail Message Selection And Support ***
;; (defun pmail-get-collection-buffer ()
@@ -2250,7 +2284,9 @@
message rather than an entire message collection, nil otherwise."
(let (result)
(when (pmail-buffers-swapped-p)
+ (let ((modp (buffer-modified-p)))
(buffer-swap-text pmail-view-buffer)
+ (set-buffer-modified-p modp))
(setq buffer-swapped-with nil
result pmail-current-message))
result))
@@ -2275,6 +2311,29 @@
(defun pmail-msgbeg (n)
(marker-position (aref pmail-message-vector n)))
+(defun pmail-apply-in-message (msgnum function &rest args)
+ "Call FUNCTION on ARGS while narrowed to message MSGNUM.
+Point is at the start of the message.
+This returns what the call to FUNCTION returns.
+If MSGNUM is nil, use the current message."
+ (with-current-buffer pmail-buffer
+ (or msgnum (setq msgnum pmail-current-message))
+ (when (> msgnum 0)
+ (let (msgbeg msgend)
+ (setq msgbeg (pmail-msgbeg msgnum))
+ (setq msgend (pmail-msgend msgnum))
+ ;; All access to the pmail-buffer's local variables is now finished...
+ (save-excursion
+ ;; ... so it is ok to go to a different buffer.
+ (if (pmail-buffers-swapped-p) (set-buffer pmail-view-buffer))
+ (save-restriction
+ (widen)
+ (save-excursion
+ (goto-char msgbeg)
+ (save-restriction
+ (narrow-to-region msgbeg msgend)
+ (apply function args)))))))))
+
(defun pmail-widen-to-current-msgbeg (function)
"Call FUNCTION with point at start of internal data of current message.
Assumes that bounds were previously narrowed to display the message in Pmail.
@@ -2481,7 +2540,9 @@
If so restore the actual mbox message collection."
(with-current-buffer pmail-buffer
(when (pmail-buffers-swapped-p)
+ (let ((modp (buffer-modified-p)))
(buffer-swap-text pmail-view-buffer)
+ (set-buffer-modified-p modp))
(setq buffer-swapped-with nil))))
(defun pmail-widen ()
@@ -2561,7 +2622,6 @@
(pmail-swap-buffers-maybe)
(setq beg (pmail-msgbeg msg)
end (pmail-msgend msg))
- (widen)
(narrow-to-region beg end)
(goto-char beg)
(setq body-start (search-forward "\n\n" nil t))
@@ -2572,13 +2632,16 @@
coding-system (pmail-get-coding-system))
(if character-coding
(setq character-coding (downcase character-coding)))
- (widen)
(narrow-to-region beg end)
;; Decode the message body into an empty view buffer using a
;; unibyte temporary buffer where the character decoding takes
;; place.
(with-current-buffer pmail-view-buffer
(erase-buffer))
+ (if (null character-coding)
+ ;; Do it directly since that is fast.
+ (pmail-decode-region body-start end coding-system view-buf)
+ ;; Can this be done directly, skipping the temp buffer?
(with-temp-buffer
(set-buffer-multibyte nil)
(insert-buffer-substring mbox-buf body-start end)
@@ -2588,9 +2651,10 @@
((and (string= character-coding "base64") is-text-message)
(base64-decode-region (point-min) (point-max)))
((eq character-coding 'uuencode)
- (error "Not supported yet."))
+ (error "Not supported yet"))
(t))
- (pmail-decode-region (point-min) (point-max) coding-system view-buf))
+ (pmail-decode-region (point-min) (point-max)
+ coding-system view-buf)))
;; Copy the headers to the front of the message view buffer.
(with-current-buffer pmail-view-buffer
(goto-char (point-min)))
@@ -2608,7 +2672,9 @@
;; Update the mode-line with message status information and swap
;; the view buffer/mail buffer contents.
(pmail-display-labels)
+ (let ((modp (buffer-modified-p)))
(buffer-swap-text pmail-view-buffer)
+ (set-buffer-modified-p modp))
(setq buffer-swapped-with pmail-view-buffer)
(run-hooks 'pmail-show-message-hook))
blurb))
@@ -2690,7 +2756,7 @@
(pmail-delete-forward)
(if (string= "/dev/null" folder)
(pmail-delete-message)
- (pmail-output-to-babyl-file folder 1 t)
+ (pmail-output folder 1 t)
(setq d nil))))
(setq d (cdr d))))))
@@ -2768,49 +2834,10 @@
(setq mid (+ low (/ (- high low) 2))))
(if (>= where (pmail-msgbeg high)) high low)))
-(defun pmail-message-recipients-p (msg recipients &optional primary-only)
- ;;;??? BROKEN
- (error "pmail-message-recipients-p has not been updated for Pmail")
- (save-restriction
- (goto-char (pmail-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 pmail-message-regexp-p (n regexp)
- "Return t, if for message number N, regexp REGEXP matches in the header."
- ;;;??? BROKEN
- (error "pmail-message-regexp-p has not been updated for Pmail")
- (let ((beg (pmail-msgbeg n))
- (end (pmail-msgend n)))
- (goto-char beg)
- (forward-line 1)
- (save-excursion
- (save-restriction
- (if (prog1 (= (following-char) ?0)
- (forward-line 2)
- ;; If there's a Summary-line in the (otherwise empty)
- ;; header, we didn't yet get past the EOOH line.
- (when (looking-at "^\\*\\*\\* EOOH \\*\\*\\*\n")
- (forward-line 1))
- (setq beg (point))
- (narrow-to-region (point) end))
- (progn
- (rfc822-goto-eoh)
- (setq end (point)))
- (setq beg (point))
- (search-forward "\n*** EOOH ***\n" end t)
- (setq end (1+ (match-beginning 0)))))
- (goto-char beg)
- (if pmail-enable-mime
- (funcall pmail-search-mime-header-function n regexp end)
- (re-search-forward regexp end t)))))
-
(defun pmail-search-message (msg regexp)
"Return non-nil, if for message number MSG, regexp REGEXP matches."
+ ;; This is adequate because its only caller, pmail-search,
+ ;; unswaps the buffers.
(goto-char (pmail-msgbeg msg))
(if pmail-enable-mime
(funcall pmail-search-mime-message-function msg regexp)
@@ -2928,11 +2955,11 @@
(setq current (1+ current))))
found))
-(defun pmail-current-subject ()
- "Return the current subject.
-The subject is stripped of leading and trailing whitespace, and
-of typical reply prefixes such as Re:."
- (let ((subject (or (mail-fetch-field "Subject") "")))
+(defun pmail-simplified-subject (&optional msgnum)
+ "Return the simplified subject of message MSGNUM (or current message).
+Simplifying the subject means stripping leading and trailing whitespace,
+and typical reply prefixes such as Re:."
+ (let ((subject (or (pmail-get-header "Subject" msgnum) "")))
(if (string-match "\\`[ \t]+" subject)
(setq subject (substring subject (match-end 0))))
(if (string-match pmail-reply-regexp subject)
@@ -2941,44 +2968,26 @@
(setq subject (substring subject 0 (match-beginning 0))))
subject))
-(defun pmail-current-subject-regexp ()
- "Return a regular expression matching the current subject.
-The regular expression matches the subject header line of
-messages about the same subject. The subject itself is stripped
-of leading and trailing whitespace, of typical reply prefixes
-such as Re: and whitespace within the subject is replaced by a
-regular expression matching whitespace in general in order to
-take into account that subject header lines may include newlines
-and more whitespace. The returned regular expressions contains
-`pmail-reply-regexp' and ends with a newline."
- (let ((subject (pmail-current-subject)))
- ;; If Subject is long, mailers will break it into several lines at
- ;; arbitrary places, so replace whitespace with a regexp that will
- ;; match any sequence of spaces, TABs, and newlines.
+(defun pmail-simplified-subject-regexp ()
+ "Return a regular expression matching the current simplified subject.
+The idea is to match it against simplified subjects of other messages."
+ (let ((subject (pmail-simplified-subject)))
(setq subject (regexp-quote subject))
+ ;; Hide commas so it will work ok if parsed as a comma-separated list
+ ;; of regexps.
(setq subject
- (replace-regexp-in-string "[ \t\n]+" "[ \t\n]+" subject t t))
- ;; Some mailers insert extra spaces after "Subject:", so allow any
- ;; amount of them.
- (concat "^Subject:[ \t]+"
- (if (string= "\\`" (substring pmail-reply-regexp 0 2))
- (substring pmail-reply-regexp 2)
- pmail-reply-regexp)
- subject "[ \t]*\n")))
+ (replace-regexp-in-string "," "\054" subject t t))
+ (concat "\\`" subject "\\'")))
(defun pmail-next-same-subject (n)
"Go to the next mail message having the same subject header.
With prefix argument N, do this N times.
If N is negative, go backwards instead."
(interactive "p")
- (let ((search-regexp (pmail-current-subject-regexp))
+ (let ((subject (pmail-simplified-subject))
(forward (> n 0))
(i pmail-current-message)
- (case-fold-search t)
found)
- (save-excursion
- (save-restriction
- (widen)
(while (and (/= n 0)
(if forward
(< i pmail-total-messages)
@@ -2989,15 +2998,9 @@
(< i pmail-total-messages)
(> i 1)))
(setq i (if forward (1+ i) (1- i)))
- (goto-char (pmail-msgbeg i))
- (search-forward "\n*** EOOH ***\n")
- (let ((beg (point)) end)
- (search-forward "\n\n")
- (setq end (point))
- (goto-char beg)
- (setq done (re-search-forward search-regexp end t))))
+ (setq done (string-equal subject (pmail-simplified-subject i))))
(if done (setq found i)))
- (setq n (if forward (1- n) (1+ n))))))
+ (setq n (if forward (1- n) (1+ n))))
(if found
(pmail-show-message-maybe found)
(error "No %s message with same subject"
@@ -3855,7 +3858,7 @@
TEXT and INDENT are not used."
(speedbar-with-attached-buffer
(message "Moving message to %s" token)
- (pmail-output-to-babyl-file token)))
+ (pmail-output token)))
; Functions for setting, getting and encoding the POP password.
; The password is encoded to prevent it from being easily accessible
- [Emacs-diffs] emacs/lisp/mail pmail.el,
Richard M. Stallman <=
- [Emacs-diffs] emacs/lisp/mail pmail.el, Richard M. Stallman, 2009/01/10
- [Emacs-diffs] emacs/lisp/mail pmail.el, Richard M. Stallman, 2009/01/10
- [Emacs-diffs] emacs/lisp/mail pmail.el, Richard M. Stallman, 2009/01/17
- [Emacs-diffs] emacs/lisp/mail pmail.el, Glenn Morris, 2009/01/19
- [Emacs-diffs] emacs/lisp/mail pmail.el, Chong Yidong, 2009/01/21
- [Emacs-diffs] emacs/lisp/mail pmail.el, Chong Yidong, 2009/01/22