Do a bunch of cursed ibuffer stuff (it works now)
This commit is contained in:
parent
d536800d43
commit
4cada38f4b
|
@ -14,6 +14,9 @@
|
|||
;; - Prettify "~/.config/emacs" to a symbol.
|
||||
;; - Hide filter groups except when in a certain set.
|
||||
|
||||
;; Groups to hide entirely.
|
||||
(defvar hidden-groups '("Hidden"))
|
||||
|
||||
(defun ibuffer-toggle-all ()
|
||||
"Collapse / expand ALL filters in ibuffer."
|
||||
(interactive)
|
||||
|
@ -27,15 +30,15 @@
|
|||
"Collapse / expand the current filter group. If point is on a buffer name, expand the group it is in."
|
||||
(interactive)
|
||||
(unless (char-equal (char-after) ?\[)
|
||||
(ibuffer-backward-filter-group))
|
||||
(ibuffer-backward-filter-group))
|
||||
(ibuffer-toggle-filter-group))
|
||||
|
||||
;; Main package declaration
|
||||
(use-package ibuffer
|
||||
:bind (("C-c i" . ibuffer)
|
||||
:map ibuffer-mode-map
|
||||
("M-<RET>" . ibuffer-toggle-all)
|
||||
("h" . ibuffer-toggle-current))
|
||||
("M-<RET>" . ibuffer-toggle-all)
|
||||
("h" . ibuffer-toggle-current))
|
||||
:config
|
||||
(setq
|
||||
ibuffer-expert t
|
||||
|
@ -43,36 +46,60 @@
|
|||
ibuffer-old-time 12)
|
||||
|
||||
(setq ibuffer-saved-filter-groups
|
||||
'(("home"
|
||||
|
||||
("Mail" (or (derived-mode rmail-mode)
|
||||
(mode . message-mode)))
|
||||
("Gnus" (or (derived-mode . gnus-mode)
|
||||
(saved . "gnus")))
|
||||
("Net" (or (mode . eww-mode)
|
||||
(mode . rcirc-mode)
|
||||
(mode . elpher-mode)))
|
||||
("Music" (name . "*MPC"))
|
||||
("proc" (process . "*"))
|
||||
("Dired" (mode . dired-mode))
|
||||
("Org" (filename . ".org"))
|
||||
("prog" (filename . "/lin/prog*"))
|
||||
("Stars" (name . "[*]"))
|
||||
("emacs" (filename . "config/emacs*")))))
|
||||
|
||||
'(("home"
|
||||
("Emacs" (and (filename . "config/emacs*")
|
||||
(visiting-file)))
|
||||
("Prog" (and (filename . "/lin/prog*")
|
||||
(visiting-file)))
|
||||
("Org" (or (file-extension . "org")
|
||||
(derived-mode . org-mode)
|
||||
(derived-mode . org-agenda-mode)))
|
||||
("Mail" (or (derived-mode . rmail-mode)
|
||||
(derived-mode . message-mode)))
|
||||
("Gnus" (or (derived-mode . gnus-mode)
|
||||
(saved . "gnus")))
|
||||
("Net" (or (mode . eww-mode)
|
||||
(derived-mode . rcirc-mode)
|
||||
(mode . elpher-mode)))
|
||||
("Music" (name . "*MPC"))
|
||||
("Dired" (or (derived-mode . dired-mode)
|
||||
(derived-mode . image-mode)))
|
||||
("Proc" (process))
|
||||
("Stars" (name . "[*]")))))
|
||||
;; starred-name does not catch all starred buffers, uh ok
|
||||
|
||||
:hook (ibuffer-mode . (lambda ()
|
||||
(ibuffer-auto-mode 1)
|
||||
(ibuffer-switch-to-saved-filter-groups "home")
|
||||
(setq ibuffer-never-show-predicates '("*async-native\\|*Completion"))
|
||||
(setq ibuffer-hidden-filter-groups '("Stars"))
|
||||
(add-to-list 'ibuffer-saved-filters
|
||||
'("modified" (and (modified)
|
||||
(ibuffer-auto-mode 1)
|
||||
(ibuffer-switch-to-saved-filter-groups "home")
|
||||
(setq ibuffer-never-show-predicates '("*async-native" "*Completion"))
|
||||
(setq ibuffer-hidden-filter-groups '("Stars"))
|
||||
(add-to-list 'ibuffer-saved-filters
|
||||
'("modified" (and (modified)
|
||||
(not (starred-name))))))))
|
||||
(defun hide-this-buffer ()
|
||||
(interactive)
|
||||
(add-to-list 'ibuffer-never-show-predicates
|
||||
(buffer-name (ibuffer-current-buffer)))
|
||||
(ibuffer-update nil))
|
||||
|
||||
;; Reverse order of groups, so that "Default" is the topmost.
|
||||
(defadvice ibuffer-generate-filter-groups
|
||||
(after reverse-ibuffer-groups ()
|
||||
activate)
|
||||
(setq ad-return-value (nreverse ad-return-value)))
|
||||
(keymap-global-set "C-c h" 'hide-this-buffer)
|
||||
|
||||
;; Move the first element of a list to the last position.
|
||||
(defun car-to-last (lst)
|
||||
(append (cdr lst) (list (car lst))))
|
||||
|
||||
(defun omit-hidden-groups (lst)
|
||||
"Remove all items in hidden-groups from LST"
|
||||
(dolist (i hidden-groups)
|
||||
(setq lst (assoc-delete-all i lst)))
|
||||
lst)
|
||||
|
||||
;; Apply the function ibuffer's list generator
|
||||
(advice-add 'ibuffer-generate-filter-groups
|
||||
:filter-return #'omit-hidden-groups)
|
||||
|
||||
;; Make 'Default' the topmost.
|
||||
(advice-add 'ibuffer-generate-filter-groups
|
||||
:filter-return #'car-to-last)
|
||||
|
||||
(provide 'ibuffer-conf)
|
||||
|
|
Loading…
Reference in New Issue