;; Nicer minibuffer completion ;; First Selectrum, which provides the core incremental minibuffer completion engine (use-package selectrum :config (selectrum-mode 1) (leader-def-key "z" #'selectrum-repeat)) ;; Then prescient, which adds the ability to sort and filter completions (use-package selectrum-prescient :after selectrum :config (selectrum-prescient-mode 1) (prescient-persist-mode 1)) ;; Marginalia adds annotations to completion candidates (use-package marginalia :config (marginalia-mode 1) ;; When using Selectrum, ensure that Selectrum is refreshed when cycling annotations. (advice-add #'marginalia-cycle :after (lambda () (when (bound-and-true-p selectrum-mode) (selectrum-exhibit)))) :general (minibuffer-local-map "M-A" #'marginalia-cycle) :custom (marginalia-annotators '(marginalia-annotators-heavy marginalia-annotators-light nil))) ;; Embark adds context actions to completion candidates (use-package embark :config (setq embark-action-indicator (lambda (map _target) (which-key--show-keymap "Embark" map nil nil 'no-paging) #'which-key--hide-popup-ignore-command) embark-become-indicator embark-action-indicator) :general ("M-o" #'embark-act) ('normal embark-collect-mode-map "TAB" #'forward-button "?" #'describe-mode "A" #'embark-collect-direct-action-minor-mode "S" #'tabulated-list-sort "a" #'embark-act "b" #'backward-button "e" #'embark-export "f" #'forward-button "gr" #'revert-buffer "n" #'next-line "p" #'previous-line "q" #'quit-window "s" #'isearch-forward "v" #'embark-collect-toggle-view "z" #'embark-collect-zebra-minor-mode "{" #'tabulated-list-narrow-current-column "}" #'tabulated-list-widen-current-column "" #'backward-button) :custom (embark-prompter 'embark-keymap-prompter)) ;; Consult adds a bunch of completing-read based utilities (use-package consult :general ([remap switch-to-buffer] #'consult-buffer) ([remap isearch-forward] #'consult-line)) (provide 'init-completion)