You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

2.6 KiB

Core - Buffer

Package

Define core buffer package.

  (use-package emacs
    :after uno
    :config
    (provide 'uno-buffer))

Useful/Useless Buffers

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 "\\*compilation\\*")
    (uno/add-useless-buffer "\\*Messages\\*")
    (uno/add-useless-buffer "\\*scratch\\*")
    (uno/add-useless-buffer "\\*straight-byte-compilation\\*")
    (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))))

Keybinds

  (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))
        (pop-to-buffer (current-buffer)))))