140 lines
3.7 KiB
EmacsLisp
140 lines
3.7 KiB
EmacsLisp
(use-package imenu
|
|
:ensure nil
|
|
:config
|
|
;; Don't limit item length, this makes imenu less useful in
|
|
;; consult-imenu
|
|
(setq imenu-max-item-length 'unlimited))
|
|
|
|
;;; Isearch, occur, grep
|
|
(use-package isearch
|
|
:ensure nil
|
|
:demand t
|
|
:config
|
|
(setq search-whitespace-regexp ".*?" ; one `setq' here to make it obvious they are a bundle
|
|
isearch-lax-whitespace t
|
|
isearch-regexp-lax-whitespace nil))
|
|
|
|
(use-package isearch
|
|
:ensure nil
|
|
:demand t
|
|
:config
|
|
(setq search-highlight t)
|
|
(setq isearch-lazy-highlight t)
|
|
(setq lazy-highlight-initial-delay 0.5)
|
|
(setq lazy-highlight-no-delay-length 4))
|
|
|
|
(use-package isearch
|
|
:ensure nil
|
|
:demand t
|
|
:config
|
|
(setq isearch-lazy-count t)
|
|
(setq lazy-count-prefix-format "(%s/%s) ")
|
|
(setq lazy-count-suffix-format nil))
|
|
|
|
(use-package isearch
|
|
:ensure nil
|
|
:demand t
|
|
:config
|
|
(setq list-matching-lines-jump-to-current-line nil) ; do not jump to current line in `*occur*' buffers
|
|
(add-hook 'occur-mode-hook #'hl-line-mode))
|
|
|
|
(use-package isearch
|
|
:ensure nil
|
|
:demand t
|
|
:bind
|
|
( :map minibuffer-local-isearch-map
|
|
("M-/" . isearch-complete-edit)
|
|
:map occur-mode-map
|
|
("t" . toggle-truncate-lines)
|
|
:map isearch-mode-map
|
|
("C-g" . isearch-cancel) ; instead of `isearch-abort'
|
|
("M-/" . isearch-complete)))
|
|
|
|
;;; grep and xref
|
|
(use-package re-builder
|
|
:ensure nil
|
|
:commands (re-builder regexp-builder)
|
|
:config
|
|
(setq reb-re-syntax 'read))
|
|
|
|
(use-package xref
|
|
:ensure nil
|
|
:commands (xref-find-definitions xref-go-back)
|
|
:config
|
|
;; 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) ; for grep and the like
|
|
(setq xref-file-name-display 'project-relative)
|
|
(setq xref-search-program (if (or (executable-find "rg")
|
|
(executable-find "ripgrep"))
|
|
'ripgrep
|
|
'grep)))
|
|
|
|
(use-package grep
|
|
:ensure nil
|
|
:commands (grep lgrep rgrep)
|
|
:config
|
|
(setq grep-save-buffers nil)
|
|
(setq grep-use-headings t) ; Emacs 30
|
|
|
|
(let ((executable (or (executable-find "rg") "grep"))
|
|
(rgp (string-match-p "rg" grep-program)))
|
|
(setq grep-program executable)
|
|
(setq grep-template
|
|
(if rgp
|
|
"rg -nH --null -e <R> <F>"
|
|
"grep <X> <C> -nH --null -e <R> <F>"))
|
|
(setq xref-search-program (if rgp 'ripgrep 'grep))))
|
|
|
|
;;; wgrep (writable grep)
|
|
;; See the `grep-edit-mode' for the new built-in feature.
|
|
(unless (>= emacs-major-version 31)
|
|
(use-package wgrep
|
|
:ensure t
|
|
:after grep
|
|
:bind
|
|
( :map 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))
|
|
:config
|
|
(setq wgrep-auto-save-buffer t)
|
|
(setq wgrep-change-readonly-file t)))
|
|
|
|
(use-package avy
|
|
:ensure t
|
|
:bind
|
|
("M-j" . avy-goto-char-timer)
|
|
("M-g SPC" . avy-goto-char-timer)
|
|
:config
|
|
;; Mark text
|
|
(defun avy-action-mark-to-char (pt)
|
|
(activate-mark)
|
|
(goto-char pt))
|
|
|
|
(setf (alist-get ? avy-dispatch-alist) 'avy-action-mark-to-char)
|
|
|
|
(with-eval-after-load 'helpful
|
|
(defun avy-action-helpful (pt)
|
|
(save-excursion
|
|
(goto-char pt)
|
|
(helpful-at-point))
|
|
(select-window
|
|
(cdr (ring-ref avy-ring 0)))
|
|
t)
|
|
|
|
(setf (alist-get ?H avy-dispatch-alist) 'avy-action-helpful))
|
|
|
|
(with-eval-after-load 'embark
|
|
(defun avy-action-embark (pt)
|
|
(unwind-protect
|
|
(save-excursion
|
|
(goto-char pt)
|
|
(embark-act))
|
|
(select-window
|
|
(cdr (ring-ref avy-ring 0))))
|
|
t)
|
|
|
|
(setf (alist-get ?. avy-dispatch-alist) 'avy-action-embark)))
|
|
|
|
(provide 'nebkor-search)
|