summaryrefslogtreecommitdiff
path: root/lisp
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
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')
-rw-r--r--lisp/ChangeLog3
-rw-r--r--lisp/mail/rmail.el27
2 files changed, 24 insertions, 6 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog
index 2b7cb55da89..3aae01b9f1e 100644
--- a/lisp/ChangeLog
+++ b/lisp/ChangeLog
@@ -1,5 +1,8 @@
2013-01-03 Glenn Morris <rgm@gnu.org>
+ * mail/rmail.el (rmail-set-header-1): Ignore case.
+ Handle multi-line headers. (Bug#13330)
+
* progmodes/make-mode.el (makefile-fill-paragraph): Add doc.
Handle paragraph starting at beginning of buffer.
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)))