From: João Távora Date: Mon, 14 Jan 2019 12:46:34 +0000 (+0000) Subject: Fix icomplete's cycling when filename filtering kicks in X-Git-Tag: emacs-27.0.90~3826 X-Git-Url: http://git.eshelyaron.com/gitweb/?a=commitdiff_plain;h=cdb082322d4209c5104bc1a98b21bf3dd75e8f17;p=emacs.git Fix icomplete's cycling when filename filtering kicks in Fixes: bug#34070 * lisp/icomplete.el (icomplete--filtered-completions): New variable. (icomplete-forward-completions, icomplete-backward-completions): Use it. (icomplete-completions): Set it. --- diff --git a/lisp/icomplete.el b/lisp/icomplete.el index 8bed46cb3b3..82e2728487b 100644 --- a/lisp/icomplete.el +++ b/lisp/icomplete.el @@ -162,6 +162,9 @@ the default otherwise." (minibuffer-force-complete-and-exit) (minibuffer-complete-and-exit))) +(defvar icomplete--filtered-completions nil + "If non-nil completions as filtered by `icomplete-completions'") + (defun icomplete-forward-completions () "Step forward completions by one entry. Second entry becomes the first and can be selected with @@ -169,7 +172,8 @@ Second entry becomes the first and can be selected with (interactive) (let* ((beg (icomplete--field-beg)) (end (icomplete--field-end)) - (comps (completion-all-sorted-completions beg end)) + (comps (or icomplete--filtered-completions + (completion-all-sorted-completions beg end))) (last (last comps))) (when comps (setcdr last (cons (car comps) (cdr last))) @@ -182,7 +186,8 @@ Last entry becomes the first and can be selected with (interactive) (let* ((beg (icomplete--field-beg)) (end (icomplete--field-end)) - (comps (completion-all-sorted-completions beg end)) + (comps (or icomplete--filtered-completions + (completion-all-sorted-completions beg end))) (last-but-one (last comps 2)) (last (cdr last-but-one))) (when (consp last) ; At least two elements in comps @@ -382,9 +387,11 @@ matches exist." (progn ;;(debug (format "Candidates=%S field=%S" candidates name)) (format " %sNo matches%s" open-bracket close-bracket)) (if last (setcdr last nil)) - (when (and minibuffer-completing-file-name - icomplete-with-completion-tables) - (setq comps (completion-pcm--filename-try-filter comps))) + (if (and minibuffer-completing-file-name + icomplete-with-completion-tables) + (setq comps (completion-pcm--filename-try-filter comps) + icomplete--filtered-completions comps) + (setq icomplete--filtered-completions nil)) (let* ((most-try (if (and base-size (> base-size 0)) (completion-try-completion