+ :popup -> set-popup-rule! + :popups -> set-popup-rules! + :company-backend -> set-company-backend! + :evil-state -> set-evil-initial-state! I am slowly phasing out the setting system (def-setting! and set!), starting with these. What are autodefs? These are functions that are always defined, whether or not their respective modules are enabled. However, when their modules are disabled, they are replaced with macros that no-op and don't waste time evaluating their arguments. The old set! function will still work, for a while. |
||
---|---|---|
.. | ||
autoload | ||
+hacks.el | ||
config.el | ||
README.org |
:feature popup
This module provides a highly customizable popup window management system.
Not all windows are created equally. Some are less important. Some I want gone once they have served their purpose, like code output or a help buffer. Others I want to stick around, like a scratch buffer or org-capture popup.
More than that, popups ought to be be the second class citizens of my editor; spawned off to the side, discarded with the simple push of a button (Escape/C-g), and easily restored if I want to see them again. Of course, this system should clean up after itself and kill off buffers I mark as transient.
Table of Contents TOC
Configuration
The :popup
setting
This module has one setting for defining your own rules for popups:
(set! :popup CONDITION &optional ALIST PARAMETERS)
CONDITION
can be a function or regexp string. If the function returns non-nil, or the regexp string matches the buffer's name, it will be opened in a popup window.ALIST
dictates the characteristics of the popup, such as what side to spawn it on and what size to make it. Seedisplay-buffer
's documentation to see what parameters are supported. This supports one custom parameter:size
, which will map towindow-width
orwindow-height
depending on whatside
you (or the defaults) specify.PARAMETERS
dictate what window parameters are set on the popup window. See+popup-window-parameters
's documentation and the Window Parameters section of the Emacs manual for what parameters are supported. This supports four custom parameters:transient
,quit
,select
andmodeline
. For details on these, look at the documentation for+popup-window-parameters.
Rules are added to display-buffer-alist
, which instructs display-buffer
calls on how to set up windows for buffers that meet certain conditions.
The
switch-to-buffer
command (and itsswitch-to-buffer-*
variants) are not affected bydisplay-buffer-alist
.
Here are a couple example rules:
(set! :popup "^ \\*" '((slot . -1))) ; fallback rule for special buffers
(set! :popup "^\\*" nil '((select . t)))
(set! :popup "^\\*Completions" '((slot . -1)) '((transient . 0)))
(set! :popup "^\\*\\(?:scratch\\|Messages\\)" nil '((transient)))
(set! :popup "^\\*Help"
'((slot . -1) (size . 0.2))
'((select . t)))
(set! :popup "^\\*doom:"
'((size . 0.35))
'((select . t) (modeline . t) (quit) (transient)))
Omitted parameters in a :popup
rule will use the defaults set in
+popup-default-alist
and +popup-default-parameters
.
Disabling aggressive mode-line hiding in popups
There are two ways to go about this. You can turn on modelines by changing the
default 'modeline
window parameter in +popup-default-parameters
:
;; put in private/$USER/config.el
(map-put +popup-default-parameters 'modeline t)
This will ensure all popups have a modeline by default, but allows you to override this on a per-popup basis.
Alternatively, you can disable modeline-hiding entirely:
;; put in private/$USER/config.el
(remove-hook '+popup-buffer-mode-hook '+popup|set-modeline)
Appendix
Commands
+popup/other
(aliased toother-popup
, bound toC-x p
)+popup/toggle
+popup/close
+popup/close-all
+popup/toggle
+popup/restore
+popup/raise
Library
-
Functions
+popup-window-p WINDOW
+popup-buffer-p BUFFER
+popup-buffer BUFFER &optional ALIST
+popup-parameter PARAMETER &optional WINDOW
+popup-parameter-fn PARAMETER &optional WINDOW
+popup-windows
-
Macros
without-popups!
save-popups!
-
Hooks
+popup|adjust-fringes
+popup|set-modeline
+popup|close-on-escape
+popup|cleanup-rules
-
Minor modes
+popup-mode
+popup-buffer-mode
Hacks
help-mode
has been advised to follow file links in the buffer you were in before entering the popup, rather than in a new window.wgrep
buffers are advised to close themselves when aborting or committing changes.persp-mode
is advised to restore popup windows when loading a session from file.- Interactive calls to
windmove-*
commands (used byevil-window-*
commands) will ignore theno-other-window
window parameter, allowing you to switch to popup windows as if they're ordinary windows. balance-windows
has been advised to close popups while it does its business, then restores them afterwards.neotree
advisesbalance-windows
, which causes major slow-downs when paired with ourbalance-window
advice, so we removes neotree's advice.org-mode
is an ongoing (and huge) effort. It has a scorched-earth window management system I'm not fond of. ie. it kills all windows and monopolizes the frame. On top of that, it really likes to useswitch-to-buffer
for most of its buffer management, which completely bypassesdisplay-buffer-alist
.