(Emacs/config)~Moved setup for :display keyword to near the start
This commit is contained in:
@@ -174,6 +174,60 @@ Clean all buffers except for those in ~+oreo/keep-buffers~.
|
|||||||
(buffers (buffer-list)))
|
(buffers (buffer-list)))
|
||||||
(mapcar #'kill-buffer (cl-remove-if should-not-kill buffers))))
|
(mapcar #'kill-buffer (cl-remove-if should-not-kill buffers))))
|
||||||
#+end_src
|
#+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
|
* Aesthetics
|
||||||
General look and feel of Emacs (mostly disabling stuff I don't like).
|
General look and feel of Emacs (mostly disabling stuff I don't like).
|
||||||
** Themes
|
** Themes
|
||||||
@@ -703,6 +757,10 @@ selection list).
|
|||||||
(use-package ivy
|
(use-package ivy
|
||||||
:straight t
|
:straight t
|
||||||
:demand t
|
:demand t
|
||||||
|
:display
|
||||||
|
("\\*ivy-occur.*"
|
||||||
|
(display-buffer-at-bottom)
|
||||||
|
(window-height . 0.25))
|
||||||
:general
|
:general
|
||||||
(general-def
|
(general-def
|
||||||
:keymaps 'ivy-minibuffer-map
|
:keymaps 'ivy-minibuffer-map
|
||||||
@@ -889,65 +947,6 @@ any prog language of choice. Mostly for reference and copying.
|
|||||||
("print" . "ℙ")
|
("print" . "ℙ")
|
||||||
("lambda" . "λ")
|
("lambda" . "λ")
|
||||||
#+end_example
|
#+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
|
||||||
Tabs in vscode are just like buffers in Emacs but way slower and
|
Tabs in vscode are just like buffers in Emacs but way slower and
|
||||||
harder to use. Tabs in Emacs are essentially window layouts, similar
|
harder to use. Tabs in Emacs are essentially window layouts, similar
|
||||||
|
|||||||
Reference in New Issue
Block a user