emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

master fb81c8c: Make icomplete-forward-completions O(1) when icomplete-s


From: João Távora
Subject: master fb81c8c: Make icomplete-forward-completions O(1) when icomplete-scroll is t
Date: Thu, 19 Aug 2021 19:02:06 -0400 (EDT)

branch: master
commit fb81c8c3adf8633f2f617c82f6019aef630860c7
Author: João Távora <joaotavora@gmail.com>
Commit: João Távora <joaotavora@gmail.com>

    Make icomplete-forward-completions O(1) when icomplete-scroll is t
    
    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 | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index 8407393..03616f9 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -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 ()



reply via email to

[Prev in Thread] Current Thread [Next in Thread]