diff --git a/configs/init-minibuffer.el b/configs/init-minibuffer.el index 5930cb8..425f850 100644 --- a/configs/init-minibuffer.el +++ b/configs/init-minibuffer.el @@ -115,7 +115,33 @@ (setq read-file-name-completion-ignore-case t read-buffer-completion-ignore-case t completion-ignore-case t) - ) + :config + ;; Prioriza el basename sobre la ruta en comandos de archivo (categorías + ;; `file' y `project-file'); en el resto respeta el orden normal. Rank: + ;; 0 exacto (nombre o sin extensión), 1 prefijo, 2 subcadena, 3 solo carpeta. + (defun kj/vertico--rank (cand query) + "Return match rank of CAND's basename against QUERY (0 best, 3 worst)." + (let ((name (downcase (file-name-nondirectory (directory-file-name cand))))) + (cond ((or (string= name query) (string= (file-name-sans-extension name) query)) 0) + ((string-prefix-p query name) 1) + ((string-search query name) 2) + (t 3)))) + + (defun kj/vertico-sort (cands) + "Prioritize basename matches for file candidates; default order otherwise." + (let* ((base (or (vertico--metadata-get 'display-sort-function) + vertico-sort-function)) + (cands (if base (funcall base (copy-sequence cands)) cands)) + (query (and (memq (vertico--metadata-get 'category) '(file project-file)) + (car (last (split-string (minibuffer-contents) "[ \t\n]+" t)))))) + (if (or (null query) (string-suffix-p "/" query)) + cands + (setq query (downcase (file-name-nondirectory query))) + (mapcar #'cdr (sort (mapcar (lambda (c) (cons (my/vertico--rank c query) c)) + cands) + #'car-less-than-car))))) + + (setq vertico-sort-override-function #'kj/vertico-sort)) (provide 'init-minibuffer) ;;; init-minibuffer.el ends here