Core - Buffer
Define core buffer package.
(use-package emacs
:after uno
:config
(provide 'uno-buffer))
Define useful and useless buffers. Borrowed from Spacemacs.
(use-package emacs
:after uno-buffer
:init
(defvar uno--useful-buffers nil
"Regexp used to determine if a buffer is useful.")
(defvar uno--useless-buffers nil
"Regexp used to determine if a buffer is useless.")
(defun uno/add-useful-buffer (buffer)
"Add BUFFER to useful buffers."
(push buffer uno--useful-buffers))
(defun uno/add-useless-buffer (buffer)
"Add BUFFER to useless buffers."
(push buffer uno--useless-buffers))
(defun uno/useful-buffer-p (buffer)
"Determines if a buffer is useful."
(let ((buf-name (buffer-name buffer)))
(or (provided-mode-derived-p
(buffer-local-value 'major-mode buffer)
'comint-mode)
(cl-loop for useful-regexp in uno--useful-buffers
thereis (string-match-p useful-regexp buf-name))
(cl-loop for useless-regexp in uno--useless-buffers
never (string-match-p useless-regexp buf-name)))))
:config
(uno/add-useless-buffer "\\*Messages\\*")
(uno/add-useless-buffer "\\*scratch\\*")
(uno/add-useless-buffer "\\*straight-process\\*")
(let ((buf-pred-entry (assq 'buffer-predicate default-frame-alist)))
(if buf-pred-entry
(setcdr buf-pred-entry 'uno/useful-buffer-p)
(push '(buffer-predicate . uno/useful-buffer-p) default-frame-alist))))
(use-package emacs
:after uno-buffer
:general
(uno-leader-define
"b" '(:ignore t :which-key "Buffer")
"bd" '(uno/kill-this-buffer :which-key "Kill buffer")
"bm" '(uno/switch-to-messages-buffer :which-key "Messages")
"bn" '(next-buffer :which-key "Next buffer")
"bp" '(previous-buffer :which-key "Previous buffer"))
:init
(defun uno/kill-this-buffer ()
"Split the window vertically and focus the new window."
(interactive)
(if (window-minibuffer-p)
(abort-recursive-edit)
(kill-buffer)))
(defun uno/switch-to-messages-buffer ()
"Split the window horizontally and focus the new window."
(interactive)
(with-current-buffer (messages-buffer)
(goto-char (point-max))
(switch-to-buffer (current-buffer)))))