diff --git a/docs/modules.org b/docs/modules.org index 7bf0a7207..7a3bae28b 100644 --- a/docs/modules.org +++ b/docs/modules.org @@ -46,7 +46,7 @@ completion. + helm =+fuzzy +childframe= - *Another* search engine for love and life + ido - The /other/ *other* search engine for love and life + [[file:../modules/completion/ivy/README.org][ivy]] =+fuzzy +prescient +childframe +icons= - /The/ search engine for love and life -+ [[file:../modules/completion/selectrum/README.org][selectrum]] =+prescient +icons= - The search engine of the future ++ [[file:../modules/completion/selectrum/README.org][selectrum]] =+icons= - The search engine of the future * :config Modules that configure Emacs one way or another, or focus on making it easier diff --git a/modules/completion/selectrum/README.org b/modules/completion/selectrum/README.org index 6feddfe92..7b27ab454 100644 --- a/modules/completion/selectrum/README.org +++ b/modules/completion/selectrum/README.org @@ -12,11 +12,11 @@ - [[#jump-to-navigation][Jump-to navigation]] - [[#project-search--replace][Project search & replace]] - [[#in-buffer-searching][In-buffer searching]] - - [[#selectrum-integration-for-various-completing-commands][Selectrum integration for various completing commands]] + - [[#vertico-integration-for-various-completing-commands][Vertico integration for various completing commands]] - [[#orderless-filtering][Orderless filtering]] * Description -This module provides Selectrum integration for a variety of Emacs commands, as +This module provides Vertico integration for a variety of Emacs commands, as well as a unified interface for project search and replace, powered by ripgrep. #+begin_quote @@ -24,20 +24,16 @@ TODO #+end_quote ** Module Flags -+ ~+prescient~ Enables prescient filtering and sorting for Selectrum searches - instead of orderless. + ~+icons~ Adds icons to ~file~ and ~buffer~ category completion selections. ** Plugins -[[https://github.com/minad/vertico][vertico]] (~+vertico~, experimental for the moment) -[[https://github.com/raxod502/selectrum][selectrum]] +[[https://github.com/minad/vertico][vertico]] [[https://github.com/minad/consult][consult]] [[https://github.com/oantolin/embark/][embark]] [[https://github.com/oantolin/embark/][embark-consult]] [[https://github.com/minad/marginalia][marginalia]] -[[https://github.com/oantolin/orderless][orderless]] (unless ~+prescient~) +[[https://github.com/oantolin/orderless][orderless]] [[https://github.com/mhayashi1120/Emacs-wgrep][wgrep]] -[[https://github.com/raxod502/prescient.el][prescient]] (~+prescient~) [[https://github.com/minad/consult/][consult-flycheck]] (~:checkers syntax~) [[https://github.com/iyefrat/all-the-icons-completion][all-the-icons-completion]] (~+icons~) @@ -121,12 +117,12 @@ https://assets.doomemacs.org/completion/selectrum/buffer-search.png An ~occur-edit~ buffer can be opened from ~consult-line~ with =C-c C-e=. -** Selectrum integration for various completing commands +** Vertico integration for various completing commands *** General -| Keybind | Description | -|----------------+-------------------------------| -| =M-x=, =SPC := | Enhanced M-x | -| =SPC '= | Resume last Selectrum session | +| Keybind | Description | +|----------------+-----------------------------| +| =M-x=, =SPC := | Enhanced M-x | +| =SPC '= | Resume last Vertico session | *** Jump to files, buffers or projects | Keybind | Description | diff --git a/modules/completion/selectrum/TODO.org b/modules/completion/selectrum/TODO.org index 6f77f5831..1ee66f294 100644 --- a/modules/completion/selectrum/TODO.org +++ b/modules/completion/selectrum/TODO.org @@ -31,21 +31,16 @@ case for why this should be an exception: - selectrum is slated to become the default completion module, which makes this less of an inconsistency, but I'm not sure about the performance slowdown in ~map!~ since that seems to be one of the main concerns. -- ~embark~ like most packages in the selectrum cinematic universe can be +- ~embark~ like most packages in the vertico cinematic universe can be installed independently, so if you find it sufficiently useful you could also have a stripped down version of the config in doom core that is just used for on-buffer actions. -** TODO Consider dropping prescient flag -The only advantage over orderless is frecency over recency, without the better -integration orderless has with built in emacs completion. A compromise might be -to have ~+prescient~ just add prescient sorting, but it's probably not worth the -maintenance burden. ** TODO =SPC s s= and =SPC s S= ~:sw~ ? -There isn't really a selectrum analogue to ~swiper-isearch~, ~consult-isearch~ +There isn't really a vertico/consult analogue to ~swiper-isearch~, ~consult-isearch~ does something else (give you previously used isearch search terms). Bound to regular isearch for now. ** TODO =SPC s B= -Selectrum/Consult don't have a ~swiper-all~ analogue either. Unbound for now. +Vertico/Consult don't have a ~swiper-all~ analogue either. Unbound for now. ** TODO Orderless style dispatchers Currently the =!= style dispatcher is only as a prefix, due to the abundance of =!= final macros. In my opinion this is useful enough to break consistency. @@ -73,37 +68,12 @@ naming is hardâ„¢. Best alternative I can think of is this: ;ivy ;; a search engine for love and life compleseus ;; a search engine with all the planks replaced #+end_src -** TODO Consider dropping Selectrum in favor of Vertico: -To this end there is currently a ~+vertico~ flag to try it out, weird naming -aside. I want to do this for a few reasons: -*** Selectrum is more buggy -Selectrum has a few longstanding bugs that don't exist in Vertico, namely: [[https://github.com/raxod502/selectrum/issues/491][491]] -and [[https://github.com/raxod502/selectrum/issues/561][561]], as well as having worse handling when having lines of varying height -(important for good icon support). -*** Feature Comparison -- Minad, Vertico's author, provides a detailed comparison [[https://github.com/hlissner/doom-emacs/pull/4664#issuecomment-871524782][here]]. I will note - however that I was seriously considering the switch before he wrote this - comparison due to the frustration of dealing with the rough edges. -- Vertico doesn't support prescient, but I want to drop it anyway. -- The [[https://github.com/raxod502/selectrum#vertico][feature comparison]] in the selectrum readme has been updated to better - reflect the current state of affairs. Both Vertico and Selectrum have some - features that the other package lacks. In my mind Vertico's features are more - useful, but the feature difference is small enough for it to be less important - than the bugginess imo. -*** Vertico is more actively maintained -This might be a temporary concern, but still. -** TODO Icon support -The icon support works well enough when using Vertico, but is a bit dodgy on -Selectrum due to it not handling lines of varying height that well, which ends -up causing the selection to slide off the screen when moving it the to the -bottom in some cases. Hopefully we just use Vertico and this becomes a nonissue, -but it should still be taken into account. * PROJ HACKs to be addressed ** TODO ~fboundp~ issues Even if the =ivy= module isn't loaded, it's packages can still get loaded by other means, such as =lispy= requiring =counsel=. This means that the ~fboundp~ -logic [[file:~/.emacs.d/modules/config/default/autoload/text.el::(cond ((fboundp 'consult-yank-pop) #'consult-yank-pop) ;;HACK see @ymarco's comment on #5013 and TODO.org][here]] (and formerly [[file:~/.emacs.d/core/autoload/projects.el::(and (bound-and-true-p ivy-mode][here]]) won't work unless the selectrum option is checked +logic [[file:~/.emacs.d/modules/config/default/autoload/text.el::(cond ((fboundp 'consult-yank-pop) #'consult-yank-pop) ;;HACK see @ymarco's comment on #5013 and TODO.org][here]] (and formerly [[file:~/.emacs.d/core/autoload/projects.el::(and (bound-and-true-p ivy-mode][here]]) won't work unless the vertico option is checked first, which is what we do for now. ** TODO ~projectile-switch-project-action~ definition Without [[file:~/.emacs.d/modules/ui/workspaces/config.el::;; HACK?? needs review][this]] change new projects don't get opened in a new tab, but the exact @@ -122,7 +92,7 @@ the other one. This can be reproduces on emacs -Q. This is due to orderless adding a bunch of other matches. * PROJ Review non-blocking Issues -** TODO Profile selectrum =SPC /= vs ivy =SPC /= +** TODO Profile vertico =SPC /= vs ivy =SPC /= Check if there are other places where optimisations can be made. Perhaps the ~command-input-async~ variables can tolorate lower values. ** TODO ~(defadvice! +orderless-match-with-one-face..~ causes lexical error @@ -130,17 +100,8 @@ Probably caused by some doomism https://github.com/oantolin/orderless/issues/41 -* PROJ Upstream Issues -** TODO Selectrum separators cause size calculation bug -https://github.com/raxod502/selectrum/issues/491 -** TODO ~selectrum-repeat~ doesn't scroll to previously selected candidate -Unlike Ivy, ~selectrum-repeat~ doesn't restore the position of the selection in -the completion buffer. Seems to be reproduced in ~emacs -Q~. If so, create -upstream selectrum issue. -** TODO Marginalia annotations sometimes disappear on ~find-file~ -https://github.com/raxod502/selectrum/issues/561 - * PROJ Extra credit +** ~vertico-repeat~ doesn't reselect the candidate ** TODO =bibtex-actions= improvements? Currently =SPC n b= is bound to a function, but =bibtex-actions= doesn't have a main dispatch function like =ivy-bibtex=, rather it has a bunch of different diff --git a/modules/completion/selectrum/autoload/selectrum.el b/modules/completion/selectrum/autoload/selectrum.el index 41e4ff9f6..e668292b1 100644 --- a/modules/completion/selectrum/autoload/selectrum.el +++ b/modules/completion/selectrum/autoload/selectrum.el @@ -124,24 +124,12 @@ Supports exporting consult-grep to wgrep, file to wdeired, and consult-location (defun +selectrum/next-candidate-preview () "Move to next candidate and preivew it" (interactive) - (if (featurep! :completion selectrum +vertico) - (vertico-next) - (selectrum-next-candidate)) + (vertico-next) (+selectrum/embark-preview)) ;;;###autoload (defun +selectrum/previous-candidate-preview () "Move to previous candidate and preview it" (interactive) - (if (featurep! :completion selectrum +vertico) - (vertico-previous) - (selectrum-previous-candidate)) + (vertico-previous) (+selectrum/embark-preview)) - -;;;###autoload -(defun +selectrum/repeat () - "Repeat the last selectrum/vertico command." - (interactive) - (if (featurep! :completion selectrum +vertico) - (vertico-repeat) - (selectrum-repeat))) diff --git a/modules/completion/selectrum/config.el b/modules/completion/selectrum/config.el index 068b73e1e..4a691ffc6 100644 --- a/modules/completion/selectrum/config.el +++ b/modules/completion/selectrum/config.el @@ -1,25 +1,6 @@ ;;; completion/selectrum/config.el -*- lexical-binding: t; -*- -(use-package! selectrum - :when (not (featurep! +vertico)) - :hook (doom-first-input . selectrum-mode) - :init - (setq selectrum-extend-current-candidate-highlight t - selectrum-fix-vertical-window-height t - selectrum-max-window-height 17) - (when (featurep! +prescient) - (setq completion-styles '(substring partial-completion))) - (add-hook 'selectrum-mode-hook (lambda () - (setq completion-in-region-function - (if selectrum-mode - #'consult-completion-in-region - #'completion--in-region)))) - :config - (map! :map selectrum-minibuffer-map - [backspace] #'+selectrum/backward-updir)) - (use-package! vertico - :when (featurep! +vertico) :hook (doom-first-input . vertico-mode) :init (setq vertico-resize nil @@ -34,13 +15,7 @@ (map! :map vertico-map [backspace] #'+selectrum/backward-updir)) -(use-package! selectrum-prescient - :when (featurep! +prescient) - :hook (selectrum-mode . selectrum-prescient-mode) - :hook (selectrum-mode . prescient-persist-mode)) - (use-package! orderless - :when (not (featurep! +prescient)) :demand t :config (defun +selectrum-orderless-dispatch (pattern _index _total) @@ -67,10 +42,7 @@ orderless-style-dispatchers '(+selectrum-orderless-dispatch) orderless-component-separator "[ &]") ;; otherwise find-file gets different highlighting than other commands - (set-face-attribute 'completions-first-difference nil :inherit nil) - (unless (featurep! +vertico) - (setq selectrum-refine-candidates-function #'orderless-filter - selectrum-highlight-candidates-function #'orderless-highlight-matches))) + (set-face-attribute 'completions-first-difference nil :inherit nil)) (use-package! consult :defer t diff --git a/modules/completion/selectrum/packages.el b/modules/completion/selectrum/packages.el index 5dbd1f35b..8fc0c82ea 100644 --- a/modules/completion/selectrum/packages.el +++ b/modules/completion/selectrum/packages.el @@ -1,16 +1,12 @@ ;; -*- no-byte-compile: t; -*- ;;; completion/selectrum/packages.el -(if (featurep! +vertico) - (package! vertico - :recipe (:host github :repo "minad/vertico" - :files ("*.el" "extensions/*.el")) - :pin "9f6cd5d431ec6d288676af80e932d928346a1b36") - (package! selectrum :pin "48ea51aa5b6959ea2a134e36cd21f727047b0677")) +(package! vertico + :recipe (:host github :repo "minad/vertico" + :files ("*.el" "extensions/*.el")) + :pin "9f6cd5d431ec6d288676af80e932d928346a1b36") -(if (featurep! +prescient) - (package! selectrum-prescient :pin "4a0f5405798cfcb98ea005078ef2e2d490e922c4") - (package! orderless :pin "2646dad28c0819fbe9ee521d39efb9ae40e03982")) +(package! orderless :pin "2646dad28c0819fbe9ee521d39efb9ae40e03982") (package! consult :pin "f17db9520ddd612dc837f4112b6bcbb172acef85") (when (featurep! :checkers syntax) diff --git a/modules/config/default/+emacs-bindings.el b/modules/config/default/+emacs-bindings.el index a454e7ed6..d159c6fa5 100644 --- a/modules/config/default/+emacs-bindings.el +++ b/modules/config/default/+emacs-bindings.el @@ -464,7 +464,7 @@ "C-S-s" #'swiper-helm "C-S-r" #'helm-resume) (:when (featurep! :completion selectrum) - "C-S-r" #'+selectrum/repeat) + "C-S-r" #'vertico-repeat) ;;; objed (:when (featurep! :editor objed +manual) diff --git a/modules/config/default/+evil-bindings.el b/modules/config/default/+evil-bindings.el index cf2427141..86efc126c 100644 --- a/modules/config/default/+evil-bindings.el +++ b/modules/config/default/+evil-bindings.el @@ -204,7 +204,6 @@ [C-return] #'helm-grep-run-other-window-action)) (:when (featurep! :completion selectrum) - (:when (featurep! :completion selectrum +vertico) (:after vertico :map vertico-map "M-RET" #'vertico-exit-input @@ -214,18 +213,7 @@ "C-S-j" #'vertico-next-group "C-k" #'vertico-previous "C-M-k" #'+selectrum/previous-candidate-preview - "C-S-k" #'vertico-previous-group)) - (:when (not (featurep! :completion selectrum +vertico)) - (:after selectrum - :map selectrum-minibuffer-map - "M-RET" #'selectrum-submit-exact-input - "C-SPC" #'+selectrum/embark-preview - "C-j" #'selectrum-next-candidate - "C-M-j" #'+selectrum/next-candidate-preview - "C-S-j" #'selectrum-next-page - "C-k" #'selectrum-previous-candidate - "C-M-k" #'+selectrum/previous-candidate-preview - "C-S-k" #'selectrum-previous-page)))) + "C-S-k" #'vertico-previous-group))) ;;; :ui @@ -318,7 +306,7 @@ :desc "Resume last search" "'" (cond ((featurep! :completion ivy) #'ivy-resume) ((featurep! :completion helm) #'helm-resume) - ((featurep! :completion selectrum) #'+selectrum/repeat)) + ((featurep! :completion selectrum) #'vertico-repeat)) :desc "Search for symbol in project" "*" #'+default/search-project-for-symbol-at-point :desc "Search project" "/" #'+default/search-project diff --git a/modules/input/layout/+bepo.el b/modules/input/layout/+bepo.el index fd582dce9..cc9f2c7af 100644 --- a/modules/input/layout/+bepo.el +++ b/modules/input/layout/+bepo.el @@ -135,9 +135,6 @@ In all cases, 'h' functions go to 'c' and 'l' ones go to 'r' so the navigation k (after! helm-files (+layout-bepo-rotate-bare-keymap '(helm-read-file-map) +layout-bepo-cr-rotation-style) (+layout-bepo-rotate-keymaps '(helm-read-file-map))) - (after! selectrum - (+layout-bepo-rotate-bare-keymap '(selectrum-minibuffer-map) +layout-bepo-cr-rotation-style) - (+layout-bepo-rotate-keymaps '(selectrum-minibuffer-map))) (after! company (+layout-bepo-rotate-bare-keymap '(company-active-map company-search-map) +layout-bepo-cr-rotation-style)) (after! evil-snipe