Add some useful occur functions

This commit is contained in:
Jeremy Dormitzer 2021-05-12 11:02:13 -04:00
parent c153b9f9a9
commit 7f6f3c1233

View File

@ -12,6 +12,37 @@ Repeated invocations toggle between the two most recently open buffers."
(interactive)
(switch-to-buffer (other-buffer (current-buffer) 1)))
(defun get-buffers-matching-mode (mode)
"Returns a list of buffers where their major-mode is equal to MODE"
(let ((buffer-mode-matches '()))
(dolist (buf (buffer-list))
(with-current-buffer buf
(if (eq mode major-mode)
(add-to-list 'buffer-mode-matches buf))))
buffer-mode-matches))
(defun get-buffer-modes ()
"Returns a list of all major modes in currenctly open buffers."
(delete-dups
(cl-loop for buf in (buffer-list)
collect (with-current-buffer buf major-mode))))
(defun multi-occur-in-mode (mode regexp)
"Show all lines matching REGEXP in buffers with this major mode."
(interactive (list (completing-read "List lines from buffers with mode: "
(get-buffer-modes)
nil
'confirm
nil
nil
major-mode)
(read-string "List lines matching regexp: ")))
(multi-occur (get-buffers-matching-mode mode) regexp))
(defun occur-all (regexp)
"Show all lines matching REGEXP in all open buffers."
(interactive "MList lines matching regexp: ")
(multi-occur-in-matching-buffers ".*" regexp t))
(leader-def-key
"TAB" #'switch-to-previous-buffer
@ -20,7 +51,8 @@ Repeated invocations toggle between the two most recently open buffers."
"bd" #'kill-buffer
"bm" #'kill-other-buffers
"br" #'rename-buffer
"bg" #'revert-buffer)
"bg" #'revert-buffer
"bo" #'occur-all)
;; A library that provides a hook called on switching buffers
(use-package switch-buffer-functions