doomemacs/modules/completion/selectrum/config.el

152 lines
6.5 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)
2021-05-01 14:38:54 +03:00
(when (featurep! +prescient)
(setq completion-styles '(substring partial-completion)))
(map! "C-;" #'embark-act ; to be moved to :config default if accepted
:leader
:desc "Actions" "a" #'embark-act) ; to be moved to :config default if accepted
:config
(setq selectrum-fix-vertical-window-height 17
selectrum-max-window-height 17)
(defadvice! +selectrum-refresh-on-cycle (&rest _)
:after 'marginalia-cycle
2021-04-29 12:32:04 +03:00
(when (bound-and-true-p selectrum-mode) (selectrum-exhibit)))
(defun +selectrum/backward-updir ()
"Delete char before or go up directory for file cagetory selectrum buffers."
(interactive)
(if (and (eq (char-before) ?/)
(eq (selectrum--get-meta 'category) 'file))
(let ((new-path (minibuffer-contents)))
(delete-region (minibuffer-prompt-end) (point-max))
(insert (abbreviate-file-name
(file-name-directory
(directory-file-name
(expand-file-name new-path))))))
(call-interactively 'backward-delete-char)))
2021-04-29 12:32:04 +03:00
(map! :map selectrum-minibuffer-map
"C-;" #'embark-act
"C-c C-;" #'embark-export
:desc "Export to writable buffer"
"C-c C-e" #'+selectrum/embark-export-write
[backspace] #'+selectrum/backward-updir
:desc "Cycle marginalia views"
"M-A" #'marginalia-cycle))
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))
2021-01-16 20:21:50 +08:00
(use-package! orderless
2021-05-01 14:38:54 +03:00
:when (not (featurep! +prescient))
:demand t
2021-01-16 20:21:50 +08:00
:config
(defun +selectrum-orderless-dispatch (pattern _index _total)
(cond
;; Ensure that $ works with Consult commands, which add disambiguation suffixes
((string-suffix-p "$" pattern) `(orderless-regexp . ,(concat (substring pattern 0 -1) "[\x100000-\x10FFFD]*$")))
;; Ignore single !
((string= "!" pattern) `(orderless-literal . ""))
;; Without literal
((string-prefix-p "!" pattern) `(orderless-without-literal . ,(substring pattern 1)))
;; Initialism matching
((string-prefix-p "`" pattern) `(orderless-initialism . ,(substring pattern 1)))
((string-suffix-p "`" pattern) `(orderless-initialism . ,(substring pattern 0 -1)))
;; Literal matching
((string-prefix-p "=" pattern) `(orderless-literal . ,(substring pattern 1)))
((string-suffix-p "=" pattern) `(orderless-literal . ,(substring pattern 0 -1)))
;; Flex matching
((string-prefix-p "~" pattern) `(orderless-flex . ,(substring pattern 1)))
((string-suffix-p "~" pattern) `(orderless-flex . ,(substring pattern 0 -1)))))
(setq completion-styles '(orderless)
completion-category-defaults nil
;; note that despite override in the name orderless can still be used in find-file etc.
completion-category-overrides '((file (styles . (partial-completion))))
orderless-style-dispatchers '(+selectrum-orderless-dispatch)
orderless-component-separator "[ &]"
selectrum-refine-candidates-function #'orderless-filter
selectrum-highlight-candidates-function #'orderless-highlight-matches))
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
2021-04-29 12:32:04 +03:00
[remap yank-pop] #'consult-yank-pop
[remap describe-bindings] #'embark-bindings
[remap persp-switch-to-buffer] #'+selectrum/switch-workspace-buffer)
(setq completion-in-region-function #'consult-completion-in-region)
2021-01-16 20:21:50 +08:00
:config
(recentf-mode)
(setq consult-project-root-function #'doom-project-root
completion-in-region-function #'consult-completion-in-region
consult-narrow-key "<"
consult-line-numbers-widen t
consult-async-input-debounce 0.5
consult-async-input-throttle 0.8)
(mapc
(lambda (x) (setf
(alist-get x consult-config)
(list :preview-key (list (kbd "C-SPC") (kbd "C-M-j") (kbd "C-M-k")))))
'(consult-bookmark consult-recent-file consult-theme
consult--grep consult-grep consult-ripgrep consult-git-grep +default/search-project)))
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
:init
(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)
:config
2021-04-29 12:32:04 +03:00
(map!
:map embark-file-map
:desc "Open Dired on target" "j" #'ffap-dired
:desc "Open target with sudo" "s" #'sudo-edit
:desc "Open target with vlf" "l" #'vlf)
(set-popup-rule! "^\\*Embark Export" :size 0.35 :ttl 0 :quit nil)
(set-popup-rule! "^\\*Embark Collect" :size 0.35 :ttl 0 :quit nil))
2021-01-16 03:04:18 +08:00
(use-package! marginalia
:hook (doom-first-input . marginalia-mode)
: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)
:demand t
2021-01-16 03:04:18 +08:00
:hook
(embark-collect-mode . consult-preview-at-point-mode))
2021-05-07 11:40:55 -05:00
(use-package! wgrep
:commands wgrep-change-to-wgrep-mode
:config (setq wgrep-auto-save-buffer t))