From a8aa6c2d08c5bf67cae9db62663e69fb183fbddb Mon Sep 17 00:00:00 2001 From: Glenn Morris Date: Thu, 3 Jan 2013 11:41:59 -0800 Subject: [PATCH] * lisp/mail/rmail.el (rmail-set-header-1): Handle multi-line headers Ignore case. Fixes: debbugs:13330 --- lisp/ChangeLog | 3 +++ lisp/mail/rmail.el | 27 +++++++++++++++++++++------ 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 2b7cb55da8..3aae01b9f1 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,5 +1,8 @@ 2013-01-03 Glenn Morris + * 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 a05cd34286..e32d3c608d 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))) -- 2.20.1