* lisp/mail/rmail.el (rmail-set-header-1): Handle multi-line headers
authorGlenn Morris <rgm@gnu.org>
Thu, 3 Jan 2013 19:41:59 +0000 (11:41 -0800)
committerGlenn Morris <rgm@gnu.org>
Thu, 3 Jan 2013 19:41:59 +0000 (11:41 -0800)
Ignore case.

Fixes: debbugs:13330

lisp/ChangeLog
lisp/mail/rmail.el

index 2b7cb55..3aae01b 100644 (file)
@@ -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.
 
index a05cd34..e32d3c6 100644 (file)
@@ -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)))