From f66b1c9d9aa11ec59252789e3f4ae6789874360a Mon Sep 17 00:00:00 2001 From: David Landell Date: Sat, 30 May 2020 16:27:10 +0200 Subject: [PATCH] Integrate rg into isearch --- rg-menu.el | 6 +++++- rg.el | 25 +++++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/rg-menu.el b/rg-menu.el index d80186f..91411dc 100644 --- a/rg-menu.el +++ b/rg-menu.el @@ -40,6 +40,7 @@ (declare-function rg-buffers "rg.el") (declare-function rg-dwim-current-dir "rg.el") (declare-function rg-dwim-current-file "rg.el") +(declare-function rg-isearch-current-file "rg.el") (declare-function rg-list-searches "rg.el") (declare-function rg-save-search "rg.el") (declare-function rg-save-search-as-name "rg.el") @@ -105,6 +106,7 @@ FUNC is an rerun function invoked from an `rg-mode' buffer." (rg-menu-wrap-transient-search rg-buffers) (rg-menu-wrap-transient-search rg-dwim-current-dir) (rg-menu-wrap-transient-search rg-dwim-current-file) +(rg-menu-wrap-transient-search rg-isearch-current-file) (rg-menu-wrap-transient-search rg-list-searches) (rg-menu-wrap-transient-search rg-save-search) (rg-menu-wrap-transient-search rg-save-search-as-name) @@ -159,7 +161,9 @@ FUNC is an rerun function invoked from an `rg-mode' buffer." (3 "r" "Regex" rg--transient) (3 "t" "Literal" rg-literal--transient) (3 "p" "Project" rg-project--transient) - (3 "B" "Buffers" rg-buffers--transient)] + (3 "B" "Buffers" rg-buffers--transient) + (4 "i" "Isearch" rg-isearch-current-file--transient) + ] [:if-mode rg-mode :description "Rerun" (3 "g" "Go" rg-rerun--transient) diff --git a/rg.el b/rg.el index a14edba..d87f2b3 100644 --- a/rg.el +++ b/rg.el @@ -567,6 +567,23 @@ reports." (message environment) (kill-new environment))) +(defun rg-get-isearch-string () + "Extract the isearch string from the last isearch." + ;; Do what `isearch-occur' does. + (cond + ((functionp isearch-regexp-function) + (funcall isearch-regexp-function isearch-string)) + (isearch-regexp-function (word-search-regexp isearch-string)) + (isearch-regexp isearch-string) + (t isearch-string))) + +(defun rg-isearch-literal-p () + "Return t if last isearch was literal, nil otherwise." + (not (or + (functionp isearch-regexp-function) + isearch-regexp-function + isearch-regexp))) + ;;;###autoload (defmacro rg-define-toggle (flag &optional key default) "Define a command line flag that can be toggled from the rg result buffer. @@ -894,6 +911,14 @@ Example: (rg-menu-wrap-transient-search ,name) ,@menu-forms))) +;;;###autoload (autoload 'rg-isearch-file "rg.el" "" t) +(rg-define-search rg-isearch-current-file + :dir current + :query (rg-get-isearch-string) + :format (rg-isearch-literal-p) + :files current + :dir current) + ;;;###autoload (autoload 'rg-project "rg.el" "" t) (rg-define-search rg-project "Run ripgrep in current project searching for QUERY in FILES.