Files
.emacs.d/modules/editor/siren-vertico.el
Jim Myhrberg 309bc2a611 feat(editor/vertico): improve extension setup
Override default straight recipe for vertico to expose extensions as
packages.

Also create hacky vertico-directory-mode to easily toggle
vertico-directory features on and off.

vertico-directory-mode is then used by a projectile advice to
temporarily disable vertico-directory features while completing results
from projectile. This is required to avoid breaking the
projectile-switch-project and related commands, as the project list is
not a set of files, but vertico-directory-enter thinks it is.
2022-01-18 00:51:34 +00:00

83 lines
2.4 KiB
EmacsLisp

;;; siren-vertico.el --- jimeh's Emacs Siren: vertico configuration.
;;; Commentary:
;; Basic configuration for vertico.
;;; Code:
(use-package vertico
:custom
(vertico-count 16)
(vertico-cycle t)
(vertico-resize nil)
(enable-recursive-minibuffers t)
(read-extended-command-predicate #'command-completion-default-include-p)
:init
(defun siren-crm-indicator (args)
(cons (concat "[CRM] " (car args)) (cdr args)))
:config
(vertico-mode +1)
(advice-add #'completing-read-multiple :filter-args #'siren-crm-indicator))
(use-package vertico-mouse
:after vertico
:config
(vertico-mouse-mode +1))
(use-package vertico-repeat
:after vertico
:bind
("C-c C-v" . vertico-repeat))
(use-package vertico-directory
:after vertico
:demand t
:bind
(:map vertico-map
("C-l" . vertico-directory-up))
:init
;; Hacky minor-mode to toggle vertico-directory features on and off.
(define-minor-mode vertico-directory-mode
"Remap vertico keybindings to handle files/folders better."
:global t
(let ((map vertico-map))
(if vertico-directory-mode
(progn
(add-hook 'rfn-eshadow-update-overlay-hook
'vertico-directory-tidy)
(define-key map (kbd "RET") 'vertico-directory-enter)
(define-key map (kbd "DEL") 'vertico-directory-delete-char)
(define-key map (kbd "M-DEL") 'vertico-directory-delete-word))
(progn
(remove-hook 'rfn-eshadow-update-overlay-hook
'vertico-directory-tidy)
(define-key map (kbd "RET") 'vertico-exit)
(define-key map (kbd "DEL") 'backward-delete-char)
(define-key map (kbd "M-DEL") 'backward-kill-word)))))
:config
(vertico-directory-mode +1)
(with-eval-after-load 'projectile
;; Hackily disable vertico-directory-mode when completing things for
;; projectile. This avoids breaking projectile-switch-project command.
(defun siren-vertico-projectile-completing-read (orig-fun &rest args)
(if vertico-directory-mode
(progn
(vertico-directory-mode -1)
(let ((result (apply orig-fun args)))
(vertico-directory-mode +1)
result))
(apply orig-fun args)))
(advice-add 'projectile-completing-read :around
'siren-vertico-projectile-completing-read)))
(provide 'siren-vertico)
;;; siren-vertico.el ends here