Version 1.2.0 of package Standard-Themes has just been released in GNU ELPA. You can now find it in M-x list-packages RET.
Standard-Themes describes itself as: ========================================== Like the default theme but more consistent ========================================== More at https://elpa.gnu.org/packages/standard-themes.html ## Summary: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ STANDARD-THEMES: LIKE THE DEFAULT THEME BUT MORE CONSISTENT Protesilaos Stavrou i...@protesilaos.com ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ This manual, written by Protesilaos Stavrou, describes the Emacs package called `standard-themes', and provides every other piece of information pertinent to it. The documentation furnished herein corresponds to stable version 1.2.0, released on 2023-02-16. Any reference to a newer feature which does not yet form part of the latest tagged commit, is explicitly marked as such. Current development target is 1.3.0-dev. ⁃ Package name (GNU ELPA): `standard-themes' ⁃ Official manual: <https://protesilaos.com/emacs/standard-themes> ⁃ Git repo on SourceHut: ## Recent NEWS: ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ CHANGE LOG OF THE STANDARD THEMES ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ This document contains the release notes for each tagged commit on the project's main git repository: <https://git.sr.ht/~protesilaos/standard-themes>. The newest release is at the top. For further details, please consult the manual: <https://protesilaos.com/emacs/standard-themes>. Version 1.2.0 on 2023-02-16 ═══════════════════════════ Support for palette overrides ───────────────────────────── It is now possible to override the palette of each Standard theme. This is the same feature that I implemented for the `modus-themes', except it is a bit more limited in scope (the Modus themes are maximalist due to their accessibility target). Overrides allow the user to tweak the presentation of either or both themes, such as to change the colour value of individual entries and/or remap how named colours are applied to semantic code constructs. For example, the user can change what the exact value of `blue-warmer' is and then, say, make comments use a shade of green instead of red. There are three user options to this end: ⁃ `standard-themes-common-palette-overrides' which covers both themes. ⁃ `standard-dark-palette-overrides' which concerns the dark theme. ⁃ `standard-light-palette-overrides' which is for the light theme. The theme-specific overrides take precedence over the "common" ones. The theme's palette with named colors can be previewed with the commands `standard-themes-preview-colors' and `standard-themes-preview-colors-current'. When called with a universal prefix argument (`C-u' with default key bindings) these commands produce a preview of the semantic colour mappings (e.g. what colour applies to level 2 headings). Use the preview as a reference to find entries to override. And consult the manual for the technicalities. Thanks to Clemens Radermacher for fixing a mistake I made in the code that produces the palette previews. Added the function `standard-themes-get-color-value' ──────────────────────────────────────────────────── It returns the colour value of named `COLOR' for the current Standard theme. `COLOR' is a symbol that represents a named colour entry in the palette. If the value is the name of another colour entry in the palette (so a mapping), recur until you find the underlying colour value. With optional `OVERRIDES' as a non-nil value, account for palette overrides. Else use the default palette. With optional `THEME' as a symbol among `standard-themes-items', use the palette of that item. Else use the current Standard theme. If `COLOR' is not present in the palette, return the `unspecified' symbol, which is safe when used as a face attribute's value. The manual provides this information and also links to relevant entries. The example it uses, with the `standard-light' as current: ┌──── │ ;; Here we show the recursion of palette mappings. In general, it is │ ;; better for the user to specify named colors to avoid possible │ ;; confusion with their configuration, though those still work as │ ;; expected. │ (setq standard-themes-common-palette-overrides │ '((cursor red) │ (prompt cursor) │ (variable prompt))) │ │ ;; Ignore the overrides and get the original value. │ (standard-themes-get-color-value 'variable) │ ;; => "#a0522d" │ │ ;; Read from the overrides and deal with any recursion to find the │ ;; underlying value. │ (standard-themes-get-color-value 'variable :overrides) │ ;; => "#b3303a" └──── New user option `standard-themes-disable-other-themes' ────────────────────────────────────────────────────── This user option is set to `t' by default. This means that loading a Standard theme with the command `standard-themes-toggle' or the functions `standard-theme-load-dark', `standard-theme-load-light' will disable all `custom-enabled-themes'. When the value of this user option is nil, themes are loaded without disabling other entries outside their family. This retains the original (and in my opinion bad for most users) behaviour of Emacs where it blithely blends multiple enabled themes. … …