Skip to content

hlissner/emacs-solaire-mode

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Made with Doom Emacs Release tag MELPA Build status

Solaire mode

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:

solaire-mode at work

This plugin accomplishes this by doing two things when activated:

  • solaire-mode buffer-locally remaps all the faces in solaire-mode-remap-alist. e.g. default <-> solaire-default-face, and mode-line <-> solaire-mode-line-face

    The latter faces are the (presumably) "adjusted" faces.

  • solaire-global-mode will globally swap faces in solaire-mode-swap-alist IF your active theme is in solaire-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.

Install

Solaire-mode is available on MELPA: M-x package-install RET solaire-mode

Doom Emacs

Doom installs this package as part of the :ui doom module. No additional configuration is needed.

Configuration

Simply activate solaire-global-mode:

(solaire-global-mode +1)

Settings

  • 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 where solaire-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 buffer solaire-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 in solaire-mode-themes-to-face-swap.
  • solaire-mode-themes-to-face-swap (default: ()): A list of themes to swap faces in solaire-mode-swap-alist for. Can be symbols or regexps.

Jolly cooperation with other plugins

  • 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 the default face with solaire-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-")

Theme support for solaire-mode

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:

doom-one screenshot

Others, like doom-vibrant prefer the opposite:

doom-vibrant screenshot

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

Themes that support solaire-mode out of the box

The only (known) themes to support solaire-mode are:

If you know of more, feel free to PR them.