[emacs] update 16 drones
[~bandali/configs] / init.org
index 2173871..e7882d5 100644 (file)
--- a/init.org
+++ b/init.org
@@ -635,8 +635,8 @@ Enable =winner-mode=.
 
 #+begin_src emacs-lisp
 (bind-keys
 
 #+begin_src emacs-lisp
 (bind-keys
- ("C-c b B" . ibuffer-list-buffers)
  ("C-c b k" . kill-this-buffer)
  ("C-c b k" . kill-this-buffer)
+ ("C-c s s" . save-buffer)
  ("C-c b s" . save-buffer)
  ("C-c S"   . save-buffer)
  ("C-c o"   . other-window)
  ("C-c b s" . save-buffer)
  ("C-c S"   . save-buffer)
  ("C-c o"   . other-window)
@@ -852,6 +852,64 @@ There's no way I could top that, so I won't attempt to.
   :hook (eshell-mode . amin|eshell-setup))
 #+end_src
 
   :hook (eshell-mode . amin|eshell-setup))
 #+end_src
 
+*** Ibuffer
+
+#+begin_src emacs-lisp
+(use-package ibuffer
+  :bind
+  (("C-x C-b" . ibuffer-other-window)
+   ("C-c b B" . ibuffer-other-window)
+   :map ibuffer-mode-map
+   ("P"   . ibuffer-backward-filter-group)
+   ("N"   . ibuffer-forward-filter-group)
+   ("M-p" . ibuffer-do-print)
+   ("M-n" . ibuffer-do-shell-command-pipe-replace))
+  :config
+  ;; 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)))))
+  :custom
+  (ibuffer-saved-filter-groups
+   '(("default"
+      ("dired" (mode . dired-mode))
+      ("org"   (name . "^.*org$"))
+      ("web"
+       (or
+        (mode . web-mode)
+        (mode . js2-mode)))
+      ("shell"
+       (or
+        (mode . eshell-mode)
+        (mode . shell-mode)))
+      ("notmuch" (name . "\*notmuch\*"))
+      ("programming"
+       (or
+        (mode . python-mode)
+        (mode . c++-mode)
+        (mode . emacs-lisp-mode)))
+      ("emacs"
+       (or
+        (name . "^\\*scratch\\*$")
+        (name . "^\\*Messages\\*$"))))))
+  (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)
+     (mark " "
+           (name 16 -1)
+           " " filename)))
+  :hook (ibuffer . (lambda () (ibuffer-switch-to-saved-filter-groups "default"))))
+#+end_src
+
 * Borg's =layer/essentials=
 
 TODO: break this giant source block down into individual org sections.
 * Borg's =layer/essentials=
 
 TODO: break this giant source block down into individual org sections.
@@ -1371,6 +1429,22 @@ Make =*scratch*= and =*Messages*= unkillable.
 
 Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
 
 
 Also see [[https://www.emacswiki.org/emacs/rebox2][rebox2]].
 
+** [[https://github.com/DarthFennec/highlight-indent-guides][highlight-indent-guides]]
+
+#+begin_src emacs-lisp
+(use-package highlight-indent-guides
+  :demand t
+  :hook ((prog-mode . highlight-indent-guides-mode)
+         (org-mode  . highlight-indent-guides-mode))
+  :config
+  (setq highlight-indent-guides-character ?\|)
+  (setq highlight-indent-guides-auto-enabled nil)
+  (setq highlight-indent-guides-method 'character)
+  (setq highlight-indent-guides-responsive 'top)
+  (set-face-foreground 'highlight-indent-guides-character-face "gainsboro")
+  (set-face-foreground 'highlight-indent-guides-top-character-face "grey40")) ; grey13 is nice too
+#+end_src
+
 * Email
 ** [[https://notmuchmail.org][notmuch]]
 
 * Email
 ** [[https://notmuchmail.org][notmuch]]