doomemacs/modules/ui/popup/README.org

127 lines
4.5 KiB
Org Mode
Raw Normal View History

#+TITLE: :feature popup
2018-01-06 23:49:58 -05:00
This module provides a highly customizable popup window management system.
2018-01-06 23:49:58 -05:00
#+begin_quote
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.
2018-01-06 23:49:58 -05:00
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.
#+end_quote
* Table of Contents :TOC:
2018-08-21 07:16:44 -05:00
- [[Configuration][Configuration]]
- [[~set-popup-rules!~][~set-popup-rules!~]]
- [[Disabling aggressive mode-line hiding in popups][Disabling aggressive mode-line hiding in popups]]
- [[Appendix][Appendix]]
- [[Commands][Commands]]
- [[Library][Library]]
- [[Hacks][Hacks]]
2018-01-06 23:49:58 -05:00
* Configuration
2018-08-21 07:16:44 -05:00
** ~set-popup-rules!~
2018-01-06 23:49:58 -05:00
This module has one setting for defining your own rules for popups:
#+BEGIN_SRC emacs-lisp
2018-08-21 07:16:44 -05:00
(set-popup-rules! &rest RULESETS)
#+END_SRC
2018-08-21 07:16:44 -05:00
+ ~RULESETS~ consist of a function or regexp string that matches the buffer's
name, and a list of settings. See ~display-buffer~'s,
~display-window-parameters~'s, and ~+popup-window-parameters~'s documentation
for what parameters are supported.
2018-01-06 23:49:58 -05:00
Rules are added to ~display-buffer-alist~, which instructs ~display-buffer~
calls on how to set up windows for buffers that meet certain conditions.
#+begin_quote
The ~switch-to-buffer~ command (and its ~switch-to-buffer-*~ variants) are not
affected by ~display-buffer-alist~.
#+end_quote
Here are a couple example rules:
#+BEGIN_SRC emacs-lisp
2018-08-21 07:16:44 -05:00
(set-popup-rules!
'(("^ \\*" :slot -1) ; fallback rule for special buffers
("^\\*" :select t)
("^\\*Completions" :slot -1 :transient 0)
("^\\*\\(?:scratch\\|Messages\\)" :transient t)
("^\\*Help" :slot -1 :size 0.2 :select t)
("^\\*doom:"
:size . 0.35 :select t :modeline t :quit t :transient t)))
#+END_SRC
2018-08-21 07:16:44 -05:00
Omitted parameters in a ~set-popup-rules!~ will use the defaults set in
2018-01-07 05:45:54 -05:00
~+popup-default-alist~ and ~+popup-default-parameters~.
2018-01-06 23:49:58 -05:00
** 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~:
#+BEGIN_SRC emacs-lisp
;; put in private/$USER/config.el
(map-put +popup-default-parameters 'modeline t)
#+END_SRC
2018-01-06 23:49:58 -05:00
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:
#+BEGIN_SRC emacs-lisp
;; put in private/$USER/config.el
(remove-hook '+popup-buffer-mode-hook '+popup|set-modeline)
#+END_SRC
* Appendix
** Commands
2018-01-06 23:49:58 -05:00
+ ~+popup/other~ (aliased to ~other-popup~, bound to ~C-x p~)
+ ~+popup/toggle~
+ ~+popup/close~
+ ~+popup/close-all~
+ ~+popup/toggle~
+ ~+popup/restore~
+ ~+popup/raise~
2018-01-07 05:45:54 -05:00
** Library
+ Functions
+ ~+popup-window-p WINDOW~
+ ~+popup-buffer-p BUFFER~
2018-01-07 05:45:54 -05:00
+ ~+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
2018-01-06 23:49:58 -05:00
+ =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 by ~evil-window-*~ commands)
will ignore the ~no-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= advises ~balance-windows~, which causes major slow-downs when paired
with our ~balance-window~ advice, so we removes neotree's advice.
2018-01-07 05:45:54 -05:00
+ =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 use ~switch-to-buffer~ for
most of its buffer management, which completely bypasses
~display-buffer-alist~.