Refactor ivy project-search functionality
To prepare for Helm counterpart
This commit is contained in:
parent
8aa21517a2
commit
7f00221551
1 changed files with 28 additions and 37 deletions
|
@ -202,17 +202,18 @@ search current file. See `+ivy-task-tags' to customize what this searches for."
|
||||||
;; File searching
|
;; File searching
|
||||||
;;
|
;;
|
||||||
|
|
||||||
(defvar +ivy--file-search-recursion-p t)
|
(cl-defun +ivy--file-search (engine &key query in all-files (recursive t))
|
||||||
(defvar +ivy--file-search-all-files-p nil)
|
|
||||||
|
|
||||||
(defun +ivy--file-search (engine &optional query directory)
|
|
||||||
(let* ((project-root (doom-project-root))
|
(let* ((project-root (doom-project-root))
|
||||||
(directory (or directory project-root))
|
(directory (or in project-root))
|
||||||
(recursion-p +ivy--file-search-recursion-p)
|
(default-directory directory)
|
||||||
(all-files-p +ivy--file-search-all-files-p)
|
|
||||||
(engine (or engine
|
(engine (or engine
|
||||||
(and (executable-find "rg") 'rg)
|
(and (executable-find "rg") 'rg)
|
||||||
(and (executable-find "ag") 'ag)))
|
(and (executable-find "ag") 'ag)
|
||||||
|
(and (executable-find "pt") 'pt)
|
||||||
|
(and (or (executable-find "grep")
|
||||||
|
(executable-find "git"))
|
||||||
|
'grep)
|
||||||
|
(error "No search engine specified (is ag, rg, pt or git installed?)")))
|
||||||
(query
|
(query
|
||||||
(or query
|
(or query
|
||||||
(when (use-region-p)
|
(when (use-region-p)
|
||||||
|
@ -228,8 +229,7 @@ search current file. See `+ivy-task-tags' to customize what this searches for."
|
||||||
((equal directory project-root)
|
((equal directory project-root)
|
||||||
(projectile-project-name))
|
(projectile-project-name))
|
||||||
(t
|
(t
|
||||||
(file-relative-name directory project-root)))))
|
(file-relative-name directory project-root))))))
|
||||||
(default-directory directory))
|
|
||||||
(require 'counsel)
|
(require 'counsel)
|
||||||
(cl-letf (((symbol-function 'counsel-ag-function)
|
(cl-letf (((symbol-function 'counsel-ag-function)
|
||||||
(symbol-function '+ivy*counsel-ag-function))
|
(symbol-function '+ivy*counsel-ag-function))
|
||||||
|
@ -237,10 +237,9 @@ search current file. See `+ivy-task-tags' to customize what this searches for."
|
||||||
(symbol-function '+ivy*counsel-git-grep-function)))
|
(symbol-function '+ivy*counsel-git-grep-function)))
|
||||||
(pcase engine
|
(pcase engine
|
||||||
('grep
|
('grep
|
||||||
(let ((args (if recursion-p " -r"))
|
(let ((args (if recursive " -r"))
|
||||||
(counsel-projectile-grep-initial-input query)
|
(counsel-projectile-grep-initial-input query))
|
||||||
(default-directory directory))
|
(if all-files
|
||||||
(if all-files-p
|
|
||||||
(cl-letf (((symbol-function #'projectile-ignored-directories-rel)
|
(cl-letf (((symbol-function #'projectile-ignored-directories-rel)
|
||||||
(symbol-function #'ignore))
|
(symbol-function #'ignore))
|
||||||
((symbol-function #'projectile-ignored-files-rel)
|
((symbol-function #'projectile-ignored-files-rel)
|
||||||
|
@ -248,18 +247,18 @@ search current file. See `+ivy-task-tags' to customize what this searches for."
|
||||||
(counsel-projectile-grep args))
|
(counsel-projectile-grep args))
|
||||||
(counsel-projectile-grep args))))
|
(counsel-projectile-grep args))))
|
||||||
('ag
|
('ag
|
||||||
(let ((args (concat (if all-files-p " -a")
|
(let ((args (concat (if all-files " -a")
|
||||||
(unless recursion-p " --depth 1"))))
|
(unless recursive " --depth 1"))))
|
||||||
(counsel-ag query directory args (format prompt args))))
|
(counsel-ag query directory args (format prompt args))))
|
||||||
('rg
|
('rg
|
||||||
(let ((args (concat (if all-files-p " -uu")
|
(let ((args (concat (if all-files " -uu")
|
||||||
(unless recursion-p " --maxdepth 1"))))
|
(unless recursive " --maxdepth 1"))))
|
||||||
(counsel-rg query directory args (format prompt args))))
|
(counsel-rg query directory args (format prompt args))))
|
||||||
('pt
|
('pt
|
||||||
(let ((counsel-pt-base-command
|
(let ((counsel-pt-base-command
|
||||||
(concat counsel-pt-base-command
|
(concat counsel-pt-base-command
|
||||||
(if all-files-p " -U")
|
(if all-files " -U")
|
||||||
(unless recursion-p " --depth=1")))
|
(unless recursive " --depth=1")))
|
||||||
(default-directory directory))
|
(default-directory directory))
|
||||||
(counsel-pt query)))
|
(counsel-pt query)))
|
||||||
(_ (error "No search engine specified"))))))
|
(_ (error "No search engine specified"))))))
|
||||||
|
@ -287,8 +286,7 @@ If ALL-FILES-P, don't respect .gitignore files and search everything.
|
||||||
|
|
||||||
NOTE: ripgrep doesn't support multiline searches (yet)."
|
NOTE: ripgrep doesn't support multiline searches (yet)."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(let ((+ivy--file-search-all-files-p all-files-p))
|
(+ivy--file-search 'rg :query query :in directory :all-files all-files-p))
|
||||||
(+ivy--file-search 'rg query directory)))
|
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +ivy/ag (all-files-p &optional query directory)
|
(defun +ivy/ag (all-files-p &optional query directory)
|
||||||
|
@ -298,8 +296,7 @@ the last known search is used.
|
||||||
|
|
||||||
If ALL-FILES-P, don't respect .gitignore files and search everything."
|
If ALL-FILES-P, don't respect .gitignore files and search everything."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(let ((+ivy--file-search-all-files-p all-files-p))
|
(+ivy--file-search 'ag :query query :in directory :all-files all-files-p))
|
||||||
(+ivy--file-search 'ag query directory)))
|
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +ivy/pt (all-files-p &optional query directory)
|
(defun +ivy/pt (all-files-p &optional query directory)
|
||||||
|
@ -309,8 +306,7 @@ the last known search is used.
|
||||||
|
|
||||||
If ALL-FILES-P, don't respect .gitignore files and search everything."
|
If ALL-FILES-P, don't respect .gitignore files and search everything."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(let ((+ivy--file-search-all-files-p all-files-p))
|
(+ivy--file-search 'pt :query query :in directory :all-files all-files-p))
|
||||||
(+ivy--file-search 'pt query directory)))
|
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +ivy/grep (all-files-p &optional query directory)
|
(defun +ivy/grep (all-files-p &optional query directory)
|
||||||
|
@ -320,41 +316,36 @@ active, the last known search is used.
|
||||||
|
|
||||||
If ALL-FILES-P, don't respect .gitignore files and search everything."
|
If ALL-FILES-P, don't respect .gitignore files and search everything."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(let ((+ivy--file-search-all-files-p all-files-p))
|
(+ivy--file-search 'grep :query query :in directory :all-files all-files-p))
|
||||||
(+ivy--file-search 'grep query directory)))
|
|
||||||
|
|
||||||
|
|
||||||
|
;; Relative to current directory
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +ivy/rg-from-cwd (recursive-p &optional query)
|
(defun +ivy/rg-from-cwd (recursive-p &optional query)
|
||||||
"Like `+ivy/rg', but from the current directory (recursively if RECURSIVE-P is
|
"Like `+ivy/rg', but from the current directory (recursively if RECURSIVE-P is
|
||||||
non-nil)."
|
non-nil)."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(let ((+ivy--file-search-recursion-p recursive-p))
|
(+ivy--file-search 'rg :query query :in default-directory :recursive recursive-p))
|
||||||
(+ivy/rg t query default-directory)))
|
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +ivy/ag-from-cwd (recursive-p &optional query)
|
(defun +ivy/ag-from-cwd (recursive-p &optional query)
|
||||||
"Like `+ivy/ag', but from the current directory (recursively if RECURSIVE-P is
|
"Like `+ivy/ag', but from the current directory (recursively if RECURSIVE-P is
|
||||||
non-nil)."
|
non-nil)."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(let ((+ivy--file-search-recursion-p recursive-p))
|
(+ivy--file-search 'ag :query query :in default-directory :recursive recursive-p))
|
||||||
(+ivy/ag t query default-directory)))
|
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +ivy/pt-from-cwd (recursive-p &optional query)
|
(defun +ivy/pt-from-cwd (recursive-p &optional query)
|
||||||
"Like `+ivy/pt', but from the current directory (recursively if RECURSIVE-P is
|
"Like `+ivy/pt', but from the current directory (recursively if RECURSIVE-P is
|
||||||
non-nil)."
|
non-nil)."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(let ((+ivy--file-search-recursion-p recursive-p))
|
(+ivy--file-search 'pt :query query :in default-directory :recursive recursive-p))
|
||||||
(+ivy/pt t query default-directory)))
|
|
||||||
|
|
||||||
;;;###autoload
|
;;;###autoload
|
||||||
(defun +ivy/grep-from-cwd (recursive-p &optional query)
|
(defun +ivy/grep-from-cwd (recursive-p &optional query)
|
||||||
"Like `+ivy/grep', but from the current directory (recursively if RECURSIVE-P is
|
"Like `+ivy/grep', but from the current directory (recursively if RECURSIVE-P is
|
||||||
non-nil)."
|
non-nil)."
|
||||||
(interactive "P")
|
(interactive "P")
|
||||||
(let ((+ivy--file-search-recursion-p recursive-p))
|
(+ivy--file-search 'grep :query query :in default-directory :recursive recursive-p))
|
||||||
(+ivy/grep t query default-directory)))
|
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue