From: João Távora Date: Thu, 19 Aug 2021 22:54:51 +0000 (+0100) Subject: Make icomplete-forward-completions O(1) when icomplete-scroll is t X-Git-Tag: emacs-28.0.90~1425 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=fb81c8c3adf8633f2f617c82f6019aef630860c7;p=emacs.git 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. --- diff --git a/lisp/icomplete.el b/lisp/icomplete.el index 84073933894..03616f9b6aa 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 ()