From fb81c8c3adf8633f2f617c82f6019aef630860c7 Mon Sep 17 00:00:00 2001 From: João Távora Date: Thu, 19 Aug 2021 23:54:51 +0100 Subject: 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 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 () -- cgit v1.2.3