Mercurial > emacs
changeset 97565:1b5f78ffef83
(edmacro-parse-keys): Catch events with spaces in their names.
author | Chong Yidong <cyd@stupidchicken.com> |
---|---|
date | Tue, 19 Aug 2008 21:44:56 +0000 |
parents | 325188eea8c4 |
children | 7c5d85abccae |
files | lisp/edmacro.el |
diffstat | 1 files changed, 13 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/edmacro.el Tue Aug 19 21:44:48 2008 +0000 +++ b/lisp/edmacro.el Tue Aug 19 21:44:56 2008 +0000 @@ -686,14 +686,22 @@ (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)))))