* lisp/icomplete.el (icomplete-completions): Replace last fix.
authorStefan Monnier <monnier@iro.umontreal.ca>
Thu, 23 Feb 2012 15:36:07 +0000 (10:36 -0500)
committerStefan Monnier <monnier@iro.umontreal.ca>
Thu, 23 Feb 2012 15:36:07 +0000 (10:36 -0500)
Fixes: debbugs:10850

lisp/ChangeLog
lisp/icomplete.el

index 7e7588d..e4fc0ea 100644 (file)
@@ -1,3 +1,8 @@
+2012-02-23  Stefan Monnier  <monnier@iro.umontreal.ca>
+
+       * icomplete.el (icomplete-completions): Replace last fix with a better
+       one (bug#10850).
+
 2012-02-23  Dmitry Gutov  <dgutov@yandex.ru>
 
        * emacs-lisp/lisp.el (beginning-of-defun-raw): Don't call end-of-defun
index a971965..97a14b1 100644 (file)
@@ -333,23 +333,23 @@ are exhibited within the square braces.)"
                  (window-width)))
              (prefix-len
               ;; Find the common prefix among `comps'.
-             (if (eq t (compare-strings (car comps) nil (length most)
-                                        most nil nil completion-ignore-case))
-                  ;; Common case.
-                 (length most)
-                ;; Else, use try-completion.
-               (let ((comps-prefix (try-completion "" comps)))
-                  (and (stringp comps-prefix)
-                       (length comps-prefix)))))
+             ;; We can't use the optimization below because its assumptions
+             ;; aren't always true, e.g. when completion-cycling (bug#10850):
+             ;; (if (eq t (compare-strings (car comps) nil (length most)
+             ;;                         most nil nil completion-ignore-case))
+             ;;     ;; Common case.
+             ;;     (length most)
+             ;; Else, use try-completion.
+             (let ((comps-prefix (try-completion "" comps)))
+               (and (stringp comps-prefix)
+                    (length comps-prefix)))) ;;)
 
             prospects most-is-exact comp limit)
        (if (eq most-try t) ;; (or (null (cdr comps))
            (setq prospects nil)
          (while (and comps (not limit))
            (setq comp
-                 (if (and prefix-len (<= prefix-len (length (car comps))))
-                     (substring (car comps) prefix-len)
-                   (car comps))
+                 (if prefix-len (substring (car comps) prefix-len) (car comps))
                  comps (cdr comps))
            (cond ((string-equal comp "") (setq most-is-exact t))
                  ((member comp prospects))