diff options
author | Leo Liu <sdl.web@gmail.com> | 2012-11-10 09:28:22 +0800 |
---|---|---|
committer | Leo Liu <sdl.web@gmail.com> | 2012-11-10 09:28:22 +0800 |
commit | 05a859c1bd9cd07b2c0fad06a0694e88ea929fcf (patch) | |
tree | 0e080a550648891305d5bd9de17e1bede287dbff | |
parent | 32e5c58ca969ec30d31520da52c9866cafa62927 (diff) | |
download | emacs-05a859c1bd9cd07b2c0fad06a0694e88ea929fcf.tar.gz |
* lisp/ido.el (ido-set-matches-1): Improve flex matching performance by
removing backtracking in the regexp (suggested by Stefan).
Fixes: debbugs:12796
-rw-r--r-- | lisp/ChangeLog | 5 | ||||
-rw-r--r-- | lisp/ido.el | 6 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index a07749e4f18..fb436fa0038 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog @@ -1,3 +1,8 @@ +2012-11-10 Leo Liu <sdl.web@gmail.com> + + * ido.el (ido-set-matches-1): Improve flex matching performance by + removing backtracking in the regexp (suggested by Stefan). (Bug#12796) + 2012-11-09 Stefan Monnier <monnier@iro.umontreal.ca> * emacs-lisp/advice.el (ad-set-advice-info): Set defalias-fset-function. diff --git a/lisp/ido.el b/lisp/ido.el index 4ab183b3207..f4f9c27c847 100644 --- a/lisp/ido.el +++ b/lisp/ido.el @@ -3764,7 +3764,11 @@ This is to make them appear as if they were \"virtual buffers\"." ido-enable-flex-matching (> (length ido-text) 1) (not ido-enable-regexp)) - (setq re (mapconcat #'regexp-quote (split-string ido-text "") ".*")) + (setq re (concat (regexp-quote (string (aref ido-text 0))) + (mapconcat (lambda (c) + (concat "[^" (string c) "]*" + (regexp-quote (string c)))) + (substring ido-text 1) ""))) (if ido-enable-prefix (setq re (concat "\\`" re))) (mapc |