]> git.eshelyaron.com Git - emacs.git/commitdiff
Make icomplete-forward-completions O(1) when icomplete-scroll is t
authorJoão Távora <joaotavora@gmail.com>
Thu, 19 Aug 2021 22:54:51 +0000 (23:54 +0100)
committerJoão Távora <joaotavora@gmail.com>
Thu, 19 Aug 2021 22:56:29 +0000 (23:56 +0100)
In particular, this makes the recently added
icomplete-vertical-goto-last (bug#49005) be O(n) instead of O(n^2).
That used to be almost unbearably slow for large n.

* lisp/icomplete.el (icomplete-forward-completions):  don't call last
unless needed.

lisp/icomplete.el

index 8407393389460256a2fd58540de2eb1e72dd619a..03616f9b6aaa85e3319f6e6b7c0ba943b435e244 100644 (file)
@@ -258,14 +258,14 @@ Return non-nil iff something was stepped."
   (interactive)
   (let* ((beg (icomplete--field-beg))
          (end (icomplete--field-end))
-         (comps (completion-all-sorted-completions beg end))
-         (last (last comps)))
+         (comps (completion-all-sorted-completions beg end)))
     (when (consp (cdr comps))
       (cond (icomplete-scroll
              (push (pop comps) icomplete--scrolled-past)
              (setq icomplete--scrolled-completions comps))
             (t
-             (setcdr (last comps) (cons (pop comps) (cdr last)))))
+             (let ((last (last comps)))
+               (setcdr (last comps) (cons (pop comps) (cdr last))))))
       (completion--cache-all-sorted-completions beg end comps))))
 
 (defun icomplete-backward-completions ()