summaryrefslogtreecommitdiff
path: root/lisp/mail/rmail.el
diff options
context:
space:
mode:
authorGlenn Morris <rgm@gnu.org>2013-01-03 11:41:59 -0800
committerGlenn Morris <rgm@gnu.org>2013-01-03 11:41:59 -0800
commita8aa6c2d08c5bf67cae9db62663e69fb183fbddb (patch)
tree8fcd43b707d1ab91bb1543836c65b676722d1848 /lisp/mail/rmail.el
parent0d1f53adb0f0a614c102fb5c2b5212ace4b4078b (diff)
downloademacs-a8aa6c2d08c5bf67cae9db62663e69fb183fbddb.tar.gz
emacs-a8aa6c2d08c5bf67cae9db62663e69fb183fbddb.tar.bz2
emacs-a8aa6c2d08c5bf67cae9db62663e69fb183fbddb.zip
* lisp/mail/rmail.el (rmail-set-header-1): Handle multi-line headers
Ignore case. Fixes: debbugs:13330
Diffstat (limited to 'lisp/mail/rmail.el')
-rw-r--r--lisp/mail/rmail.el27
1 files changed, 21 insertions, 6 deletions
diff --git a/lisp/mail/rmail.el b/lisp/mail/rmail.el
index a05cd342862..e32d3c608d4 100644
--- a/lisp/mail/rmail.el
+++ b/lisp/mail/rmail.el
@@ -2173,20 +2173,35 @@ If MSGNUM is nil, use the current message."
(defun rmail-set-header-1 (name value)
"Subroutine of `rmail-set-header'.
-Narrow to header, set header NAME to VALUE, replacing existing if present.
-VALUE nil means to remove NAME altogether."
+Narrow to headers, set header NAME to VALUE, replacing existing if present.
+VALUE nil means to remove NAME altogether.
+
+Only changes the first instance of NAME. If VALUE is multi-line,
+continuation lines should already be indented. VALUE should not
+end in a newline."
(if (search-forward "\n\n" nil t)
(progn
(forward-char -1)
(narrow-to-region (point-min) (point))
+ ;; cf mail-fetch-field.
(goto-char (point-min))
- (if (re-search-forward (concat "^" (regexp-quote name) ":") nil 'move)
+ (if (let ((case-fold-search t))
+ (re-search-forward (concat "^" (regexp-quote name) "[ \t]*:")
+ nil 'move))
+ (let ((start (point))
+ end)
+ (while (and (zerop (forward-line 1))
+ (looking-at "[ \t]")))
+ ;; Back up over newline.
+ (forward-char -1)
+ (setq end (point))
+ (goto-char start)
(if value
(progn
- (delete-region (point) (line-end-position))
+ (delete-region start end)
(insert " " value))
- (delete-region (line-beginning-position)
- (line-beginning-position 2)))
+ (delete-region (line-beginning-position) (1+ end))))
+ ;; Not already present: insert at end of headers.
(if value (insert name ": " value "\n"))))
(rmail-error-bad-format)))