;;; bandali-ibuffer.el --- bandali's Ibuffer setup -*- lexical-binding: t; -*- ;; Copyright (C) 2018-2025 Amin Bandali ;; Author: Amin Bandali ;; Keywords: tools ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation, either version 3 of the License, or ;; (at your option) any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with this program. If not, see . ;;; Commentary: ;; My Ibuffer setup. ;;; Code: (with-eval-after-load 'ibuffer (setopt ibuffer-saved-filter-groups '(("default" ("dired" (mode . dired-mode)) ("erc" (mode . erc-mode)) ("gnus" (or (mode . gnus-group-mode) (mode . gnus-server-mode) (mode . gnus-summary-mode) (mode . gnus-article-mode) (mode . message-mode))) ("shell" (or (mode . eshell-mode) (mode . shell-mode) (mode . term-mode))) ("tex" (or (mode . tex-mode) (mode . bibtex-mode) (mode . latex-mode))))) ibuffer-formats `((mark modified read-only locked " " (name 18 18 :left :elide) " " (size-h 9 -1 :right) ; human-readable size " " (mode 16 16 :left :elide) " " filename-and-process) ,@ibuffer-formats)) ;; Use human readable Size column instead of original one. (define-ibuffer-column size-h (:name "Size" :inline t) (cond ((> (buffer-size) (* 1024 1024)) (format "%7.1fM" (/ (buffer-size) (* 1024.0 1024.0)))) ((> (buffer-size) (* 100 1024)) (format "%7.0fK" (/ (buffer-size) 1024.0))) ((> (buffer-size) 1024) (format "%7.1fK" (/ (buffer-size) 1024.0))) (t (format "%8d" (buffer-size))))) (let ((m ibuffer-mode-map)) (b/keymap-set m "P" #'ibuffer-backward-filter-group) (b/keymap-set m "N" #'ibuffer-forward-filter-group) (b/keymap-set m "M-p" #'ibuffer-do-print) (b/keymap-set m "M-n" #'ibuffer-do-shell-command-pipe-replace))) (b/keymap-global-set "C-x C-b" #'ibuffer) (declare-function ibuffer-switch-to-saved-filter-groups "ibuf-ext" (name)) (add-hook 'ibuffer-hook (lambda () (ibuffer-switch-to-saved-filter-groups "default"))) (provide 'bandali-ibuffer) ;;; bandali-ibuffer.el ends here