Modus themes 2.2.0 for GNU Emacs

I just published version 2.2.0 of the Modus themes. The release notes are reproduced below. For any questions, feel welcome to contact me.

I will now prepare the patch for emacs.git which will then trickle down to GNU ELPA (the modus-themes is a :core package).


Modus themes version 2.2.0

By Protesilaos Stavrou info@protesilaos.com on 2022-02-23

The present entry records the changes made to the project since the publication of version 2.1.0 on 2022-02-17. This spans about 10 commits (though one of them is massive). Normally the release cycle occurs over periods of 4-5 weeks. This is a necessary exception.

To access the URL of the manual visit this web page: https://protesilaos.com/emacs/modus-themes. Or read it in the Emacs Info reader by evaluating this form:

(info "(modus-themes) Top")

The modus-operandi and modus-vivendi themes are built into Emacs-28 (next stable release) or later, and are available on GNU ELPA as well as other archives. Emacs-28 ships version 1.6.0, while the current master branch (i.e. Emacs-29) and, by extension, GNU ELPA include the latest tagged release.

Initialisation of user options

Removed a superfluous default value that hampered the initialisation of defcustom forms in the M-x customize interface. Things would still work, but the interface was not looking right while editing the relevant variables. Thanks to Gustavo Barros for reporting the bug in issue 267: https://gitlab.com/protesilaos/modus-themes/-/issues/267.

Refactor ‘modus-themes-completions’

Implemented thoroughgoing reforms across all completion User Interfaces (UIs) in order to make them more flexible/powerful and harmonise their looks.

modus-themes-completions now accepts an alist instead of a symbol. Each cons cell is in the form of (key . list-of-properties). The doc string describes all the details.

In terms of out-of-the-box appearences, all completion UIs have a subtle aesthetic. This was always the case for the likes of Vertico, Icomplete (Fido), and related, though it constitutes a marked departure from what Ivy and Helm used to look like. Users of the latter two can still get the more colourful or intense style with something like this:

(setq modus-themes-completions '((matches . (background intense))
                                 (selection . (accented intense))
                                 (popup . (accented intense))))

Or simply:

(setq modus-themes-completions '((t background intense accented)))

The documentation explains all those associations in-depth. There also are other styles on offer (and combinations thereof).

Furthermore, the new modus-themes-completions encompasses more UIs than its predecessor, including Company and Corfu.

In the interest of theme-wide consistency, all applicable faces have been reviewed.

Finally, note that the previous tagged release also made changes on this front, but it did not disrupt the status quo that was in place from before the release of version 1.0.0 of the themes (more than a year ago). In other words, it tried to make unnecessary compromises within the confines of an outdated design that did not fit in with the rest of the code base. The new modus-themes-completions might require manual intervention from users who want to customise things to their liking, though I feel this change is to our long-term benefit.

Thanks to Daniel Mendler and Rudolf Adamkovič for their feedback in issue 278: https://gitlab.com/protesilaos/modus-themes/-/issues/278. And thanks to Kenta Usami for recommending the use of a warning in issue 286: https://gitlab.com/protesilaos/modus-themes/-/issues/286.

Miscellaneous changes

  • Removed the pseudo-button effect from the org-checkbox face. It was not up-to-date with the current style of the rest of the themes, including the Org constructs for source block delimiters, the TODO keywords, the priority cookies (e.g. [#A]), and others.

  • Introduced a section in the manual which provides an alternative to the standard modus-themes-toggle that leverages enable-theme instead of load-theme under the hood. These technicalities are all explained in the manual.

  • Provided an alternative greyscale palette subset for modus-operandi in the manual’s section about overriding colours.

  • Added support for the built-in custom-variable-obsolete face.

  • Fixed typo in the modus-themes-box-buttons variable. Thanks to Illia Ostapyshyn for the patch in merge request 58: https://gitlab.com/protesilaos/modus-themes/-/merge_requests/58.