I just published version 0.9.0
of the Modus themes. These are my
highly-accessible themes for GNU Emacs. They conform with the WCAG AAA
standard for colour contrast accessibility (a minimum contrast ratio of
7:1 between the foreground and background values). You can find the
packages on GNU ELPA, MELPA, MELPA stable:
modus-operandi-theme
(light)modus-vivendi-theme
(dark)Below are the release notes copied verbatim.
By Protesilaos Stavrou info@protesilaos.com on 2020-06-03
This entry records the changes since version 0.8.0 (2020-04-28). The present release contains about 50 commits, covering a month of active development.
All changes are aligned with the primary objective of this project, which is conformance with the WCAG AAA accessibility standard for colour contrast. This translates to a minimum contrast ratio of 7:1 between a given combination of foreground and background colours. The highest standard of its kind.
All customisation options that are booleans are off (nil
) by default.
The project’s policy is to offer such features on an “opt-in” basis,
while always respecting the principle of least surprise.
Refer to the README for further information on the exact names of symbols and the like.
It is now possible to make the faces of Icomplete, Ido, and a few
other related tools such as orderless
, use coloured backgrounds to
style their feedback. This is the aesthetic already in effect for
Ivy, Helm, and Selectrum. The default is more subtle, in that it uses
just an accented foreground value without any added background.
Advanced users can now override both the exact values of colour variables, as well as the mapping of properties/variables to faces. In practice this means that it is possible to completely change parts of the theme (or the entirety of it for that matter). It also means that users can simply access the theme’s palette for the sake of correctly passing the appropriate value to some bespoke face of theirs.
An extra increment for scaled headings is now available. This should hold the highest value on the scale. Such variables only take effect when the user opts for the “scaled headings” option.
A set of internal reforms were carried through in order to allow the colour palette to be accessed from user configuration files. This required a lot of debugging work to make sure the themes compile properly and performance is not affected.
The original idea for this redesign was suggested by Len Trigg in issue 39: https://gitlab.com/protesilaos/modus-themes/-/issues/39. Len also provided a real-world implementation of this new option, which is included in the project’s README.
André Alexandre Gomes helped figure out the problems caused by the initial design of this feature. In particular, André identified a performance penalty as well as errors pertaining to byte compilation. Everything was eventually resolved. For more see issue 44: https://gitlab.com/protesilaos/modus-themes/-/issues/44.
Several org-mode faces were reviewed in order to cope well with mixed
font settings. This is about use-cases where the main typeface is
proportionately-spaced, either by default or by some minor mode like
the built-in variable-pitch-mode
. The intent of configuring those
faces is to make them always inherit a fixed-pitch (monospace) font
family, in the interest of preserving the alignment of elements. The
idea, suggested code, as well as user feedback were offered by Ben in
issue 40: https://gitlab.com/protesilaos/modus-themes/-/issues/40.
Mixed font settings may have some side-effects depending on user configurations. This is unavoidable as we cannot control how users define their fonts. Mark Barton reported one such case, while he was able to fix it by making use of the suggested typeface definitions. See issue 42: https://gitlab.com/protesilaos/modus-themes/-/issues/42.
The faces for the tab-bar-mode
and tab-line-mode
that ship with
Emacs 27 were written anew. Same for those of centaur-tabs
. The
ideas for the redesign as well as the overall aesthetic are Ben’s, per
issue 41: https://gitlab.com/protesilaos/modus-themes/-/issues/41.
An edge case with Helm’s interpretation of colour values for its
ripgrep interface was reported by Manuel Uberti in issue 49:
https://gitlab.com/protesilaos/modus-themes/-/issues/49. It
essentially had to do with the syntax for the regexp engine as read by
the underlying rg
executable. Collaboration on that front
eventually led to fixes in Helm itself, committed by its maintainer.
Note that the README for the Modus themes already contains information
on how Helm applies a face to the matches of grep or grep-like
commands. Issue 49 confirmed what was already known in that regard
(i.e. that the “–color=never” command-line option is required to use
the Helm face, else a colour value from the ANSI colour vector is
used—both are supported by the themes).
The faces for Flycheck, Flymake, and Flyspell that would apply an underline effect were completely rewritten to account for relevant differences between GUI and TUI Emacs.
For GUI Emacs, all affected faces will now just use a colour-coded wavy underline. Empowered by the introduction of dedicated linter-related colours in prior commits (for version 0.8.0), we no longer have to change the foreground value of the offending text in addition to applying the underline effect. Whereas before the text would also get repainted, which was too intrusive in most circumstances.
If support for wavy underlines is not available, we assume the presence of a TUI, which generally is relatively more limited in its ability to reproduce colours with precision (meaning that the dedicated linter colour could be distorted, potentially producing inaccessible combinations). So for those cases we apply a straight underline combined with a colour-coded foreground for the affected text. This makes it more intense compared to the GUI equivalent, but is the necessary course of action to overcome the constraints imposed by the underlying terminal.
The palette of Modus Operandi underwent lots of subtle changes to make the background value of hl-line-mode more visible while retaining the overall style and character of the theme. In principle, you should not be able to tell the difference, unless presented with a careful side-by-side comparison. This is the comprehensive report, including a reproducible org-mode document with all the relevant contrast ratios: https://protesilaos.com/codelog/2020-05-10-modus-operandi-palette-review/.
Fixed `org-hide’ to actually “hide” by using the appropriate colour value.
Several other face groups received minor tweaks.
The README was improved to better present the available customisation options and to cover other topics of interest.
Updated the screen shots and their description in the relevant Wiki page: https://gitlab.com/protesilaos/modus-themes/-/wikis/Screenshots.