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.
|
;; - Prettify "~/.config/emacs" to a symbol.
|
||||||
;; - Hide filter groups except when in a certain set.
|
;; - Hide filter groups except when in a certain set.
|
||||||
|
|
||||||
|
;; Groups to hide entirely.
|
||||||
|
(defvar hidden-groups '("Hidden"))
|
||||||
|
|
||||||
(defun ibuffer-toggle-all ()
|
(defun ibuffer-toggle-all ()
|
||||||
"Collapse / expand ALL filters in ibuffer."
|
"Collapse / expand ALL filters in ibuffer."
|
||||||
(interactive)
|
(interactive)
|
||||||
|
@ -27,15 +30,15 @@
|
||||||
"Collapse / expand the current filter group. If point is on a buffer name, expand the group it is in."
|
"Collapse / expand the current filter group. If point is on a buffer name, expand the group it is in."
|
||||||
(interactive)
|
(interactive)
|
||||||
(unless (char-equal (char-after) ?\[)
|
(unless (char-equal (char-after) ?\[)
|
||||||
(ibuffer-backward-filter-group))
|
(ibuffer-backward-filter-group))
|
||||||
(ibuffer-toggle-filter-group))
|
(ibuffer-toggle-filter-group))
|
||||||
|
|
||||||
;; Main package declaration
|
;; Main package declaration
|
||||||
(use-package ibuffer
|
(use-package ibuffer
|
||||||
:bind (("C-c i" . ibuffer)
|
:bind (("C-c i" . ibuffer)
|
||||||
:map ibuffer-mode-map
|
:map ibuffer-mode-map
|
||||||
("M-<RET>" . ibuffer-toggle-all)
|
("M-<RET>" . ibuffer-toggle-all)
|
||||||
("h" . ibuffer-toggle-current))
|
("h" . ibuffer-toggle-current))
|
||||||
:config
|
:config
|
||||||
(setq
|
(setq
|
||||||
ibuffer-expert t
|
ibuffer-expert t
|
||||||
|
@ -43,36 +46,60 @@
|
||||||
ibuffer-old-time 12)
|
ibuffer-old-time 12)
|
||||||
|
|
||||||
(setq ibuffer-saved-filter-groups
|
(setq ibuffer-saved-filter-groups
|
||||||
'(("home"
|
'(("home"
|
||||||
|
("Emacs" (and (filename . "config/emacs*")
|
||||||
("Mail" (or (derived-mode rmail-mode)
|
(visiting-file)))
|
||||||
(mode . message-mode)))
|
("Prog" (and (filename . "/lin/prog*")
|
||||||
("Gnus" (or (derived-mode . gnus-mode)
|
(visiting-file)))
|
||||||
(saved . "gnus")))
|
("Org" (or (file-extension . "org")
|
||||||
("Net" (or (mode . eww-mode)
|
(derived-mode . org-mode)
|
||||||
(mode . rcirc-mode)
|
(derived-mode . org-agenda-mode)))
|
||||||
(mode . elpher-mode)))
|
("Mail" (or (derived-mode . rmail-mode)
|
||||||
("Music" (name . "*MPC"))
|
(derived-mode . message-mode)))
|
||||||
("proc" (process . "*"))
|
("Gnus" (or (derived-mode . gnus-mode)
|
||||||
("Dired" (mode . dired-mode))
|
(saved . "gnus")))
|
||||||
("Org" (filename . ".org"))
|
("Net" (or (mode . eww-mode)
|
||||||
("prog" (filename . "/lin/prog*"))
|
(derived-mode . rcirc-mode)
|
||||||
("Stars" (name . "[*]"))
|
(mode . elpher-mode)))
|
||||||
("emacs" (filename . "config/emacs*")))))
|
("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 ()
|
:hook (ibuffer-mode . (lambda ()
|
||||||
(ibuffer-auto-mode 1)
|
(ibuffer-auto-mode 1)
|
||||||
(ibuffer-switch-to-saved-filter-groups "home")
|
(ibuffer-switch-to-saved-filter-groups "home")
|
||||||
(setq ibuffer-never-show-predicates '("*async-native\\|*Completion"))
|
(setq ibuffer-never-show-predicates '("*async-native" "*Completion"))
|
||||||
(setq ibuffer-hidden-filter-groups '("Stars"))
|
(setq ibuffer-hidden-filter-groups '("Stars"))
|
||||||
(add-to-list 'ibuffer-saved-filters
|
(add-to-list 'ibuffer-saved-filters
|
||||||
'("modified" (and (modified)
|
'("modified" (and (modified)
|
||||||
(not (starred-name))))))))
|
(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.
|
(keymap-global-set "C-c h" 'hide-this-buffer)
|
||||||
(defadvice ibuffer-generate-filter-groups
|
|
||||||
(after reverse-ibuffer-groups ()
|
;; Move the first element of a list to the last position.
|
||||||
activate)
|
(defun car-to-last (lst)
|
||||||
(setq ad-return-value (nreverse ad-return-value)))
|
(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)
|
(provide 'ibuffer-conf)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user