summaryrefslogtreecommitdiffstats
path: root/lisp/init-grep.el
blob: 92af7559ec002ed5b636edc804d42014e06c4fe9 (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
;;; init-grep.el --- configure grep
;;; Commentary:
;;; Code:

(defun mpolden/grep-visit-buffer-other-window (&optional result noselect)
  "Visit grep RESULT in another window.
If NOSELECT is non-nil, do not select the window."
  (interactive)
  (let ((current-window (selected-window)))
    (compile-goto-error result)
    (when noselect
      (select-window current-window))))

(defun mpolden/grep-visit-buffer-other-window-noselect (&optional result)
  "Visit grep RESULT another window, but don't select it."
  (interactive)
  (mpolden/grep-visit-buffer-other-window event t))

(defun mpolden/grep-mode-buffer-local-variables ()
  "Set buffer-local variables for `grep-mode'."
  (setq-local truncate-lines nil))

(use-package grep
  :demand t ;; this cannot lazy load as bindings are inside a mode map

  :hook (grep-mode . mpolden/grep-mode-buffer-local-variables)

  :bind (:map grep-mode-map
              ;; make C-o and o behave as in dired
              ("o" . mpolden/grep-visit-buffer-other-window)
              ("C-o" . mpolden/grep-visit-buffer-other-window-noselect)
              ;; n and p changes line as in ag-mode
              ("n" . compilation-next-error)
              ("p" . compilation-previous-error)))

(provide 'init-grep)

;;; init-grep.el ends here