Add selectrum project search
This commit is contained in:
parent
21a8694727
commit
65c153796e
4 changed files with 97 additions and 9 deletions
63
modules/completion/selectrum/autoload/selectrum.el
Normal file
63
modules/completion/selectrum/autoload/selectrum.el
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
;;;###autoload
|
||||||
|
(cl-defun +selectrum-file-search (&key query in all-files (recursive t) prompt args)
|
||||||
|
"Conduct a file search using ripgrep.
|
||||||
|
|
||||||
|
:query STRING
|
||||||
|
Determines the initial input to search for.
|
||||||
|
:in PATH
|
||||||
|
Sets what directory to base the search out of. Defaults to the current project's root.
|
||||||
|
:recursive BOOL
|
||||||
|
Whether or not to search files recursively from the base directory."
|
||||||
|
(declare (indent defun))
|
||||||
|
(unless (executable-find "rg")
|
||||||
|
(user-error "Couldn't find ripgrep in your PATH"))
|
||||||
|
(require 'consult)
|
||||||
|
(setq deactivate-mark t)
|
||||||
|
(let* ((this-command 'consult--grep)
|
||||||
|
(project-root (or (doom-project-root) default-directory))
|
||||||
|
(directory (or in project-root))
|
||||||
|
(args (split-string
|
||||||
|
(string-trim
|
||||||
|
(concat (if all-files "-uu")
|
||||||
|
(unless recursive "--maxdepth 1")
|
||||||
|
"--null --line-buffered --color=always --max-columns=500 --no-heading --line-number"
|
||||||
|
" --hidden -g!.git "
|
||||||
|
(mapconcat #'shell-quote-argument args " ")))
|
||||||
|
" "))
|
||||||
|
(prompt (or prompt
|
||||||
|
(format "rg [%s]: "
|
||||||
|
(cond ((equal directory default-directory)
|
||||||
|
"./")
|
||||||
|
((equal directory project-root)
|
||||||
|
(projectile-project-name))
|
||||||
|
((file-relative-name directory project-root))))))
|
||||||
|
(query (or query
|
||||||
|
(when (doom-region-active-p)
|
||||||
|
(replace-regexp-in-string
|
||||||
|
"[! |]" (lambda (substr)
|
||||||
|
(cond ((and (string= substr " ")
|
||||||
|
(not (featurep! +fuzzy)))
|
||||||
|
" ")
|
||||||
|
((string= substr "|")
|
||||||
|
"\\\\\\\\|")
|
||||||
|
((concat "\\\\" substr))))
|
||||||
|
(rxt-quote-pcre (doom-thing-at-point-or-region))))))
|
||||||
|
(ripgrep-command `("rg" ,@args "." "-e")))
|
||||||
|
(consult--grep prompt ripgrep-command directory query)))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun +selectrum/project-search (&optional arg initial-query directory)
|
||||||
|
"Peforms a live project search from the project root using ripgrep.
|
||||||
|
|
||||||
|
If ARG (universal argument), include all files, even hidden or compressed ones,
|
||||||
|
in the search."
|
||||||
|
(interactive "P")
|
||||||
|
(+selectrum-file-search :query initial-query :in directory :all-files arg))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun +selectrum/project-search-from-cwd (&optional arg initial-query)
|
||||||
|
"Performs a live project search from the current directory.
|
||||||
|
|
||||||
|
If ARG (universal argument), include all files, even hidden or compressed ones."
|
||||||
|
(interactive "P")
|
||||||
|
(+selectrum/project-search arg initial-query default-directory))
|
|
@ -1,7 +1,12 @@
|
||||||
;;; completion/selectrum/config.el -*- lexical-binding: t; -*-
|
;;; completion/selectrum/config.el -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
(use-package! selectrum
|
(use-package! selectrum
|
||||||
:hook (doom-first-input . selectrum-mode))
|
:hook (doom-first-input . selectrum-mode)
|
||||||
|
:config
|
||||||
|
(setq selectrum-extend-current-candidate-highlight t
|
||||||
|
selectrum-fix-minibuffer-height t)
|
||||||
|
(unless (featurep! +orderless)
|
||||||
|
(setq completion-styles '(substring partial-completion))))
|
||||||
|
|
||||||
(when (featurep! +prescient)
|
(when (featurep! +prescient)
|
||||||
(use-package! selectrum-prescient
|
(use-package! selectrum-prescient
|
||||||
|
@ -9,9 +14,15 @@
|
||||||
:hook ((doom-first-input . selectrum-prescient-mode)
|
:hook ((doom-first-input . selectrum-prescient-mode)
|
||||||
(doom-first-input . prescient-persist-mode))))
|
(doom-first-input . prescient-persist-mode))))
|
||||||
|
|
||||||
|
(use-package! orderless
|
||||||
|
:when (featurep! +orderless)
|
||||||
|
:config
|
||||||
|
(setq completion-styles '(orderless)))
|
||||||
|
|
||||||
(use-package! consult
|
(use-package! consult
|
||||||
:defer t
|
:defer t
|
||||||
:init
|
:init
|
||||||
|
(fset 'multi-occur #'consult-multi-occur)
|
||||||
(define-key!
|
(define-key!
|
||||||
[remap apropos] #'consult-apropos
|
[remap apropos] #'consult-apropos
|
||||||
[remap goto-line] #'consult-goto-line
|
[remap goto-line] #'consult-goto-line
|
||||||
|
@ -22,14 +33,22 @@
|
||||||
[remap man] #'consult-man
|
[remap man] #'consult-man
|
||||||
[remap yank-pop] #'consult-yank-pop
|
[remap yank-pop] #'consult-yank-pop
|
||||||
[remap locate] #'consult-locate
|
[remap locate] #'consult-locate
|
||||||
[remap load-theme] #'consult-theme))
|
[remap load-theme] #'consult-theme
|
||||||
|
[remap recentf-open-files] #'consult-recent-file)
|
||||||
|
:config
|
||||||
|
(setq consult-project-root-function #'projectile-project-root))
|
||||||
|
|
||||||
(use-package! consult-flycheck)
|
(use-package! consult-flycheck
|
||||||
|
:when (featurep! :checkers syntax)
|
||||||
|
:after (consult flycheck))
|
||||||
|
|
||||||
(use-package! embark
|
(use-package! embark
|
||||||
:init
|
:init
|
||||||
(define-key!
|
(define-key!
|
||||||
"C-S-a" #'embark-act))
|
"C-S-a" #'embark-act)
|
||||||
|
(define-key! selectrum-minibuffer-map
|
||||||
|
"C-c C-o" #'embark-export
|
||||||
|
"C-c C-c" #'embark-act-noexit))
|
||||||
|
|
||||||
(use-package! marginalia
|
(use-package! marginalia
|
||||||
:after selectrum
|
:after selectrum
|
||||||
|
|
|
@ -6,8 +6,12 @@
|
||||||
(when (featurep! +prescient)
|
(when (featurep! +prescient)
|
||||||
(package! selectrum-prescient))
|
(package! selectrum-prescient))
|
||||||
|
|
||||||
|
(when (featurep! +orderless)
|
||||||
|
(package! orderless))
|
||||||
|
|
||||||
(package! consult)
|
(package! consult)
|
||||||
(package! consult-flycheck)
|
(when (featurep! :checkers syntax)
|
||||||
|
(package! consult-flycheck))
|
||||||
|
|
||||||
(package! embark)
|
(package! embark)
|
||||||
(package! embark-consult)
|
(package! embark-consult)
|
||||||
|
|
|
@ -10,8 +10,9 @@ If prefix ARG is set, prompt for a directory to search from."
|
||||||
(read-directory-name "Search directory: ")
|
(read-directory-name "Search directory: ")
|
||||||
default-directory)))
|
default-directory)))
|
||||||
(call-interactively
|
(call-interactively
|
||||||
(cond ((featurep! :completion ivy) #'+ivy/project-search-from-cwd)
|
(cond ((featurep! :completion ivy) #'+ivy/project-search-from-cwd)
|
||||||
((featurep! :completion helm) #'+helm/project-search-from-cwd)
|
((featurep! :completion helm) #'+helm/project-search-from-cwd)
|
||||||
|
((featurep! :completion selectrum) #'+selectrum/project-search-from-cwd)
|
||||||
(#'rgrep)))))
|
(#'rgrep)))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
|
@ -45,8 +46,9 @@ If prefix ARG is set, include ignored/hidden files."
|
||||||
(user-error "There are no known projects"))
|
(user-error "There are no known projects"))
|
||||||
default-directory)))
|
default-directory)))
|
||||||
(call-interactively
|
(call-interactively
|
||||||
(cond ((featurep! :completion ivy) #'+ivy/project-search)
|
(cond ((featurep! :completion ivy) #'+ivy/project-search)
|
||||||
((featurep! :completion helm) #'+helm/project-search)
|
((featurep! :completion helm) #'+helm/project-search)
|
||||||
|
((featurep! :completion selectrum) #'+selectrum/project-search)
|
||||||
(#'projectile-ripgrep)))))
|
(#'projectile-ripgrep)))))
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue