doomemacs/modules/completion/selectrum/config.el

105 lines
4 KiB
EmacsLisp
Raw Normal View History

2021-01-16 03:04:18 +08:00
;;; completion/selectrum/config.el -*- lexical-binding: t; -*-
(use-package! selectrum
2021-01-16 20:21:50 +08:00
:hook (doom-first-input . selectrum-mode)
:init
(setq selectrum-display-action nil
selectrum-num-candidates-displayed 15
selectrum-extend-current-candidate-highlight t)
(unless (featurep! +orderless)
(setq completion-styles '(substring partial-completion)))
:config
(setq selectrum-fix-vertical-window-height 17
selectrum-max-window-height 17)
(defadvice! +selectrum-refresh-on-cycle (&rest _)
:after 'marginalia-cycle
(when (bound-and-true-p selectrum-mode) (selectrum-exhibit))))
2021-01-16 03:04:18 +08:00
(use-package! selectrum-prescient
:when (featurep! +prescient)
:hook (selectrum-mode . selectrum-prescient-mode)
:hook (selectrum-mode . prescient-persist-mode)
:config
(setq selectrum-preprocess-candidates-function #'selectrum-prescient--preprocess)
(add-hook 'selectrum-candidate-selected-hook #'selectrum-prescient--remember)
(add-hook 'selectrum-candidate-inserted-hook #'selectrum-prescient--remember))
(defun flex-if-twiddle (pattern _index _total)
(when (string-suffix-p "~" pattern)
`(orderless-flex . ,(substring pattern 0 -1))))
(defun first-initialism (pattern index _total)
(if (= index 0) 'orderless-initialism))
(defun without-if-bang (pattern _index _total)
"Define a '!not' exclusion prefix for literal strings."
(when (string-prefix-p "!" pattern)
`(orderless-without-literal . ,(substring pattern 1))))
2021-01-16 20:21:50 +08:00
(use-package! orderless
:when (featurep! +orderless)
:defer t
:init
(setq orderless-component-separator "[ &]"
orderless-matching-styles '(orderless-prefixes
orderless-initialism
orderless-regexp))
2021-01-16 20:21:50 +08:00
:config
(setq completion-styles '(orderless))
(setq orderless-skip-highlighting (lambda () selectrum-active-p))
(setq selectrum-highlight-candidates-function #'orderless-highlight-matches)
(setq orderless-matching-styles '(orderless-regexp)
orderless-style-dispatchers '(flex-if-twiddle
without-if-bang)))
2021-01-16 20:21:50 +08:00
2021-01-16 03:04:18 +08:00
(use-package! consult
:defer t
:init
2021-01-16 20:21:50 +08:00
(fset 'multi-occur #'consult-multi-occur)
2021-01-16 03:04:18 +08:00
(define-key!
[remap apropos] #'consult-apropos
[remap bookmark-jump] #'consult-bookmark
[remap evil-show-marks] #'consult-mark
[remap goto-line] #'consult-goto-line
[remap imenu] #'consult-imenu
[remap locate] #'consult-locate
[remap load-theme] #'consult-theme
[remap man] #'consult-man
[remap recentf-open-files] #'consult-recent-file
[remap switch-to-buffer] #'consult-buffer
2021-01-16 03:04:18 +08:00
[remap switch-to-buffer-other-window] #'consult-buffer-other-window
[remap switch-to-buffer-other-frame] #'consult-buffer-other-frame
[remap yank-pop] #'consult-yank-pop)
2021-01-16 20:21:50 +08:00
:config
(setq consult-project-root-function #'doom-project-root)
(setq completion-in-region-function #'consult-completion-in-region)
(setq consult-narrow-key "<")
(setq consult-line-numbers-widen t)
(setq consult-async-input-debounce 0.5)
(setq consult-async-input-throttle 0.8))
2021-01-16 03:04:18 +08:00
2021-01-16 20:21:50 +08:00
(use-package! consult-flycheck
:when (featurep! :checkers syntax)
:after (consult flycheck))
2021-01-16 03:04:18 +08:00
(use-package! embark
2021-01-16 20:29:16 +08:00
:defer t
2021-01-16 03:04:18 +08:00
:init
(setq embark-action-indicator
(lambda (map)
(which-key--show-keymap "Embark" map nil nil 'no-paging)
#'which-key--hide-popup-ignore-command)
embark-become-indicator embark-action-indicator))
2021-01-16 03:04:18 +08:00
(use-package! marginalia
:hook (doom-first-input . marginalia-mode)
:init
(setq-default marginalia-annotators '(marginalia-annotators-heavy))
:config
(add-to-list 'marginalia-command-categories '(persp-switch-to-buffer . buffer)))
2021-01-16 03:04:18 +08:00
(use-package! embark-consult
:after (embark consult)
:hook
(embark-collect-mode . embark-consult-preview-minor-mode))