init-el/config/config-ibuffer.el
2023-12-21 08:02:13 -07:00

48 lines
1.3 KiB
EmacsLisp

;; My ibuffer config
;;
;; This config sections buffers into groups like so:
;; -[Net] -- EWW, Elpher, and IRC buffers.
;; -[Dired] -- Directory listings
;; -[Gnus] -- All gnus buffers like gnus-summary-mode
;; -[Stars] -- Buffers like *Scratch* and *Message*
;;
;; M-RET -- Toggle collapse all
;; M-n -- Next group
;; M-p -- Prev group
;;
;;; Collapses / De-collapse all entries.
(defun ibuffer-toggle-all ()
(interactive)
(if ibuffer-hidden-filter-groups
(setq ibuffer-hidden-filter-groups '())
(setq ibuffer-hidden-filter-groups
(mapcar #'car (ibuffer-current-filter-groups-with-position))))
(ibuffer-update nil t))
;; Main package declaration
(use-package ibuffer
:bind (("C-c i" . ibuffer)
:map ibuffer-mode-map
("M-<RET>" . ibuffer-toggle-all))
:config
(setq
ibuffer-expert t
ibuffer-show-empty-filter-groups nil
ibuffer-saved-filter-groups
'(("Home"
("Net" (or (mode . eww-mode)
(mode . rcirc-mode)
(mode . elpher-mode)))
("Dired" (mode . dired-mode))
("Gnus" (or (derived-mode gnus-mode)
(mode . message-mode)))
("Music" (name . "*MPC"))
("Stars" (name . "[*]"))))))
(add-hook 'ibuffer-mode-hook
(lambda ()
(ibuffer-switch-to-saved-filter-groups "Home")))
(provide 'config-ibuffer)