.emacs.d/init.d/basics/buffers.el

132 lines
5.7 KiB
EmacsLisp
Raw Normal View History

2019-10-14 17:38:14 +02:00
;;; buffers.el --- Default settings for buffers. -*- lexical-binding: t; -*-
;;; Commentary:
;; * Setup scratch buffer.
;; * Set fill-column.
;; * Define which buffers should be ignored.
;; * Enable auto-fill-mode.
;;; Code:
(require 'basics/package-management)
2020-06-03 17:56:01 +02:00
(require 'misc/libs)
(require 'misc/completion)
2019-10-14 17:38:14 +02:00
(use-package emacs
:straight (:type built-in)
:demand t
2020-03-10 14:33:47 +01:00
:custom ((initial-scratch-message nil) ; Make scratch buffer empty,
(initial-major-mode 'text-mode)) ; and select mode.
2020-03-10 14:33:47 +01:00
:config (progn
(defvar my/skippable-buffers
'("^\\*" "^magit[:-]" "^Pfuture-Callback")
2020-03-10 14:33:47 +01:00
"Buffer names ignored by `next-buffer' and `previous-buffer'.")
(defvar my/never-skippable-buffers
'("^\\*scratch\\*$" "^\\*Easy-hugo\\*$")
"Buffer names never ignored by `next-buffer' and `previous-buffer'.")
(defun my/buffer-predicate (buffer)
"Return nil if buffer-name matches expression in `my/skippable-buffers'."
(catch 'return
;; Return t if buffer-name is on never-skippable list.
(dolist (expression my/never-skippable-buffers)
(if (string-match expression (buffer-name buffer))
(throw 'return t)))
;; Return nil if buffer-name is on skippable list.
(dolist (expression my/skippable-buffers)
(if (string-match expression (buffer-name buffer))
(throw 'return nil)))
t))
(set-frame-parameter nil 'buffer-predicate 'my/buffer-predicate)
; Doesn't work with use-package?
(add-hook 'after-make-frame-functions
(lambda (frame)
(set-frame-parameter
frame 'buffer-predicate 'my/buffer-predicate)))
2020-03-10 14:33:47 +01:00
(defun my/truncate-lines ()
"Truncate lines in local buffer instead of wrapping them."
(setq-local truncate-lines t)))
:bind (("M-<left>" . previous-buffer)
("M-<right>" . next-buffer))
:hook ((prog-mode . my/truncate-lines)
(conf-mode . my/truncate-lines)
(emacs-startup . (lambda () (with-current-buffer "*scratch*"
(turn-off-auto-fill))))))
2020-03-10 14:33:47 +01:00
;; Show and select buffers. Minimal interface for recovery situations.
2019-10-14 17:38:14 +02:00
(use-package bs
2020-03-10 14:33:47 +01:00
:bind ("C-x C-b" . bs-show))
2019-10-14 17:38:14 +02:00
;; Delete old buffers.
;; https://www.emacswiki.org/emacs/CleanBufferList
(use-package midnight
2020-12-24 01:02:00 +01:00
:straight (:type built-in)
2020-04-18 03:12:10 +02:00
:defer 4
2020-12-24 01:02:00 +01:00
:init (setq midnight-delay 30 ; 30 seconds after “midnight”.
midnight-period (* 2 60 60)) ; Clean every 2 hours.
2020-03-10 14:33:47 +01:00
:custom ((clean-buffer-list-delay-general 1) ; Clean normal bufs after 1d,
2020-12-24 01:02:00 +01:00
(clean-buffer-list-delay-special (* 30 60)) ; special after 30m.
(clean-buffer-list-kill-regexps '("^ ?\\*" ; These are “special”.
"^magit-?.*:"
("\\.log$" . 3600)
"^Pfuture-Callback")))
:config (midnight-mode t))
2020-03-10 14:33:47 +01:00
;; Dedicate windows to “purposes”.
2020-01-21 02:52:03 +01:00
(use-package window-purpose
:demand t ; projectile depends on window-purpose.
2020-11-21 23:33:16 +01:00
:diminish purpose-mode
2020-11-30 21:49:12 +01:00
:defines (purpose-x-popwin-major-modes)
:custom (purpose-x-popwin-position 'right)
2020-03-10 14:33:47 +01:00
:config (progn
(purpose-mode)
(add-to-list 'purpose-user-mode-purposes '(c++-mode . cpp))
(add-to-list 'purpose-user-mode-purposes '(qml-mode . cpp))
(add-to-list 'purpose-user-mode-purposes '(emacs-lisp-mode . elisp))
(add-to-list 'purpose-user-mode-purposes '(ebuild-mode . ebuild))
(add-to-list 'purpose-user-mode-purposes '(adoc-mode . adoc))
(add-to-list 'purpose-user-mode-purposes '(markdown-mode . md))
(add-to-list 'purpose-user-mode-purposes '(gfm-mode . md))
(add-to-list 'purpose-user-mode-purposes '(Man-mode . help-buf))
(add-to-list 'purpose-user-mode-purposes '(help-mode . help-buf))
(add-to-list 'purpose-user-mode-purposes '(info-mode . help-buf))
(add-to-list 'purpose-user-mode-purposes
'(compilation-mode . compile))
(add-to-list 'purpose-special-action-sequences
'(help-buf purpose-display-reuse-window-buffer))
(purpose-compile-user-configuration)
(require 'window-purpose-x)
;; Assign all Magit buffers the same purpose.
(purpose-x-magit-single-on)
(purpose-x-kill-setup) ; Replace killed buffers with same purpose.
2021-08-17 15:12:08 +02:00
(purpose-x-popwin-setup)
(push 'Man-mode purpose-x-popwin-major-modes)
(purpose-x-popwin-update-conf))
2020-03-10 14:33:47 +01:00
:bind (("<f2>" . purpose-toggle-window-purpose-dedicated)
("C-<f2>" . purpose-toggle-window-buffer-dedicated)
("M-<f2>" . purpose-load-window-layout)))
2020-01-21 02:52:03 +01:00
(use-package ivy-purpose
:after (ivy window-purpose)
:config (ivy-purpose-setup)
:bind (:map purpose-mode-map
("C-x b" . ivy-switch-buffer)))
2020-05-02 16:59:17 +02:00
;; Visual feedback on some operations by highlighting region.
(use-package volatile-highlights
:diminish volatile-highlights-mode
2020-06-03 17:56:01 +02:00
:after (doom-themes display-line-numbers)
2020-05-02 16:59:17 +02:00
:config (progn
(defun my/volatile-highlights-reset-color ()
(set-face-background 'vhl/default-face
(hexrgb-increment-equal-rgb
(face-background 'default) 2 8)))
(my/volatile-highlights-reset-color))
:hook (window-setup . volatile-highlights-mode))
2020-05-02 16:59:17 +02:00
2019-10-14 17:38:14 +02:00
(provide 'basics/buffers)
;;; buffers.el ends here