From e3276f36c08691d6789b8eb49923735dc9565642 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jo=C3=A3o=20T=C3=A1vora?= Date: Mon, 23 Dec 2019 23:43:30 +0000 Subject: [PATCH] Make fido-mode behave more like ido-mode when finding directories Notably C-x d (M-x dired) and C-x v d (M-x vc-dir) behaved quite differently, having regular files as the default instead of ido's usual "./". * lisp/icomplete.el (icomplete--sorted-completions): New helper. (icomplete-completions): Use it. (cherry picked from commit ee914051fbb4fbff9073a23b5ea7668bf48b5c6a) --- lisp/icomplete.el | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/lisp/icomplete.el b/lisp/icomplete.el index 4d6dfcd18a1..bf7e2ea7cb4 100644 --- a/lisp/icomplete.el +++ b/lisp/icomplete.el @@ -442,6 +442,24 @@ Usually run by inclusion in `minibuffer-setup-hook'." (cdr tem))))) (add-hook 'pre-command-hook 'icomplete-pre-command-hook nil t) (add-hook 'post-command-hook 'icomplete-post-command-hook nil t))) + +(defun icomplete--sorted-completions () + (let ((all (completion-all-sorted-completions + (icomplete--field-beg) (icomplete--field-end)))) + (if (and fido-mode + (window-minibuffer-p) + (not minibuffer-default) + (eq (icomplete--category) 'file)) + (cl-loop for l on all + while (listp (cdr l)) + for comp = (cadr l) + when (string= comp "./") + do (setf (cdr l) (cddr l)) + and return + (setq completion-all-sorted-completions (cons comp all)) + finally return all) + all))) + @@ -550,8 +568,7 @@ matches exist." (funcall predicate cand)))) predicate)) (md (completion--field-metadata (icomplete--field-beg))) - (comps (completion-all-sorted-completions - (icomplete--field-beg) (icomplete--field-end))) + (comps (icomplete--sorted-completions)) (last (if (consp comps) (last comps))) (base-size (cdr last)) (open-bracket (if require-match "(" "[")) -- 2.39.2