From a8f17cc37a0be0101bb213da9807bfa030414662 Mon Sep 17 00:00:00 2001 From: sterni Date: Sun, 26 Jan 2025 21:36:44 +0100 Subject: [PATCH] feat(sterni/emacs): project-independent project-find-regexp I like project-find-regexp better than grep-find-file, but it's a little annoying to use for arbitrary directories. With C-u, it unnecessarily prompts for a file name pattern. For convenience, add a variant of project-find-regexp which always prompts for a directory, but doesn't require a project nor prompts for a file name pattern. Change-Id: I40f0bdcca4aa129f447f4f4790d732afcf76d3f7 Reviewed-on: https://cl.tvl.fyi/c/depot/+/13056 Autosubmit: sterni Reviewed-by: sterni Tested-by: BuildkiteCI --- users/sterni/emacs/init.el | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/users/sterni/emacs/init.el b/users/sterni/emacs/init.el index bff04d09b..01ff851a1 100644 --- a/users/sterni/emacs/init.el +++ b/users/sterni/emacs/init.el @@ -108,6 +108,22 @@ (setq-default indicate-buffer-boundaries 'left) (setq sentence-end-double-space nil) +;; search + +;; TODO(sterni): can we use ripgrep for xref? +(defun sterni-find-regexp (regexp) + "Find all matches for REGEXP in a specified directory. +Like \\[project-find-regexp], but always ask for a directory (defaulting to +`default-directory') and never prompt for a file glob pattern." + (interactive (list (project--read-regexp))) + (require 'xref) + (let* ((dir (read-directory-name "Base directory: " + default-directory nil t)) + (files (project--files-in-directory dir nil))) + (xref-show-xrefs + (apply-partially #'project--find-regexp-in-files regexp files) + nil))) + ;;; Configure built in modes ;; Perl @@ -228,6 +244,7 @@ (evil-define-key 'normal 'global (kbd "em") 'man) (evil-define-key '(normal visual) 'global (kbd "eu") 'browse-url-at-point) (evil-define-key '(normal visual) 'global (kbd "ef") 'ffap) + (evil-define-key 'normal 'global (kbd "eg") 'sterni-find-regexp) (evil-define-key 'normal 'global (kbd "er") 'rename-visited-file) ;; modify what is displayed (evil-define-key 'normal 'global (kbd "dw")