]> git.eshelyaron.com Git - emacs.git/commitdiff
(define-mail-alias): Handle backslash-quoting
authorRichard M. Stallman <rms@gnu.org>
Sun, 21 Dec 1997 02:07:32 +0000 (02:07 +0000)
committerRichard M. Stallman <rms@gnu.org>
Sun, 21 Dec 1997 02:07:32 +0000 (02:07 +0000)
within "-strings in DEFINITION if it comes from .mailrc.

lisp/mail/mailalias.el

index c0bb580fcaf58795c3b0efb85cfd7e910108982e..20d6004b4e2168f5f896d4a48e76c83d29485a7c 100644 (file)
@@ -317,21 +317,33 @@ if it is quoted with double-quotes."
        ;; 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)
                                ", "))