blob: 2e75e268f8115727691ecc39b81287d25e8609c7 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
;;; ycp-grep.el -- My config for search -*- lexical-binding: t -*-
;; Copyright (C) 2023 Free Software Foundation.
;; Author: Yuchen Pei <id@ypei.org>
;; Package-Requires: ((emacs "28.2"))
;; This file is part of dotfiles.
;; dotfiles is free software: you can redistribute it and/or modify it under
;; the terms of the GNU Affero General Public License as published by
;; the Free Software Foundation, either version 3 of the License, or
;; (at your option) any later version.
;; dotfiles is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
;; or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General
;; Public License for more details.
;; You should have received a copy of the GNU Affero General Public
;; License along with dotfiles. If not, see <https://www.gnu.org/licenses/>.
;;; Commentary:
;; My config for search. Covers grep, search, isearch, occur, recoll
;; etc.
;;; Code:
;;; `grep' package
(my-package grep
(:delay 10)
(setq grep-command "grep -inRH --color -A1 -B1 -E ")
;; in the form of (string . position), see docs of read-from-minibuffer
(setq grep-find-command
'("find . -type f -exec grep -inRH --color -A1 -B1 -E \\{\\} +" . 52))
(grep-apply-setting 'grep-find-template
"find -H <D> <X> -type f <F> -exec grep <C> -n --null -E -A1 -B1 <R> /dev/null \\{\\} +")
(setq grep-files-aliases
'(("all" . "* .*")
("el" . "*.el")
("ch" . "*.[ch]")
("c" . "*.c")
("cc" . "*.cc *.cxx *.cpp *.C *.CC *.c++")
("cchh" . "*.cc *.[ch]xx *.[ch]pp *.[CHh] *.CC *.HH *.[ch]++")
("hh" . "*.hxx *.hpp *.[Hh] *.HH *.h++")
("h" . "*.h")
("l" . "[Cc]hange[Ll]og*")
("m" . "[Mm]akefile*")
("tex" . "*.tex")
("texi" . "*.texi")
("asm" . "*.[sS]")
("docs" . "*.md *.html *.rst *.org *.txt *.asciidoc *.adoc *.tex *.texi")))
(my-keybind global-map
"C-c r f" #'grep-find
"C-c r g" #'grep)
)
(my-package my-grep
(:delay 10)
;; TODO: do we really need this?
(advice-add 'grep :filter-return #'my-grep-focus-buffer)
)
(my-package isearch
(:delay 5)
(setq search-whitespace-regexp ".*?" ; one `setq' here to make it obvious they are a bundle
isearch-lax-whitespace t
isearch-regexp-lax-whitespace nil)
(setq isearch-lazy-count t)
(setq lazy-count-prefix-format nil)
(setq lazy-count-suffix-format " (%s/%s)")
(setq isearch-yank-on-move 'shift)
(setq isearch-allow-scroll 'unlimited)
(setq isearch-repeat-on-direction-change t)
(define-key minibuffer-local-isearch-map (kbd "M-/") #'isearch-complete-edit)
(my-keybind isearch-mode-map
"C-g" #'isearch-cancel ; instead of `isearch-abort'
"M-/" #'isearch-complete
"C-o" #'isearch-occur)
)
(my-package replace
(:delay 5)
(add-hook 'occur-mode-hook #'hl-line-mode)
(my-keybind occur-mode-map "t" #'toggle-truncate-lines)
)
;;; `xref' package
(my-package xref
;; All those have been changed for Emacs 28
(setq xref-show-definitions-function #'xref-show-definitions-completing-read) ; for M-.
(setq xref-show-xrefs-function #'xref-show-definitions-buffer)
)
;;; wgrep (writable grep)
(my-package wgrep
(:install t)
(:delay 15)
(setq wgrep-auto-save-buffer t)
(setq wgrep-change-readonly-file t)
(my-keybind grep-mode-map
"e" #'wgrep-change-to-wgrep-mode
"C-x C-q" #'wgrep-change-to-wgrep-mode
"C-c C-c" #'wgrep-finish-edit))
;;; org-recoll
(my-package org-recoll
(:delay 60)
(my-keybind org-recoll-mode-map
"n" #'org-next-visible-heading
"p" #'org-previous-visible-heading
"f" #'org-recoll-next-page
"b" #'org-recoll-previous-page
"<ret>" #'org-open-at-point
"q" #'quit-window))
(provide 'ycp-grep)
|