branch: master commit d9ecd2e6d4b36201bb57b177a51b84cb7e71a1f3 Author: Oleh Krehel <ohwoeo...@gmail.com> Commit: Oleh Krehel <ohwoeo...@gmail.com>
Fix the preselect for (swiper "one") * ivy.el (ivy--reset-state): Ignore INITIAL-INPUT on the first step. Then all `ivy--filter' on the second step. (ivy--preselect-index): Change arglist. No longer takes INITIAL-INPUT. (ivy--recompute-index): Update the call to `ivy--preselect-index'. Fixes #292 --- ivy.el | 31 +++++++++---------------------- 1 files changed, 9 insertions(+), 22 deletions(-) diff --git a/ivy.el b/ivy.el index 9eafaa6..9004477 100644 --- a/ivy.el +++ b/ivy.el @@ -1121,8 +1121,7 @@ This is useful for recursive `ivy-read'." (re-builder (ivy-state-re-builder state)) (dynamic-collection (ivy-state-dynamic-collection state)) (initial-input (ivy-state-initial-input state)) - (require-match (ivy-state-require-match state)) - (matcher (ivy-state-matcher state))) + (require-match (ivy-state-require-match state))) (unless initial-input (setq initial-input (cdr (assoc this-command ivy-initial-inputs-alist)))) @@ -1199,11 +1198,14 @@ This is useful for recursive `ivy-read'." (and dynamic-collection ivy--index) (and preselect - (ivy--preselect-index - coll initial-input preselect matcher)) + (ivy--preselect-index preselect coll)) 0)) (setq ivy--old-re nil) (setq ivy--old-cands nil) + (when initial-input + ;; Needed for anchor to work + (setq ivy--old-cands coll) + (setq ivy--old-cands (ivy--filter initial-input coll))) (setq ivy--all-candidates coll)) (setq ivy-exit nil) (setq ivy--default (or @@ -1300,21 +1302,8 @@ Minibuffer bindings: (setq completing-read-function 'ivy-completing-read) (setq completing-read-function 'completing-read-default))) -(defun ivy--preselect-index (candidates initial-input preselect matcher) - "Return the index in CANDIDATES filtered by INITIAL-INPUT for PRESELECT. -When MATCHER is non-nil it's used instead of `cl-remove-if-not'." - (if initial-input - (progn - (setq initial-input (ivy--regex-plus initial-input)) - (setq candidates - (if matcher - (funcall matcher initial-input candidates) - (cl-remove-if-not - (lambda (x) - (string-match initial-input x)) - candidates)))) - (when matcher - (setq candidates (funcall matcher "" candidates)))) +(defun ivy--preselect-index (preselect candidates) + "Return the index of PRESELECT in CANDIDATES." (cond ((integerp preselect) preselect) ((cl-position preselect candidates :test #'equal)) @@ -1821,10 +1810,8 @@ Prefix matches to NAME are put ahead of the list." (not (equal ivy--old-re ""))) (setq ivy--index (or (ivy--preselect-index - cands - nil (ivy-state-preselect ivy-last) - nil) + cands) ivy--index))))) (defun ivy-recompute-index-swiper (_re-str cands)