(Emacs/config)~Moved setup for :display keyword to near the start

This commit is contained in:
2024-07-03 04:38:19 +01:00
parent 8aa544e25b
commit 6049484c77

View File

@@ -174,6 +174,60 @@ Clean all buffers except for those in ~+oreo/keep-buffers~.
(buffers (buffer-list)))
(mapcar #'kill-buffer (cl-remove-if should-not-kill buffers))))
#+end_src
** Custom window management
Emacs' default window management is horrendous, using other windows on
a whim as if your carefully crafted window setup doesn't exist!
Thankfully you can change this behaviour via the
~display-buffer-alist~ which matches regular expressions on buffer
names with a set of properties and functions that dictate how the
window for a buffer should be displayed. It's a bit verbose but once
you get the hang of it it's actually really unique.
Here I add a use-package keyword to make ~display-buffer-alist~
records within a single use-package call instead of doing the
~add-to-list~ yourself. I have no idea whether it's optimal AT ALL,
but it works for me.
2024-04-23: Found this option ~switch-to-buffer-obey-display-actions~
which makes manual buffer switches obey the same constraints via
~display-buffer-alist~ as creating the buffer automatically.
#+begin_src emacs-lisp
(use-package window
:demand t
:init
(setq switch-to-buffer-obey-display-actions t)
(with-eval-after-load "use-package-core"
(add-to-list 'use-package-keywords ':display)
(defun use-package-normalize/:display (_name-symbol _keyword args)
"Normalise args for use in handler. Don't do anything to the args
here."
args)
(defun use-package-handler/:display (name _keyword args rest state)
(use-package-concat
(use-package-process-keywords name rest state)
(mapcar
#'(lambda (arg)
`(add-to-list 'display-buffer-alist
',arg))
args)))))
#+end_src
Here's some ~:display~ records for buffers that don't really have
configuration anywhere else in the file. Good examples as well on how
to use the keyword.
#+begin_src emacs-lisp
(use-package window
:defer t
:display
("\\*Process List\\*"
(display-buffer-at-bottom)
(window-height . 0.25))
("\\*Async Shell Command\\*"
(display-buffer-at-bottom)
(window-height . 0.25)))
#+end_src
* Aesthetics
General look and feel of Emacs (mostly disabling stuff I don't like).
** Themes
@@ -703,6 +757,10 @@ selection list).
(use-package ivy
:straight t
:demand t
:display
("\\*ivy-occur.*"
(display-buffer-at-bottom)
(window-height . 0.25))
:general
(general-def
:keymaps 'ivy-minibuffer-map
@@ -889,65 +947,6 @@ any prog language of choice. Mostly for reference and copying.
("print" . "")
("lambda" . "λ")
#+end_example
** Window management
Emacs' default window management is quite bad, eating other windows on
a whim and not particularly caring for the current window setup.
Thankfully you can change this via the ~display-buffer-alist~ which
matches buffer names with how the window for the buffer should be
displayed. I add a use-package keyword to make ~display-buffer-alist~
records within a use-package call.
I have no idea whether it's optimal AT ALL, but it works for me.
2024-04-23: Found this option ~switch-to-buffer-obey-display-actions~
which makes manual buffer switches obey the same constraints via
~display-buffer-alist~ as creating the buffer automatically.
#+begin_src emacs-lisp
(use-package window
:demand t
:general
:init
(setq switch-to-buffer-obey-display-actions t)
(with-eval-after-load "use-package-core"
(add-to-list 'use-package-keywords ':display)
(defun use-package-normalize/:display (_name-symbol _keyword args)
args)
(defun use-package-handler/:display (name _keyword args rest state)
(use-package-concat
(use-package-process-keywords name rest state)
(mapcar
#'(lambda (arg)
`(add-to-list 'display-buffer-alist
',arg))
args)))))
#+end_src
*** Some display records
Using the ~:display~ keyword, setup up some ~display-buffer-alist~
records. This is mostly for packages that aren't really configured
(like [[info:woman][woman]]) or packages that were configured before
(like [[*Ivy][Ivy]]).
#+begin_src emacs-lisp
(use-package window
:defer t
:display
("\\*Process List\\*"
(display-buffer-at-bottom)
(window-height . 0.25))
("\\*\\(Ido \\)?Completions\\*"
(display-buffer-in-side-window)
(window-height . 0.25)
(side . bottom))
("\\*ivy-occur.*"
(display-buffer-at-bottom)
(window-height . 0.25))
("\\*Async Shell Command\\*"
(display-buffer-at-bottom)
(window-height . 0.25)))
#+end_src
** Tabs
Tabs in vscode are just like buffers in Emacs but way slower and
harder to use. Tabs in Emacs are essentially window layouts, similar