;;; bandali-ibuffer.el --- bandali's Ibuffer setup -*- lexical-binding: t; -*- ;; Copyright (C) 2018-2022 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: (setq ibuffer-saved-filter-groups '(("default" ("dired" (mode . dired-mode)) ("org" (mode . org-mode)) ("gnus" (or (mode . gnus-group-mode) (mode . gnus-summary-mode) (mode . gnus-article-mode) (mode . message-mode))) ("web" (or (mode . mhtml-mode) (mode . css-mode) (mode . scss-mode) (mode . js2-mode))) ("shell" (or (mode . eshell-mode) (mode . shell-mode) (mode . term-mode))) ("programming" (or (mode . python-mode) (mode . c-mode) (mode . c++-mode) (mode . java-mode) (mode . emacs-lisp-mode) (mode . scheme-mode) (mode . haskell-mode) (mode . lean-mode) ;; (mode . go-mode) (mode . alloy-mode))) ("tex" (or (mode . bibtex-mode) (mode . latex-mode))) ("emacs" (or (name . "^\\*scratch\\*$") (name . "^\\*Messages\\*$"))) ("exwm" (mode . exwm-mode)) ("erc" (mode . erc-mode)))) ibuffer-formats '((mark modified read-only locked " " (name 72 72 :left :elide) " " (size-h 9 -1 :right) " " (mode 16 16 :left :elide) " " filename-and-process) (mark " " (name 16 -1) " " filename))) (with-eval-after-load 'ibuffer ;; Use human readable Size column instead of original one (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))))) ;; local key bindings (define-key ibuffer-mode-map (kbd "P") #'ibuffer-backward-filter-group) (define-key ibuffer-mode-map (kbd "N") #'ibuffer-forward-filter-group) (define-key ibuffer-mode-map (kbd "M-p") #'ibuffer-do-print) (define-key ibuffer-mode-map (kbd "M-n") #'ibuffer-do-shell-command-pipe-replace)) ;; global key bindings (global-set-key (kbd "C-x C-b") #'ibuffer) ;; hooks (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