mirror of
https://github.com/pestctrl/emacs-config.git
synced 2026-06-14 12:21:20 +00:00
Huehuehue, fold everything when deadgrep is done
This commit is contained in:
parent
0925f0b64a
commit
d5c406e3cd
1 changed files with 54 additions and 29 deletions
|
|
@ -26,59 +26,84 @@
|
||||||
(require 'deadgrep)
|
(require 'deadgrep)
|
||||||
|
|
||||||
(defun my/deadgrep-new-tab (orig &rest args)
|
(defun my/deadgrep-new-tab (orig &rest args)
|
||||||
(let ((tab-name (alist-get 'name (tab-bar--current-tab))))
|
(if (not (y-or-n-p "Deadgrep rejump mode? "))
|
||||||
(unless (string-match-p "-deadgrep$" tab-name)
|
(apply orig args)
|
||||||
(switch-or-create-tab (concat tab-name "-deadgrep"))))
|
(let ((tab-name (alist-get 'name (tab-bar--current-tab))))
|
||||||
(when (window-parameter (selected-window) 'window-side)
|
(unless (string-match-p "-deadgrep$" tab-name)
|
||||||
(window-toggle-side-windows))
|
(setq my/drj-tab (concat tab-name "-deadgrep"))
|
||||||
(let ((ignore-window-parameters t))
|
(switch-or-create-tab (concat tab-name "-deadgrep"))))
|
||||||
(delete-other-windows))
|
(when (window-parameter (selected-window) 'window-side)
|
||||||
(apply orig args)
|
(window-toggle-side-windows))
|
||||||
(deadgrep-rejump-mode 1)
|
(let ((ignore-window-parameters t))
|
||||||
(setq my/drj-buffer deadgrep-buffer))
|
(delete-other-windows))
|
||||||
|
(apply orig args)
|
||||||
|
(deadgrep-rejump-mode 1)
|
||||||
|
(setq my/drj-buffer (current-buffer))))
|
||||||
|
|
||||||
|
(defun deadgrep-fold-everything ()
|
||||||
|
(interactive)
|
||||||
|
(when deadgrep-rejump-mode
|
||||||
|
(with-current-buffer my/drj-buffer
|
||||||
|
(save-excursion
|
||||||
|
(goto-char (point-min))
|
||||||
|
(condition-case nil
|
||||||
|
(while (not (eobp))
|
||||||
|
(progn
|
||||||
|
(deadgrep--move-match t 'deadgrep-filename-face)
|
||||||
|
(deadgrep-toggle-file-results)))
|
||||||
|
(error nil))))))
|
||||||
|
|
||||||
|
(add-hook 'deadgrep-finished-hook
|
||||||
|
#'deadgrep-fold-everything)
|
||||||
|
|
||||||
(advice-add #'deadgrep
|
(advice-add #'deadgrep
|
||||||
:around
|
:around
|
||||||
#'my/deadgrep-new-tab)
|
#'my/deadgrep-new-tab)
|
||||||
|
|
||||||
(defvar my/drj-buffer nil)
|
(defvar my/drj-buffer nil)
|
||||||
|
(defvar my/drj-tab nil)
|
||||||
;; (make-variable-buffer-local 'my/deadgrep-rejump-buffer)
|
;; (make-variable-buffer-local 'my/deadgrep-rejump-buffer)
|
||||||
|
|
||||||
|
(defun my/drj-jump (next-fun)
|
||||||
|
(when-let ((win (get-buffer-window my/drj-buffer)))
|
||||||
|
(let* ((curr-win (selected-window)))
|
||||||
|
(select-window win)
|
||||||
|
(funcall next-fun)
|
||||||
|
(deadgrep--visit-result
|
||||||
|
#'(lambda (f-name)
|
||||||
|
;; MUST HAPPEN BEFORE select-window, implicitly using
|
||||||
|
;; default-directory
|
||||||
|
(let ((buffer (find-file-noselect f-name)))
|
||||||
|
(select-window curr-win)
|
||||||
|
(switch-to-buffer buffer))))
|
||||||
|
(recenter))))
|
||||||
|
|
||||||
(defun my/drj-previous ()
|
(defun my/drj-previous ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(when-let ((win (get-buffer-window my/drj-buffer)))
|
(my/drj-jump #'deadgrep-backward-match))
|
||||||
(select-window win)
|
|
||||||
(deadgrep-backward-match)
|
|
||||||
(deadgrep-visit-result)))
|
|
||||||
|
|
||||||
(defun my/drj-next ()
|
(defun my/drj-next ()
|
||||||
(interactive)
|
(interactive)
|
||||||
(when-let ((win (get-buffer-window my/drj-buffer)))
|
(my/drj-jump #'deadgrep-forward-match))
|
||||||
(select-window win)
|
|
||||||
(deadgrep-forward-match)
|
|
||||||
(deadgrep-visit-result)))
|
|
||||||
|
|
||||||
(defvar deadgrep-rejump-mode-map nil)
|
(defvar deadgrep-rejump-mode-map nil)
|
||||||
(unless deadgrep-rejump-mode-map
|
(unless deadgrep-rejump-mode-map
|
||||||
(let ((map (make-sparse-keymap)))
|
(let ((map (make-sparse-keymap)))
|
||||||
(define-key map (kbd "M-n") #'my/drj-next)
|
(define-key map (kbd "M-n") #'my/drj-next)
|
||||||
(define-key map (kbd "M-p") #'my/drj-previous)
|
(define-key map (kbd "M-p") #'my/drj-previous)
|
||||||
(define-key map (kbd "q") #'(lambda () (interactive) (deadgrep-rejump-mode -1)))
|
(define-key map (kbd "M-q") #'(lambda () (interactive) (deadgrep-rejump-mode -1)))
|
||||||
(setq deadgrep-rejump-mode-map map)))
|
(setq deadgrep-rejump-mode-map map)))
|
||||||
|
|
||||||
(define-minor-mode deadgrep-rejump-mode ""
|
(define-minor-mode deadgrep-rejump-mode ""
|
||||||
:global t
|
:global t
|
||||||
:keymap deadgrep-rejump-mode-map
|
:keymap deadgrep-rejump-mode-map
|
||||||
(unless deadgrep-rejump-mode
|
(if deadgrep-rejump-mode
|
||||||
(close-tab-switch)))
|
(when my/drj-buffer
|
||||||
|
(user-error "drj already in progress, can't start another"))
|
||||||
(defun my/drj-setup (orig &rest args)
|
(switch-or-create-tab my/drj-tab)
|
||||||
(delete-other-windows)
|
(close-tab-switch)
|
||||||
(recenter))
|
(setq my/drj-buffer nil
|
||||||
|
my/drj-tab nil)))
|
||||||
(advice-add #'deadgrep--visit-result
|
|
||||||
:after
|
|
||||||
#'my/drj-setup)
|
|
||||||
|
|
||||||
(provide 'deadgrep-rejump-mode)
|
(provide 'deadgrep-rejump-mode)
|
||||||
;;; deadgrep-rejump-mode.el ends here
|
;;; deadgrep-rejump-mode.el ends here
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue