]> git.eshelyaron.com Git - emacs.git/commitdiff
* lisp/ido.el (ido-set-matches-1): Improve flex matching performance by
authorLeo Liu <sdl.web@gmail.com>
Sat, 10 Nov 2012 01:28:22 +0000 (09:28 +0800)
committerLeo Liu <sdl.web@gmail.com>
Sat, 10 Nov 2012 01:28:22 +0000 (09:28 +0800)
removing backtracking in the regexp (suggested by Stefan).

Fixes: debbugs:12796
lisp/ChangeLog
lisp/ido.el

index a07749e4f18114bfdf43389586ab553cf548ab23..fb436fa00388f41e7e4c29f2783e09f8f60d567e 100644 (file)
@@ -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.
index 4ab183b320745bc46855f842ed749850372e3a28..f4f9c27c847300df7cce1d34afd2d68595d0cf12 100644 (file)
@@ -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