summaryrefslogtreecommitdiff
path: root/emacs/inits/13-ibuffer.el
blob: b40aa2d0cd087a0c3220531df696265d8604b6c9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
;; Time-stamp: <2021-06-29 18h28 EDT (hobbies)>

(use-package ibuffer
	:bind (("C-x C-b" . ibuffer))
	:hook (ibuffer-mode .  (lambda ()
													 (ibuffer-switch-to-saved-filter-groups "default")))
	:config
	(setq ibuffer-display-summary nil
				ibuffer-saved-filter-groups
				'(("default"
					 ("agda" (or (mode . agda2-mode)
											 (name . "^\\*[aA]gda")))
					 ("coq" (or (mode . coq-mode)
											(mode . coq-goals-mode)
											(mode . coq-response-mode)
											(mode . coq-shell-mode)))
					 ("c" (or (mode . c-mode)
										(mode . makefile-gmake-mode)))
					 ("dired" (mode . dired-mode))
					 ("elisp" (or (mode . emacs-lisp-mode)
												(name . "^\\*Backtrace\\*")))
					 ("emacs" (or (name . "^\\*scratch\\*$")
												(name . "^\\*Messages\\*$")
												(name . "^\\*init log\\*$")
												(name . "^\\*Compile-Log\\*$")
												(mode . helpful-mode)
												(name . "^\\*Help\\*$")))
					 ("irc" (mode . rcirc-mode))
					 ("magit" (name . "^magit[:-]"))
					 ("REPL" (name . "^\\*.*REPL.*\\*$"))
					 ("rust" (mode . rust-mode))
					 ("slime" (name . "^\\*slime-[^*]*\\*$"))
					 ("tex" (mode . latex-mode))
					 ("web" (or (mode . js2-mode)
											(mode . js-mode)
											(mode . html-mode)
											(mode . css-mode)
											(mode . mhtml-mode)))
					 ("zig" (or (mode . zig-mode)
											(name . "^\\*zig.*\\*$")
											(name . "^\\*zls.*\\*$"))))))

	(defadvice ibuffer-update-title-and-summary (after remove-column-titles)
		(with-current-buffer "*Ibuffer*"
			(read-only-mode -1)
			(goto-char 1)
			(search-forward "-\n" nil t)
			(delete-region 1 (point))
			(let ((window-min-height 1))
				;; save a little screen estate
				(shrink-window-if-larger-than-buffer))
			(read-only-mode 1)))

	(ad-activate 'ibuffer-update-title-and-summary)

	(define-ibuffer-column size-h
		(:name "Size" :inline t)
		(cond
		 ((> (buffer-size) 1000000) (format "%7.1fM" (/ (buffer-size) 1000000.0)))
		 ((> (buffer-size) 100000) (format "%7.0fk" (/ (buffer-size) 1000.0)))
		 ((> (buffer-size) 1000) (format "%7.1fk" (/ (buffer-size) 1000.0)))
		 (t (format "%8d" (buffer-size)))))

	(setq ibuffer-formats
				'((mark modified read-only locked " "
								(name 18 18 :left :elide)
								" "
								(size-h 9 -1 :right)
								" "
								(mode 16 16 :left :elide)
								" "
								filename-and-process))))