Modus themes version 2.4.0 By Protesilaos Stavrou <info@protesilaos.com> on 2022-06-01 This entry documents the changes made to the project since the publication of version 2.3.0 on 2022-04-01. It spans more than 60 commits to an already stable project. 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. The packaged version is available as 'modus-themes'. Read the manual inside Emacs by evaluating: (info "(modus-themes) Top") Or visit: <https://protesilaos.com/emacs/modus-themes>. Migration to SourceHut ====================== The sources of the project are as follows: - Git repo on SourceHut: <https://git.sr.ht/~protesilaos/modus-themes> - Mirrors: - GitHub: <https://github.com/protesilaos/modus-themes> - GitLab: <https://gitlab.com/protesilaos/modus-themes> - Mailing list: <https://lists.sr.ht/~protesilaos/modus-themes> - Official manual: <https://protesilaos.com/emacs/modus-themes> - Change log: <https://protesilaos.com/emacs/modus-themes-changelog> - Colour palette: <https://protesilaos.com/emacs/modus-themes-colors> - Sample pictures: <https://protesilaos.com/emacs/modus-themes-pictures> It is still possible to open issues on either of the mirrors and I will handle them in a timely fashion, though I encourage you to at least try the mailing list workflow---it is ordinary email (just remember to "reply to all"). Further reading that is relevant to SourceHut: - Moving all my Emacs projects to SourceHut: <https://protesilaos.com/codelog/2022-04-07-all-emacs-projects-sourcehut/> - Primer on formatting Git patches with Emacs (Magit): <https://protesilaos.com/codelog/2022-04-09-simple-guide-git-patches-emacs/> Problems with byte compilation on Emacs 29 ========================================== For some time between mid-April to mid-May, users of Emacs 29 could not byte compile the Modus themes. This has now been fixed in emacs.git, per bug#55414: <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=55414>. Thanks to everyone involved (A-Z): Alan Mackenzie, Eli Zaretskii, Lars Ingebrigtsen, Mattias Engdegård, Stefan Monnier. Messages about invalid face attributes while using the centaur-tabs =================================================================== I mentioned this issue in the previous change log as well: upstream does not allow us to use indirection in faces (the ':inherit' attribute). This is not our bug. It is standard behaviour for themes to use inheritance. I have an open pull request on the matter (since 2022-02-24): <https://github.com/ema2159/centaur-tabs/pull/179>. Relevant reports: - <https://github.com/protesilaos/modus-themes/issues/30> - <https://gitlab.com/protesilaos/modus-themes/-/issues/288> - <https://github.com/protesilaos/modus-themes/issues/15> Support for new faces or face groups ==================================== Directly supported ------------------ These are packages whose faces we override to make them work with the themes. - 'calibredb'. I have tried to limit the wanton use of colour in the relevant buffers and also align the package with the overall style of the themes. The currently selected line is affected by the user option 'modus-themes-hl-line'. Thanks to Ivan Popovych for the feedback on the official mailing list: <https://lists.sr.ht/~protesilaos/modus-themes/%3C87zgkgroi7.fsf%40gmail.com%3E>. Ivan also introduced some new faces to 'calibredb', which I helped test. See: <https://github.com/chenyanming/calibredb.el/pull/60>. - 'ein' (Emacs IPython Notebook). We support its code blocks with the appropriate colouration, while avoiding exaggerations. Thanks to Maxime Tréca for the feedback in issue 31 over at the GitHub mirror: <https://github.com/protesilaos/modus-themes/issues/31>. - 'tree-sitter'. My intent was to reduce the overall colouration produced by the default 'tree-sitter' faces. These tweaks give us good results, though there still are some cases where 'tree-sitter' exaggerates the styles it uses, such as by combining types with constants to produce ad-hoc (anonymous) faces. We cannot do anything about anonymous faces at the theme level. As such, we may get an additional bold weight (when 'modus-themes-bold-constructs' is non-nil) when we would rather not have it and/or a different colour than the one desired. Thanks to Przemysław Kryger for the feedback in issue 303 over at the GitLab mirror: <https://gitlab.com/protesilaos/modus-themes/-/issues/303>. If you are involved in the 'tree-sitter' project, please eliminate all anonymous faces and replace them with symbols (i.e. defface) that are editable by the user/theme. You are welcome to contact me if you need help/ideas. - 'vundo' Indirectly supported -------------------- These are packages that either (i) inherit from base faces we already support, or (ii) use colours from the Modus themes' palette. A list of them is available in the manual. - egerrit. an in-development package by Niklas Eklund which provides an Emacs interface to Gerrit: <https://git.sr.ht/~niklaseklund/egerrit>. Changes to supported face ========================= - Reworked the internal functions that handle the styling of diffs to allow the user option 'modus-themes-deuteranopia' to combine with the styles of the 'modus-themes-diffs' option. Before, when 'modus-themes-deuteranopia' was non-nil it would affect diffs by forcibly applying the default style of 'modus-themes-diffs' (fairly prominent background colours) with the primary difference of replacing greens with blues. Now all combinations work as expected. For example: (setq modus-themes-deuteranopia t modus-themes-diffs 'desaturated) ; nil, 'desaturated, 'bg-only Thanks to Kevin Le Gouguec for the feedback on the mailing list: <https://lists.sr.ht/~protesilaos/modus-themes/%3C878rqt4jhm.fsf@gmail.com%3E> - Conducted a major (and highly demanding) review of the colours used by Avy in the interest of optimising the contrast between its constructs. Read the analysis: <https://protesilaos.com/codelog/2022-04-20-modus-themes-case-study-avy/>. Thanks to Daniel Mendler and Damien Cassou for their feedback on the mailing list: - <https://lists.sr.ht/~protesilaos/modus-themes/%3C83f18e2e-d726-0248-72f5-95e896cbcf4c%40daniel-mendler.de%3E> - <https://lists.sr.ht/~protesilaos/modus-themes/%3C87czhgt5nm.fsf%40cassou.me%3E> - Updated the 'vertico-quick' faces to be consistent with Avy. - Made the 'line-number' face conform with the user option 'modus-themes-mixed-fonts'. This means that if the user option is non-nil, line numbers of 'display-line-numbers-mode' will use a monospaced typeface at all times (inheriting the 'fixed-pitch' face, as explained in the themes' manual). Otherwise they use whatever font the 'default' face has. This makes it better when the user enables 'variable-pitch-mode' but still wants spacing-sensitive constructs to remain monospaced. Thanks to Christopher League for the feedback in issue 302 over at the GitLab mirror: <https://gitlab.com/protesilaos/modus-themes/-/issues/302>. - Aligned the regexp construct faces with the meaning of the user option 'modus-themes-bold-constructs'. They will use a bold weight only when the user option is non-nil. This design is consistent with all other aspects of syntax highlighting. These specific faces were unconditionally bold due to a mistake of mine. Remember to check the manual on what "a bold weight" means, as we make everything easy to customise (e.g. if you prefer a semibold weight): <https://protesilaos.com/emacs/modus-themes#h:2793a224-2109-4f61-a106-721c57c01375>. - Removed the typographic emphasis from the 'file-name-shadow' face by no longer inheriting the 'italic' face. Thanks to Nicolas De Jaeghere for the patch. [ Nicolas has assigned copyright to the Free Software Foundation. ] - Stopped using the 'inverse-video' face attribute in 'powerline'. We now apply the colours directly. The reason is that 'inverse-video' makes it tricky to override the face as it swaps the foreground with the background. That behaviour is only needed in special cases: 'powerline' is not one of them. Thanks to Thibaut Verron for the feedback in issue 305 over at the GitLab mirror: <https://gitlab.com/protesilaos/modus-themes/-/issues/305>. - Ensured that git commit/rebase comments (as seen in the workflow of the 'magit' package) inherit from appropriate font-lock faces. This makes it possible to customise 'font-lock-comment-face' and have the changes apply to those elements as well. Such a customisation can, for example, involve the change of the font family or the addition of a background colour. We want the whole comment block, including those special keywords from Git, to look consistent. This change also makes git-{commit,rebase}-comment-heading attain the foreground colour of comments, instead of the default one (black or white), making it look part of the comment block. - Tweaked the 'fountain' package comments to be the same as all others. This avoids inconsistencies, such as when the user opts for something like the following: (setq modus-themes-syntax '(yellow-comments)) - Disabled padding in the 'keycast' package, meaning that the box around the key indicator always has the same height, even if the user opts for a padding value in 'modus-themes-mode-line' (read the manual or its doc string for how to assign a padding). This is in response to a change upstream that introduces the 'keycast-tab-bar-mode', which re-uses the faces that were originally intended for the mode line in the tab-bar. Ideally, upstream will provide distinct faces for each context so that we can have padding in the mode line but not the tab-bar. However, I have not had the opportunity to suggest such a change and/or prepare the relevant patch (it is not straightforward). - Refined some colour combinations for the "alternative syntax" style that is available when the user option 'modus-themes-syntax' includes the 'alt-syntax' property. These tweaks pertain to changes in hue that improve the appearance of certain faces in their context. - Enabled conditional use of 'fixed-pitch' for key bindings. This happens when the user option 'modus-themes-mixed-fonts' is non-nil (all spacing-sensitive elements become monospaced even if the user opts for a default font that is proportionately spaced or activates the 'variable-pitch-mode'). Thanks to Manuel Giraud for the patch. [ Manuel has assigned copyright to the Free Software Foundation. ] - Covered the face rotation option of 'highlight-changes-mode'. It is done with the 'highlight-changes-rotate-faces' command when 'highlight-changes-mode' is enabled (the mode is built into Emacs). Thanks to Philip Kaludercic for the feedback on the mailing list: https://lists.sr.ht/~protesilaos/modus-themes/<878rs14il4.fsf@posteo.net> Updates to the manual ===================== - Acknowledged Andrew Tropin as one of the contributors to the Guix package of the Modus themes. The latest patch to that end: <https://issues.guix.gnu.org/55268>. - Rewrote the note on 'fill-column-indicator' to show how the user can use a thicker line than the one we style by default. - Wrote a note in manual about 'php-mode' multiline comments which use the 'font-lock-doc-face' instead of 'font-lock-comment-face'. Sample code is provided to ensure consistency between all types of comments. - Added note about custom 'hl-todo' colours, specifically the user option 'hl-todo-keyword-faces' (which the themes customise as an exception to the rule, otherwise the default colours would not always be accessible). This is in relation to the mailing list thread on the matter with feedback from Vincent Foley and Christian Tietze: <https://lists.sr.ht/~protesilaos/modus-themes/%3C871qwh1r88.fsf%40era.co%3E>. - Elaborated on the style of 'git-gutter' faces in Doom Emacs, which are not as the Modus themes intend. Basically, the problem is that Doom changes the way that package draws its bitmaps: the faces we configure no longer appear as intended and sensitive colouration is lost. Thanks to Gonçalo Marrafa for reporting the issue, testing the code we recommend on Doom Emacs, and suggesting the inclusion of the reference to the 'after!' call (a macro that Doom defines). Miscellaneous ============= - Dedicated the colours of the Modus themes---just the colours---to the public domain. The Emacs package as a whole is still distributed under the terms of the GNU General Public License. The announcement: <https://protesilaos.com/codelog/2022-05-10-modus-themes-palette-cc0/> - Stopped using a timestamp in the modus-themes.el file. It could lead to situations where there was a mismatch between the latest change and the recorded time. It also introduced a barrier to entry for contributors, as they need to set up 'time-stamp.el'. - Removed the unnecessary 'require' call to the 'seq' library and made the necessary changes. Thanks to Daniel Mendler for the patch. [ Daniel has assigned copyright to the Free Software Foundation. ] - Applied the correct order of inheritance for all markup faces. This fixes a problem where not all typographic attributes where applied to the faces when 'modus-themes-mixed-fonts' was non-nil and the value of 'modus-themes-markup' included '(bold italic)'. - Tweaked how 'org-date' conditionally uses 'fixed-pitch'. Basically, we remove an internal stylistic inconsistency. There is no user-facing change. Thanks to Manuel Giraud for the patch. - Implemented the command 'modus-themes-report-bug'. It might help users find the email address of the mailing list and get started with the email-centric workflow of SourceHut. Note this is but a first step in that direction. If you think it can be improved, please report as much (or send a patch). - Included the command 'modus-themes-version', which prints in the echo area the current version of the package. With an optional prefix argument, it inserts the string at point. The version either is the last tagged release, such as '2.4.0', or an in-development version like '2.5.0-dev'. As we use semantic versioning, tags of the '2.4.1' sort are not considered: those would count as part of '2.5.0-dev'.