nftable-migration
1;;; config-search.el --- -*- lexical-binding: t; -*-
2;;; Commentary:
3;;; Search related configuration
4;;; Code:
5
6(setq xref-search-program
7 (cond
8 ((or (executable-find "ripgrep")
9 (executable-find "rg"))
10 'ripgrep)
11 ((executable-find "ugrep")
12 'ugrep)
13 (t
14 'grep)))
15
16;; UseISearch
17(use-package isearch
18 :unless noninteractive
19 :config
20 (defun my-project-search-from-isearch ()
21 (interactive)
22 (let ((query (if isearch-regexp
23 isearch-string
24 (regexp-quote isearch-string))))
25 (isearch-update-ring isearch-string isearch-regexp)
26 (let (search-nonincremental-instead)
27 (ignore-errors (isearch-done t t)))
28 (project-find-regexp query)))
29 (defun my-occur-from-isearch ()
30 (interactive)
31 (let ((query (if isearch-regexp
32 isearch-string
33 (regexp-quote isearch-string))))
34 (isearch-update-ring isearch-string isearch-regexp)
35 (let (search-nonincremental-instead)
36 (ignore-errors (isearch-done t t)))
37 (occur query)))
38 (setq-default search-whitespace-regexp ".*?"
39 isearch-lax-whitespace t
40 isearch-regexp-lax-whitespace nil
41 isearch-lazy-count t
42 lazy-count-prefix-format nil
43 lazy-count-suffix-format " (%s/%s)")
44 (defun stribb/isearch-region (&optional not-regexp no-recursive-edit)
45 "If a region is active, make this the isearch default search
46pattern."
47 (interactive "P\np")
48 (when (use-region-p)
49 (let ((search (buffer-substring-no-properties
50 (region-beginning)
51 (region-end))))
52 (message "stribb/ir: %s %d %d" search (region-beginning) (region-end))
53 (setq deactivate-mark t)
54 (isearch-yank-string search))))
55 (advice-add 'isearch-forward-regexp :after 'stribb/isearch-region)
56 (advice-add 'isearch-forward :after 'stribb/isearch-region)
57 (advice-add 'isearch-backward-regexp :after 'stribb/isearch-region)
58 (advice-add 'isearch-backward :after 'stribb/isearch-region)
59
60 (defun contrib/isearchp-remove-failed-part-or-last-char ()
61 "Remove failed part of search string, or last char if successful.
62Do nothing if search string is empty to start with."
63 (interactive)
64 (if (equal isearch-string "")
65 (isearch-update)
66 (if isearch-success
67 (isearch-delete-char)
68 (while (isearch-fail-pos) (isearch-pop-state)))
69 (isearch-update)))
70
71 (defun contrib/isearch-done-opposite-end (&optional nopush edit)
72 "End current search in the opposite side of the match.
73Particularly useful when the match does not fall within the
74confines of word boundaries (e.g. multiple words)."
75 (interactive)
76 (funcall #'isearch-done nopush edit)
77 (when isearch-other-end (goto-char isearch-other-end)))
78 :bind (("M-s M-o" . multi-occur)
79 :map isearch-mode-map
80 ("C-o" . my-occur-from-isearch)
81 ("C-f" . my-project-search-from-isearch)
82 ("C-d" . isearch-forward-symbol-at-point)
83 ("DEL" . contrib/isearchp-remove-failed-part-or-last-char)
84 ("<C-return>" . contrib/isearch-done-opposite-end)))
85;; -UseISearch
86
87;; UseGrep
88(use-package grep
89 :commands (find-grep grep find-grep-dired find-name-dired)
90 :bind (("M-s n" . find-name-dired)
91 ("M-s F" . find-grep)
92 ("M-s G" . grep)
93 ("M-s d" . find-grep-dired))
94 :hook ((hook-mode . toggle-truncate-lines))
95 :config
96 (setq-default grep-template (string-join '("ugrep"
97 "--color=always"
98 "--ignore-binary"
99 "--ignore-case"
100 "--include=<F>"
101 "--line-number"
102 "--null"
103 "--recursive"
104 "--regexp=<R>")
105 " "))
106 (add-to-list 'grep-find-ignored-directories "auto")
107 (add-to-list 'grep-find-ignored-directories "elpa"))
108;; -UseGrep
109
110;; UseWgrep
111(use-package wgrep
112 :unless noninteractive
113 :commands (wgrep-change-to-wgrep-mode)
114 :defer 2
115 :custom
116 (wgrep-auto-save-buffer t)
117 (wgrep-change-readonly-file t))
118;; -UseWgrep
119
120;; UseRG
121(use-package rg
122 :if (executable-find "rg")
123 :commands (rg rg-project rg-dwim)
124 :bind (("M-s r r" . rg)
125 ("M-s r p" . rg-project)
126 ("M-s r s" . rg-dwim))
127 :config
128 (setq rg-group-result t)
129 (setq rg-hide-command t)
130 (setq rg-show-columns nil)
131 (setq rg-show-header t)
132 (setq rg-default-alias-fallback "all")
133 (cl-pushnew '("tmpl" . "*.tmpl") rg-custom-type-aliases)
134 (cl-pushnew '("gotest" . "*_test.go") rg-custom-type-aliases)
135 (defun vde/rg-buffer-name ()
136 "Generate a rg buffer name from project if in one"
137 (let ((p (project-root (project-current))))
138 (if p
139 (format "rg: %s" (abbreviate-file-name p))
140 "rg")))
141 (setq rg-buffer-name #'vde/rg-buffer-name)
142 ;; (when (f-dir-p "~/src/home/")
143 ;; (rg-define-search rg-projects-dotemacs
144 ;; "Search home"
145 ;; :dir "~/src/home/"
146 ;; :files "*.*"
147 ;; :menu ("Projects" "H" "home")))
148 ;; (when (f-dir-p "~/src/github.com/NixOS/nixpkgs/")
149 ;; (rg-define-search rg-projects-nixpkgs
150 ;; "Search nixpkgs"
151 ;; :dir "~/src/github.com/NixOS/nixpkgs/"
152 ;; :files "*.*"
153 ;; :menu ("Projects" "N" "nixpkgs")))
154 ;; (when (f-dir-p "~/src/tektoncd/pipeline/")
155 ;; (rg-define-search rg-projects-tektoncd-pipeline
156 ;; "Search tektoncd/pipeline"
157 ;; :dir "~/src/tektoncd/pipeline/"
158 ;; :files "*.*"
159 ;; :menu ("tektoncd" "P" "pipeline")))
160 ;; (when (f-dir-p "~/src/tektoncd/operator/")
161 ;; (rg-define-search rg-projects-tektoncd-operator
162 ;; "Search tektoncd/operator"
163 ;; :dir "~/src/tektoncd/operator/"
164 ;; :files "*.*"
165 ;; :menu ("tektoncd" "P" "operator")))
166 ;; (when (f-dir-p "~/src/tektoncd/cli/")
167 ;; (rg-define-search rg-projects-tektoncd-cli
168 ;; "Search tektoncd/cli"
169 ;; :dir "~/src/tektoncd/cli/"
170 ;; :files "*.*"
171 ;; :menu ("tektoncd" "C" "cli")))
172 ;; (when (f-dir-p "~/src/chmouel/")
173 ;; (rg-define-search rg-projects-chmouel
174 ;; "Search chmouel"
175 ;; :dir "~/src/chmouel/"
176 ;; :files "*.*"
177 ;; :menu ("Configs" "ch" "chmouel")))
178 )
179
180;; -UseRG
181
182(provide 'config-search)
183;;; config-search.el ends here