changeset 20490:c383d1397e12

(define-mail-alias): Handle backslash-quoting within "-strings in DEFINITION if it comes from .mailrc.
author Richard M. Stallman <rms@gnu.org>
date Sun, 21 Dec 1997 02:07:32 +0000
parents 35972a1f8f1b
children d884af34ba47
files lisp/mail/mailalias.el
diffstat 1 files changed, 18 insertions(+), 6 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/mail/mailalias.el	Sun Dec 21 02:06:32 1997 +0000
+++ b/lisp/mail/mailalias.el	Sun Dec 21 02:07:32 1997 +0000
@@ -317,21 +317,33 @@
 	;; If DEFINITION is null string, avoid looping even once.
 	(start (and (not (equal definition "")) 0))
 	(L (length definition))
+	convert-backslash
 	end tem)
     (while start
+      (setq convert-backslash nil)
       ;; If we're reading from the mailrc file, then addresses are delimited
       ;; by spaces, and addresses with embedded spaces must be surrounded by
       ;; double-quotes.  Otherwise, addresses are separated by commas.
       (if from-mailrc-file
 	  (if (eq ?\" (aref definition start))
-	      (setq start (1+ start)
-		    end (string-match "\"[ \t,]*" definition start))
+	      (progn (string-match "[^\\]\\(\\([\\][\\]\\)*\\)\"[ \t,]*" definition start)
+		     (setq start (1+ start)
+			   end (match-end 1)
+			   convert-backslash t))
 	    (setq end (string-match "[ \t,]+" definition start)))
 	(setq end (string-match "[ \t\n,]*,[ \t\n,]*" definition start)))
-      (setq result (cons (substring definition start end) result))
-      (setq start (and end
-		       (/= (match-end 0) L)
-		       (match-end 0))))
+      (let ((temp (substring definition start end))
+	    (pos 0))
+	(setq start (and end
+			 (/= (match-end 0) L)
+			 (match-end 0)))
+	(if convert-backslash
+	    (while (string-match "[\\]" temp pos)
+	      (setq temp (replace-match "" t t temp))
+	      (if start 
+		  (setq start (1- start)))
+	      (setq pos (match-end 0))))
+	(setq result (cons temp result))))
     (setq definition (mapconcat (function identity)
 				(nreverse result)
 				", "))