2019-10-20 12:07:54 -04:00
|
|
|
;;; emacs/ibuffer/config.el -*- lexical-binding: t; -*-
|
|
|
|
|
|
|
|
(after! ibuffer
|
|
|
|
(set-popup-rule! "^\\*Ibuffer\\*$" :ignore t)
|
|
|
|
|
|
|
|
(setq ibuffer-show-empty-filter-groups nil
|
|
|
|
ibuffer-filter-group-name-face '(:inherit (success bold))
|
|
|
|
ibuffer-formats
|
2019-11-07 12:49:30 -05:00
|
|
|
`((mark modified read-only locked
|
2019-10-20 12:07:54 -04:00
|
|
|
,@(if (featurep! +icons)
|
|
|
|
`(;; Here you may adjust by replacing :right with :center
|
|
|
|
;; or :left According to taste, if you want the icon
|
|
|
|
;; further from the name
|
|
|
|
" " (icon 2 2 :left :elide)
|
|
|
|
,(propertize " " 'display `(space :align-to 8)))
|
|
|
|
'(" "))
|
|
|
|
(name 18 18 :left :elide)
|
|
|
|
" " (size 9 -1 :right)
|
|
|
|
" " (mode 16 16 :left :elide)
|
|
|
|
,@(when (require 'ibuffer-vc nil t)
|
|
|
|
'(" " (vc-status 12 :left)))
|
|
|
|
" " filename-and-process)
|
|
|
|
(mark " " (name 16 -1) " " filename)))
|
|
|
|
|
|
|
|
;; Display buffer icons on GUI
|
|
|
|
(define-ibuffer-column icon (:name " ")
|
|
|
|
(let ((icon (if (and (buffer-file-name)
|
|
|
|
(all-the-icons-auto-mode-match?))
|
|
|
|
(all-the-icons-icon-for-file (file-name-nondirectory (buffer-file-name)) :v-adjust -0.05)
|
|
|
|
(all-the-icons-icon-for-mode major-mode :v-adjust -0.05))))
|
|
|
|
(if (symbolp icon)
|
|
|
|
(setq icon (all-the-icons-faicon "file-o" :face 'all-the-icons-dsilver :height 0.8 :v-adjust 0.0))
|
|
|
|
icon)))
|
|
|
|
|
|
|
|
;; Redefine size column to display human readable size
|
|
|
|
(define-ibuffer-column size
|
|
|
|
(:name "Size"
|
|
|
|
:inline t
|
|
|
|
:header-mouse-map ibuffer-size-header-map)
|
|
|
|
(file-size-human-readable (buffer-size)))
|
|
|
|
|
2019-12-07 23:02:06 +07:00
|
|
|
(when (featurep! :ui workspaces)
|
|
|
|
(define-ibuffer-filter workspace-buffers
|
|
|
|
"Filter for workspace buffers"
|
|
|
|
(:reader
|
|
|
|
(+workspace-get (read-string "workspace name: ")) :description "workspace")
|
|
|
|
(memq buf (+workspace-buffer-list qualifier)))
|
|
|
|
|
|
|
|
(defun +ibuffer/workspace (workspace-name)
|
|
|
|
"Open an ibuffer window for a workspace"
|
|
|
|
(ibuffer nil (format "%s buffers" workspace-name)
|
|
|
|
(list (cons 'workspace-buffers (+workspace-get workspace-name)))))
|
|
|
|
|
|
|
|
(defun +ibuffer-current-workspace ()
|
|
|
|
"Open an ibuffer window for the current workspace"
|
|
|
|
(interactive)
|
|
|
|
(+ibuffer/workspace (+workspace-current-name))))
|
|
|
|
|
2019-10-20 12:07:54 -04:00
|
|
|
(when (featurep! :completion ivy)
|
2019-11-23 00:52:36 -05:00
|
|
|
(defadvice! +ibuffer-use-counsel-maybe-a (_file &optional _wildcards)
|
2019-10-20 12:07:54 -04:00
|
|
|
"Use `counsel-find-file' instead of `find-file'."
|
|
|
|
:override #'ibuffer-find-file
|
|
|
|
(interactive)
|
|
|
|
(counsel-find-file
|
|
|
|
(let ((buf (ibuffer-current-buffer)))
|
|
|
|
(if (buffer-live-p buf)
|
|
|
|
(with-current-buffer buf
|
|
|
|
default-directory)
|
|
|
|
default-directory)))))
|
|
|
|
|
|
|
|
(map! :map ibuffer-mode-map :n "q" #'kill-current-buffer))
|
|
|
|
|
|
|
|
|
|
|
|
(use-package! ibuffer-projectile
|
|
|
|
;; Group ibuffer's list by project root
|
|
|
|
:hook (ibuffer . ibuffer-projectile-set-filter-groups)
|
|
|
|
:config
|
|
|
|
(setq ibuffer-projectile-prefix
|
|
|
|
(if (featurep! +icons)
|
|
|
|
(concat (all-the-icons-octicon
|
|
|
|
"file-directory"
|
|
|
|
:face ibuffer-filter-group-name-face
|
|
|
|
:v-adjust -0.05)
|
|
|
|
" ")
|
|
|
|
"Project: ")))
|