(edmacro-parse-keys): Catch events with spaces in their names.

This commit is contained in:
Chong Yidong 2008-08-19 21:44:56 +00:00
parent edfbf712e5
commit bf2e3fa7a9

View 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)))))