]> git.eshelyaron.com Git - emacs.git/commitdiff
(edmacro-parse-keys): Catch events with spaces in their names.
authorChong Yidong <cyd@stupidchicken.com>
Tue, 19 Aug 2008 21:44:56 +0000 (21:44 +0000)
committerChong Yidong <cyd@stupidchicken.com>
Tue, 19 Aug 2008 21:44:56 +0000 (21:44 +0000)
lisp/edmacro.el

index 1c2f9104a0697016c3f16c4d2b2205b5743b88c4..be948ad579f690bab13a2420ea866de444689a9a 100644 (file)
@@ -686,14 +686,22 @@ This function assumes that the events can be stored in a string."
 
 (defun edmacro-parse-keys (string &optional need-vector)
   (let ((case-fold-search nil)
+       (len (length string)) ; We won't alter string in the loop below.
        (pos 0)
        (res []))
-    (while (and (< pos (length string))
+    (while (and (< pos len)
                (string-match "[^ \t\n\f]+" string pos))
-      (let ((word (substring string (match-beginning 0) (match-end 0)))
-           (key nil)
-           (times 1))
-       (setq pos (match-end 0))
+      (let* ((word-beg (match-beginning 0))
+            (word-end (match-end 0))
+            (word (substring string word-beg len))
+            (times 1)
+            key)
+       ;; Try to catch events of the form "<as df>".
+       (if (string-match "^<[^ >\t\n\f][^>\t\n\f]*>" word)
+           (setq word (match-string 0 word)
+                 pos (+ word-beg (match-end 0)))
+         (setq word (substring string word-beg word-end)
+               pos word-end))
        (when (string-match "\\([0-9]+\\)\\*." word)
          (setq times (string-to-number (substring word 0 (match-end 1))))
          (setq word (substring word (1+ (match-end 1)))))