If only certain buffers could be so grossly incandescent.
solaire-mode
is an aesthetic plugin designed to visually distinguish "real"
buffers (i.e. file-visiting code buffers where you do most of your work) from
"unreal" buffers (like popups, sidebars, log buffers, terminals, etc) by giving
the latter a slightly different -- often darker -- background:
This plugin accomplishes this by doing two things when activated:
-
solaire-mode
buffer-locally remaps all the faces insolaire-mode-remap-alist
. e.g.default
<->solaire-default-face
, andmode-line
<->solaire-mode-line-face
The latter faces are the (presumably) "adjusted" faces.
-
solaire-global-mode
will globally swap faces insolaire-mode-swap-alist
IF your active theme is insolaire-mode-themes-to-face-swap
. Use this if you think a theme has its designated solaire-*-face colors the wrong way around.
Praise the sun.
Note:
- Uses
face-remapping-alist
, which other plugins may overwrite. - Tested mainly on Emacs 25.1+
- Works in GUI and terminal Emacs (with themes that support it).
- Try jumping.
Solaire-mode is available on MELPA: M-x package-install RET solaire-mode
Doom installs this package as part of the :ui doom
module. No additional
configuration is needed.
Simply activate solaire-global-mode
:
(solaire-global-mode +1)
solaire-mode-real-buffer-fn
(default:solaire-mode-real-buffer-p
): The predicate function used to determine if a buffer is "real" or not. It takes no arguments and must return truthy for buffers wheresolaire-mode
should not be activated in.solaire-mode-remap-alist
: An alist mapping original faces to replacement faces, which will be buffer-locally remapped in any buffersolaire-mode
is enabled in.solaire-mode-swap-alist
: An alist mapping original faces to replacement faces, which will be swapped globally if current theme is insolaire-mode-themes-to-face-swap
.solaire-mode-themes-to-face-swap
(default:()
): A list of themes to swap faces insolaire-mode-swap-alist
for. Can be symbols or regexps.
-
By default,
solaire-mode
remaps the mode-line faces. This interferes with certain mode-line packages like telephone-line or powerline, but works fine for doom-modeline. To disable this behavior use:(dolist (face '(mode-line mode-line-inactive)) (setf (alist-get face solaire-mode-remap-modeline) nil))
-
It is up to themes to decide whether unreal buffers (i.e. non-file-visiting) are lighter or darker than real buffers. If you don't like their arrangement, add that theme to
solaire-mode-themes-to-face-swap
:(add-to-list 'solaire-mode-themes-to-face-swap 'doom-vibrant)
Then solaire-mode will swap all the faces in
solaire-mode-swap-alist
(for example, swapping thedefault
face withsolaire-default-face
).You can add a regexp to
solaire-mode-themes-to-face-swap
to affect a family of themes, e.g.(add-to-list 'solaire-mode-themes-to-face-swap "^doom-")
solaire-mode
will disable itself if the active theme doesn't support it, but
to ensure support a theme must at least change solaire-default-face
's
:background
. My recommendation is that it is be slightly darker or lighter
than default
's background.
For example doom-one
(seen in the screenshot above) prefers
solaire-default-face
be darker than default
:
Others, like doom-vibrant prefer the opposite:
For full support, themes can customize the following faces:
Face | Remapped face |
---|---|
solaire-default-face | default |
solaire-fringe-face | fringe |
solaire-line-number-face | line-number |
solaire-hl-line-face | hl-line |
solaire-org-hide-face | org-hide, org-indent |
solaire-mode-line-face | mode-line |
solaire-mode-line-inactive-face | mode-line-inactive |
solaire-header-line-face | header-line |
The only (known) themes to support solaire-mode are:
- doom-themes
- nano-theme
- modus-themes
- parchment
- spacemacs-theme
- stimmung-themes
- vscode-dark-plus-theme
- wilmersdorf-theme
If you know of more, feel free to PR them.