commit 3e10447f8945623d8192a6d3d04e4092624aa81a
parent 5e2d5101ef6d5133ae42834c4ccd890ae439c7ef
Author: Lukas Henkel <lh@entf.net>
Date: Sat, 25 Nov 2023 12:29:02 +0100
Use modus-operandi theme
Diffstat:
23 files changed, 36707 insertions(+), 1 deletion(-)
diff --git a/elpa/modus-themes-4.3.0.signed b/elpa/modus-themes-4.3.0.signed
@@ -0,0 +1,2 @@
+Good signature from 066DAFCB81E42C40 GNU ELPA Signing Agent (2019) <elpasign@elpa.gnu.org> (trust undefined) created at 2023-09-19T23:10:01+0200 using RSA
+Good signature from 645357D2883A0966 GNU ELPA Signing Agent (2023) <elpasign@elpa.gnu.org> (trust undefined) created at 2023-09-19T23:10:02+0200 using EDDSA
+\ No newline at end of file
diff --git a/elpa/modus-themes-4.3.0/.dir-locals.el b/elpa/modus-themes-4.3.0/.dir-locals.el
@@ -0,0 +1,4 @@
+;;; Directory Local Variables
+;;; For more information see (info "(emacs) Directory Variables")
+
+((emacs-lisp-mode . ((indent-tabs-mode . nil))))
diff --git a/elpa/modus-themes-4.3.0/CHANGELOG.org b/elpa/modus-themes-4.3.0/CHANGELOG.org
@@ -0,0 +1,9405 @@
+#+TITLE: Change log of the Modus Themes for GNU Emacs
+#+AUTHOR: Protesilaos Stavrou
+#+EMAIL: info@protesilaos.com
+#+OPTIONS: ':nil toc:nil num:nil author:nil email:nil
+
+This document contains the release notes that are included in each
+tagged commit on the project's main git repository:
+<https://git.sr.ht/~protesilaos/modus-themes>.
+
+The newest release is at the top. Since the notes are meant to be in
+plain text format, I copy them verbatim.
+
+For further details, please consult these additional resources:
+
++ Manual :: <https://protesilaos.com/emacs/modus-themes>
++ Screenshots :: <https://protesilaos.com/emacs/modus-themes-pictures>
+
+* 4.3.0
+:PROPERTIES:
+:CUSTOM_ID: h:4783bc29-3055-426d-9acb-51e4d0741871
+:END:
+
+** All themes except the tritanopia ones have a new hover colour
+:PROPERTIES:
+:CUSTOM_ID: h:b92b176e-3e9a-420d-bbbe-3c3e38b47027
+:END:
+
+The previous colour was not sufficiently distinct from what each theme
+defines for the =bg-completion= palette entry (preview a palette with
+=M-x modus-themes-preview-colors= or =M-x modus-themes-preview-colors-current=).
+This would make it hard to spot the difference while, for example,
+using ~vertico-mode~ in tandem with ~vertico-mouse-mode~.
+
+Same principle for the difference between the mouse hover and lazy
+isearch highlights (e.g. in Dired or Occur buffers).
+
+Changing the hue here follows the same principle that underpinned the
+redesign of the grey backgrounds for version 4 of the project:
+depending on hardware capabilities, colour reproduction may not be
+optimal, so we need to be more considerate with the choice of colour
+values, erring on the side of caution.
+
+The ~modus-operandi-tritanopia~ and ~modus-vivendi-tritanopia~ themes
+are not affected by this initiative, as they already used highly distinct hues.
+
+Thanks to Daniel Mendler for bringing this matter to my attention and
+for testing the proposed alternatives. This was done via a private
+channel and the information is shared with permission. Daniel is the
+developer of ~vertico~, among many other excellent packages:
+<https://github.com/minad>
+
+** Japanese holidays have the expected style
+:PROPERTIES:
+:CUSTOM_ID: h:2de9cef6-c6f1-4c2e-97ce-46d8a7306bae
+:END:
+
+Japanese calendars style Saturdays uniquely and the Modus themes now
+do the same for those who use the ~japanese-holidays~ package.
+Saturdays show up in a blue colour (which changes to cyan for the
+~modus-operandi-tritanopia~, ~modus-vivendi-tritanopia~ themes).
+
+Each theme's palette has a new semantic colour mapping called
+=date-holiday-other=, just in case we ever encounter another scenario
+like this one (users can override any entry in the palette---consult
+the manual for the technicalities).
+
+Thanks to Olaf Meeuwissen for bringing this package to my attention
+and showing me how traditional Japanese calendars style Saturdays.
+This was done in issue 311 on the GitLab mirror:
+<https://gitlab.com/protesilaos/modus-themes/-/issues/311>.
+
+** Each theme has semantic colour mappings for terminal emulators
+:PROPERTIES:
+:CUSTOM_ID: h:f3ae786a-9e01-4363-ae98-898f2ad34f7b
+:END:
+
+These are used by ~ansi-term~, ~vterm~, and the like. The idea is to
+empower users to differentiate background and foreground values,
+should they ever encounter a need to do so (when in doubt, do
+nothing).
+
+By convention, terminal emulators use the same value for both
+background and foreground, although this is not optimal with high
+contrast themes because what works as a foreground does not
+necessarily look nice as a background.
+
+The default values of the new mappings retain the prior state, just to
+not break existing configurations. Consider this a tacit user option
+for those who really need it.
+
+Thanks to Tony Zorman for reporting the problem that provided the
+impetus for this change:
+<https://lists.sr.ht/~protesilaos/modus-themes/%3C87fs4wforf.fsf%40hyperspace%3E>.
+
+** All theme definitions conform with the latest standard for metadata
+:PROPERTIES:
+:CUSTOM_ID: h:2af0114f-b96a-4e89-ad2f-850d53538efa
+:END:
+
+Themes are expected to declare their background type and affinity,
+such that the built-in command ~theme-choose-variant~ can do what it
+describes (switch between related themes). I was already doing this,
+though I had to make some adjustments. This is in response to Emacs
+bug#65468: <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=65468>.
+Thanks to Mauro Aranda for bringing the matter to my attention.
+
+** Proper colours for the inline preview of the ~corfu~ top candidate
+:PROPERTIES:
+:CUSTOM_ID: h:89d40a68-7573-4994-9ecc-fea40c823472
+:END:
+
+The ~corfu-candidate-overlay~ package is used in tandem with the
+~corfu~ package to create an inline preview of the first matching
+candidate. Thanks to Nicolas Semrau for bringing this matter to my
+attention in issue 89 on the GitHub mirror:
+<https://github.com/protesilaos/modus-themes/issues/89>.
+
+** Context indicators for the mode-line or header-line (breadcrumb.el)
+:PROPERTIES:
+:CUSTOM_ID: h:dc391e85-650f-444e-b909-849d659921fb
+:END:
+
+I added support for the new ~breadcrumb~ package by João Távora. It
+displays information about where we are in the given file, such as
+under which Org heading or inside which function. The indicator can
+be shown on the mode-line or the header-line. Either way, it will now
+be legible and consistent with its surroundings.
+
+** The new family of nerd-icons is covered by the themes
+:PROPERTIES:
+:CUSTOM_ID: h:0409d429-5307-43d6-9bf4-fabc958c2540
+:END:
+
+This is a new set of packages: ~nerd-icons~, ~nerd-icons-completion,
+~nerd-icons-dired~, ~nerd-icons-ibuffer~. A popular package that uses
+the Nerd icons is ~doom-modeline~, which the themes support as well.
+
+** All icons look as intended again
+:PROPERTIES:
+:CUSTOM_ID: h:a01075c6-b931-4b35-bdbd-2d1223101560
+:END:
+
+Some faces from the ~all-the-icons~ package were not configured
+because I accidentally changed their name from something like
+~all-the-icons-red-alt~ to ~all-the-icons-red-warmer~. I did that
+while renaming the colours defined in each theme's palette, to make
+them more meaningful ("warmer red" can hint at something whereas "alt
+red" is more abstract).
+
+** Corrected the documentation about custom Org faces
+:PROPERTIES:
+:CUSTOM_ID: h:5c254346-370e-4510-bcc7-70a1cca2c5a0
+:END:
+
+The Modus themes manual shows how to configure arbitrary TODO keywords
+to inherit the style of an arbitrary face (get the list of faces
+present in your Emacs with =M-x list-faces-display=). The previous
+value I used was faulty. It now is as intended. Thanks to
+soaringbird for reporting the issue on the mailing list:
+<https://lists.sr.ht/~protesilaos/modus-themes/%3CNXPVkVk--3-9%40tuta.io%3E>.
+
+** The colours used by =avy= are better for users with tritanopia
+:PROPERTIES:
+:CUSTOM_ID: h:3605693e-bd6d-40a0-a1d4-199684c89081
+:END:
+
+I changed the sequence of colours displayed by commands such as
+~avy-goto-char-timer~ such that each individual background does not
+blend with the ones adjacent to it, while respecting the overall needs
+of a tritanopia-friendly design. I also tweaked the colour values to
+achieve the desired result. The backgrounds remain distinct from
+their context but now also work harmoniously together.
+
+** The =bg-dim= palette entry is marginally brighter in all Modus operandi variants
+:PROPERTIES:
+:CUSTOM_ID: h:8a3cb4f1-e7f8-48f1-832c-27e64b126b2d
+:END:
+
+After extensive testing and side-by-side comparisons, I have concluded
+that the marginal increase in brightness improves the affected
+interfaces.
+
+The =bg-dim= background is used, among others, in the header-line, the
+popup of the ~company~ and ~corfu~ packages, as well as the Org source
+blocks (when the user option ~modus-themes-org-blocks~ is configured
+appropriately).
+
+** The "intense" palette override preset has new colours for tables and prose metadata
+:PROPERTIES:
+:CUSTOM_ID: h:3a990310-337c-457f-8f40-1af6d1b557f6
+:END:
+
+This concerns the ~modus-themes-preset-overrides-intense~ (refer to
+its documentation on how to use it). The primary target of these
+changes is Org mode and the overall effect is subtle. The previous
+colours did not combine nicely with all structural elements. For
+example, Org clocktables would obscure timestamps by being the same
+colour as them, while the table formula would not stand out. These
+styles did not fit into the concept of "intense" colours.
+
+** The "warmer" palette override preset has more legible strings
+:PROPERTIES:
+:CUSTOM_ID: h:64cbd701-1344-48cc-8bcf-fc9712438013
+:END:
+
+The ~modus-themes-preset-overrides-warmer~ uses a more prominent warm
+green value for strings in programming modes. The effect is subtle,
+though it fits in better with the overall aesthetic of these palette
+overrides.
+
+** Org document keywords like =#+author= are optionally monospaced
+:PROPERTIES:
+:CUSTOM_ID: h:096b75ec-802c-43e4-81ed-6db92b45654c
+:END:
+
+When the user option ~modus-themes-mixed-fonts~ is non-nil, all Org
+document keywords will be rendered with the ~fixed-pitch~ face. This
+ensures consistency between keywords such as =#+author= and "meta
+lines" like =#+texinfo=. Thanks to user fluentpwn for the change: it
+is one line and thus the author does not need to assign copyright to
+the Free Software Foundation.
+
+** Git commit summary lines have a more precise style
+:PROPERTIES:
+:CUSTOM_ID: h:2aecd902-3a0b-4544-98f4-dbb42cbad672
+:END:
+
+This concerns the first line in a Git commit message, as seen while
+working with the ~magit~ package. Same principle for the ~log-edit~
+buffer used by the built-in VC framework. Before, I was hardcoding a
+blue colour value, whereas now I apply the ~success~ face. The
+~success~ face is designed to contrast with the ~warning~ face that is
+used to show overlong summaries. Furthermore, the added indirection
+makes it possible to particularise the colour value, which I do for
+the tritanopia themes that cannot use blue.
+
+** Miscellaneous
+:PROPERTIES:
+:CUSTOM_ID: h:7391fd7d-6e70-4419-a8d6-f34d9ae075b1
+:END:
+
+- Removed explicit support for the built-in ~css-mode~. Its default
+ faces are decent. They inherit from standard font-lock faces that
+ the themes already cover.
+
+- Recalibrated wordwise ("refined") diffs for deuteranopia. The
+ ~modus-operandi-deuteranopia~ and ~modus-vivendi-deuteranopia~ have
+ a little bit more intense colour values applied to wordwise, else
+ "refined", diffs. These concern removed lines. The effect is
+ visible while using ~magit~ or the built-in ~diff-mode~.
+
+- Backported emacs.git commit =4cf33b6bd02b868ebbf112da7926d7c3c64517ce=.
+ It removed the space from the front matter of the =modus-themes.org=
+ file (i.e. the manual) because the Org export did not produce the
+ right results, per Emacs bug#64548. Thanks to Stephen Berman for
+ reporting the issue and making the requisite change.
+
+- Added support for the `erts-mode`. Thanks to Kevin Fleming for
+ informing me about this built-in mode. This was done in issue 85 on
+ the GitHub mirror: <https://github.com/protesilaos/modus-themes/issues/85>.
+
+- Fixed a typo in the ~modus-themes-preset-overrides-intense~ doc
+ string. Thanks to Nicolas Semrau for bringing this matter to my
+ attention. It was done in issue 90 on the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/issues/90>.
+
+- Made all commands that prompt for a theme (~modus-themes-select~,
+ ~modus-themes-preview-colors~) apply the =theme= category to the
+ available candidates. This allows the user to target said category
+ to affect the relevant functions. For example, to set completion
+ styles with ~completion-category-overrides~ or to define a custom
+ annotation function with the ~marginalia~ package.
+
+- Added support for new ~appt-notification~ face (Emacs 30). Change
+ upstream by me.
+
+* 4.2.0
+:PROPERTIES:
+:CUSTOM_ID: h:29370d83-23c4-415b-afbf-ad85d4296c86
+:END:
+
+** I won a Google award for the Modus themes
+:PROPERTIES:
+:CUSTOM_ID: h:1ffc8660-511d-4fa8-aff4-11da8246a186
+:END:
+
+Report here: <https://protesilaos.com/codelog/2023-05-25-emacs-google-award/>.
+
+This is not a "change" per se, but it is worth documenting here. It
+shows how important accessibility can be in empowering people to use
+their computer and, in our case, to exercise their software freedoms.
+
+The Modus themes tend to one aspect of accessibility. They do not
+exhaust the topic, though they should at least raise awareness about
+the significance of tending to the usability needs of everyone. The
+effort I put into documenting the themes (and my other packages)
+should be understood in this light as a means of helping people enjoy
+their software freedom by learning how to use and extend the program
+in question.
+
+** New tritanopia-optimised themes
+:PROPERTIES:
+:CUSTOM_ID: h:b92706b0-9d53-4015-8916-9db3c0c87068
+:END:
+
+I have created a pair of light and dark themes that are intended for
+people with blue-yellow colour deficiency (tritanopia). These are
+~modus-operandi-tritanopia~ (light) and ~modus-vivendi-tritanopia~
+(dark). Screenshots of all the Modus themes are available on my
+website: <https://protesilaos.com/emacs/modus-themes-pictures>.
+
+The entire collection is now described in the manual as follows:
+
+#+begin_quote
+The Modus themes consist of eight themes, divided into four subgroups.
+
+- Main themes :: ~modus-operandi~ is the project's main light theme,
+ while ~modus-vivendi~ is its dark counterpart. These two themes are
+ part of the project since its inception. They are designed to cover
+ a broad range of needs and are, in the opinion of the author, the
+ reference for what a highly legible "default" theme should look
+ like.
+
+- Tinted themes :: ~modus-operandi-tinted~ and ~modus-vivendi-tinted~
+ are variants of the two main themes. They slightly tone down the
+ intensity of the background and provide a bit more color variety.
+ ~modus-operandi-tinted~ has a set of base tones that are shades of
+ light ochre (earthly colors), while ~modus-vivendi-tinted~ gives a
+ night sky impression.
+
+- Deuteranopia themes :: ~modus-operandi-deuteranopia~ and its
+ companion ~modus-vivendi-deuteranopia~ are optimized for users with
+ red-green color deficiency. This means that they do not use red and
+ green hues for color-coding purposes, such as for diff removed and
+ added lines. Instead, they implement colors that are discernible by
+ users with deueteranopia or deuteranomaly (mostly yellow and blue
+ hues).
+
+- Tritanopia themes :: ~modus-operandi-tritanopia~ and its counterpart
+ ~modus-vivendi-tritanopia~ are optimized for users with blue-yellow
+ color deficiency. The idea is the same as with the deuteranopia
+ variants: color coding relies only on hues that are accessible to
+ people with tritanopia or tritanomaly, namely, shades of red and
+ cyan.
+#+end_quote
+
+** Recalibrated the "graph" colours in all themes
+:PROPERTIES:
+:CUSTOM_ID: h:60bb2797-2db6-4d47-9d27-7d1f32291707
+:END:
+
+The new palette subset improves the contrast of all the relevant
+colours when presented side-by-side. These are most notably used by
+the ~org-habit~ consistency graph, which is displayed in the Org
+agenda. The deuteranopia and tritanopia themes have their own bespoke
+colours for this purpose, due to their specific requirements for
+colour coding (e.g. they cannot use green).
+
+** Faces or face groups
+:PROPERTIES:
+:CUSTOM_ID: h:4b68159e-d998-4781-b202-74a3dcc8ae8e
+:END:
+
+- Introduced a subtle 3D effect for clickable buttons, replacing the
+ previous 2D design. I realised the flat style creates ambiguity
+ between the button and the text fields. This happens, for example,
+ with =M-x customize-variable= for ~org-capture-templates~ which has
+ lots of button and text field combinations. The added sense of
+ depth helps with the usability of these buttons because it makes
+ them unambiguous. Personally, I prefer the 2D approach, but here we
+ have a trade-off between usability and aesthetics. According to
+ what I state in the manual:
+
+ #+begin_quote
+ If there arises an inescapable trade-off between usability and
+ stylistic considerations, we will always opt for the former.
+ #+end_quote
+
+- Refashioned the ~whitespace-mode~ to be much more subtle and added
+ the concomitant semantic colour mappings.
+
+ The previous style involved the use of a dim grey background for
+ each invisible character. While this is was good to spot invisible
+ characters quickly, it was a major hindrance for users who want to
+ run ~whitespace-mode~ at all times (e.g. for the Python programming
+ language which is space-sensitive).
+
+ We thus remove the backgrounds by default but provide the option to
+ reinstate them via palette overrides (as documented at length in the
+ manual). To this end, we have two new semantic colour mappings for
+ ordinary space, its invisible characters, as well as space errors.
+
+ Thanks to Christian Tietze and Oliver Epper for their feedback in
+ issue 80 on the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/issues/80>.
+
+- Applied a more subtle background for faces ~menu-bar-mode~,
+ ~tool-bar-mode~, ~scroll-bar-mode~. They do not need to stand out
+ so much because the toolkit already takes care of that. Also, we do
+ not want to dillute the semantic value of either ~bg-tab-bar~ or
+ ~fringe~ palette colour mappings that I was wrongly using before in
+ this context. Note that those faces may not apply, depending on the
+ underlying tool kit. For example, I encounter them with the Lucid
+ build of Emacs, though not with the GTK one.
+
+- Fix the critical typo of 'widget-buton', which prevented the actual
+ ~widget-button~ face from being affected by the themes. Thanks to
+ Steve Downey for pointing it out in issue 73 on the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/issues/73>.
+
+- Added support for the ~disk-usage~ package. It is made to look like
+ Dired, to the extent possible. Thanks to Nacho Barrientos for the
+ patch: <https://lists.sr.ht/~protesilaos/modus-themes/patches/39822>.
+ The change is small and does not require copyright assignment to the
+ Free Software Foundation.
+
+- Made the ~eglot-diagnostic-tag-unnecessary-face~ look like a
+ warning. By default it inherits the ~shadow~ face, which makes it
+ counter-intuitive as it dims the text instead of bringing it to our
+ attention. The intent of ~eglot-diagnostic-tag-unnecessary-face~ is
+ to highlight unused symbols, so this is better presented as a
+ warning.
+
+ Thanks to Augusto Stoffel for bringing this matter to my attention.
+ This was done via a private channel and the information is shared
+ with permission.
+
+- Changed the ~smerge-markers~ to inherit from ~diff-header~ instead
+ of ~diff-heading~. Thanks to Steve Downey for the contribution.
+ This was done in pull request 74 on the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/pull/74>. The change
+ is small and does not require copyright assignment to the Free
+ Software Foundation.
+
+- Added support for the ~jinx~ package. This was originally done by
+ Tomasz Hołubowicz in pull request 71 on the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/pull/71>. The change
+ is small and does not require copyright assignment to the Free
+ Software Foundation. I then modified it to make the underlines look
+ like warnings instead of errors. This is because of how the package
+ works: it automatically highlights misspellings in the visible
+ portion of the buffer. There are cases where this results in a very
+ intense presentation, which can be distracting. We want to reduce
+ the overall intensity and not draw too much attention to those
+ highlights.
+
+- Extended coverage of Org to the new ~org-agenda-calendar-daterange~
+ face (part of Org version 9.7). Thanks to Gautier Ponsinet for the
+ patch, which I received via a private channel. The change is small
+ and does not require copyright assignment to the Free Software
+ Foundation. In addition to this, I introduced a new semantic colour
+ mapping in the themes' palette called ~date-range~. This can be
+ used with the palette overrides, which are documented at length in
+ the manual (there are lots of copy-pastable examples as well).
+
+- Supported all of the new faces of the built-in ~proced~ package.
+ These are part of Emacs 29 and make the ~proced~ buffers more
+ colourful, subject to the user option ~proced-enable-color-flag~.
+ As always, the themes strive to avoid exaggerations, meaning that I
+ apply colour with restraint: not all faces need to stand out.
+
+- Included the ~rst-mode~ in the list of explicitly supported
+ packages, making its heading look like those of Org, Markdown, etc.
+ Thanks to David Edmondson for the patch:
+ <https://lists.sr.ht/~protesilaos/modus-themes/patches/40625>. I
+ believe David has already assigned copyright to the Free Software
+ Foundation, though this patch is small anyway.
+
+- Covered all the new faces of the built-in ~flymake~ package. These
+ concern the inline feedback messages (Emacs 30) as well as those
+ that appear in the echo area (Emacs 29). The former are subject to
+ the user option ~flymake-show-diagnostics-at-end-of-line~.
+
+- Reduced the intensity of the ~which-key~ prefix descriptions. Those
+ are the keymaps that displayed by ~which-key~ to hint that typing
+ the given key will open a new ~which-key~ page with more keys.
+
+- Configured new ~vundo-saved~ and ~vundo-last-saved~ faces of the
+ ~vundo~ package. They are designed to be easy to read, without
+ going over-the-top. Thanks to Nicolas Semrau for bringing this
+ matter to my attention in issue 79 on the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/issues/79>.
+
+- Removed the deprecated ~consult-preview-cursor~ face and made the
+ requisite adjustments to the ~consult~ faces. This was done in
+ commit =267b0c9= of the Consult Git repository. Discussed here:
+ <https://github.com/minad/consult/issues/764#issuecomment-1537491625>.
+
+- Instructed the ~shr-selected-link~ face of the built-in ~shr~
+ package to use a "mark selection" style instead of the semantically
+ incorrect "intense red" it had before. This change is helpful for
+ those who override the palette of their Modus theme of choice, while
+ it also allows us to have varied colours depending on the
+ requirements of each theme (e.g. deuteranopia/tritanopia compared to
+ the defaults).
+
+- Did the same as above, mutatis mutandis, for the faces
+ ~transient-disabled-suffix~, ~web-mode-error-face~,
+ ~erc-dangerous-host-face~, ~aw-minibuffer-leading-char-face~,
+ ~binder-sidebar-highlight~, ~binder-sidebar-missing~,
+ ~image-dired-thumb-flagged~, ~image-dired-thumb-mark~,
+ ~info-menu-star~, ~rainbow-delimiters-mismatched-face~,
+ ~evil-ex-substitute-matches~, ~iedit-occurrence~,
+ ~iedit-read-only-occurrence~, ~pgtk-im-0~, ~dired-narrow-blink~.
+
+- Enhanced the ~image-dired~ mark faces with a box border, as the use
+ of a background alone can be obscured by the underlying image
+ thumbnail, depending on its figures/colours.
+
+- Removed the backgrounds from the ~powerline-evil~ faces and
+ simplified their overral presentation in the interest of
+ maintainability. The old styles were hard to predict and test.
+ There could easily be conflicts, such as if the user would override
+ the colours of the mode line.
+
+- Ensured that ~diary~ and ~holiday~ colours are distinct and legible,
+ without being too intense.
+
+** Changes to the manual or other documentation
+:PROPERTIES:
+:CUSTOM_ID: h:d3c12dd0-4231-420b-a212-b6bd571c5c34
+:END:
+
+- Updated the doc string of the primary customisation group defined by
+ the themes to reflect the support for the case of tritanopia.
+
+- Included links to the web page of the manual and the one with the
+ sample pictures in the customisation groups. Those links appear in
+ the various Custom UI buffers.
+
+- Introduced an annotation function for all commands that involve
+ minibuffer completion. The annotations display the one-line
+ description of each theme, making it easier for a user to pick their
+ preferred choice (e.g. when using the ~modus-themes-select~
+ command).
+
+- Defined semantic colour mappings for "marks". These are used by
+ ~dired~, ~trashed~, ~proced~, and others. These is no change to the
+ default appearance of what users are already familiar with, though
+ it is now possible to override those styles.
+
+- Complemented the subset of semantic colour mappings for
+ errors/warnings with "prominent" variants. Those employ a
+ background and foreground combination. They are used in all sorts
+ of contexts, such as for fringe errors (~flymake~, ~flycheck~, ...),
+ ~query-replace~, ~isearch-fail~, and others.
+
+- Wrote sample code on how to add "padding" to the Emacs frame and the
+ space between the Emacs windows. This makes for a presentation that
+ some users find easier to work with.
+
+- Corrected the sample code for ~git-gutter~ to use the appropriate
+ symbols from the theme palette. Thanks to Christian Tietze for the
+ patch: <https://lists.sr.ht/~protesilaos/modus-themes/patches/40354>.
+ The change is small and does not require copyright assignment to the
+ Free Software Foundation.
+
+- Removed ~moody~ from the list of packages explicitly supported by
+ the themes. We stopped supporting it since version 4 that removed
+ the relevant user option for the mode line. The idea is that the
+ mode line is better handled by the user without interference from
+ the theme, due to the number of options available (and how brittle
+ those can be when interacting with unpredictable face definitions).
+ Thanks to Nicolas De Jaeghere for reminding me to remove ~moody~
+ from the manual:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3Cypi9jzyclqxy.fsf%40gmail.com%3E#%3C87jzybdgg1.fsf@dejaeghe.re%3E>.
+
+** Miscellaneous
+:PROPERTIES:
+:CUSTOM_ID: h:7240990a-2b4d-442c-a15c-84c8d8b26622
+:END:
+
+- Added two new preset palette overrides to make the overall
+ presentation "warmer" or "cooler". Those are called
+ ~modus-themes-preset-overrides-warmer~ and
+ ~modus-themes-preset-overrides-cooler~, respectively. The manual
+ explains how those presets can be used. I suggest the user does not
+ add such overrides if they intend to load any of the deuteranopia or
+ tritanopia themes, due to the specific requirements of their design.
+
+- Refined the deuteranopia yellows for warnings, errors, and comments.
+ These otherwise slight adjustments make it considerably easier to
+ tell apart distinct elements that may be positioned close together.
+
+- Tweaked the deuteranopia semantic colour mappings for emails. The
+ subject line use a more appropriate colour value, while level 3
+ quotes stand out a bit more than they did before, without being
+ needlessly intense.
+
+- Arranged for the ~modus-themes-load-theme~ function return the value
+ of the =THEME= argument it accepts. The intent is to allow other
+ functions that call this one to capture the return value for their
+ purposes (such as with a ~let~ binding). Thank to Oliver Epper for
+ the feedback in issue 78 on the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/issues/78>.
+
+* 4.1.0
+:PROPERTIES:
+:CUSTOM_ID: h:d028f117-8a74-4c0c-b838-9f6bf2b43c19
+:END:
+
+** Recursive semantic colour mapping
+:PROPERTIES:
+:CUSTOM_ID: h:262e2f5f-4db0-4549-a5ba-4e57cd2edc6a
+:END:
+
+Version 4 of the Modus themes changed how all colour-related
+customisations are done. Instead of multiple user options with
+hard-coded stylistic presets, users have access to a comprehensive
+system of "named colours" and "semantic colour mappings". The former
+is an association between a name, like =blue-warmer=, and a colour
+value such as =#3548cf=. While semantic colour mappings are
+associations between syntactic/interface constructs and named colours,
+such as what value level 2 headings have.
+
+When overriding the palette users can now define semantic colour
+mappings whose value is another such mapping. This recursion
+simplifies how multiple overrides are defined.
+
+The manual offers extensive guidance on the topic of palette
+overrides. There are many sections that include code samples that are
+ready for use.
+
+The addition of recursive semantic colour mappings solves a problem
+reported by Imran Khan on the mailing list where they were trying to
+do what made sense (recursion) but the old code did not permit as
+much:
+<https://lists.sr.ht/~protesilaos/modus-themes/%3Cb7ca4702162fd575593f8ded28d9a888.contact%40imrankhan.live%3E>.
+
+I was aware of that constraint from before the release of version
+4.0.0 but was hesitant to implement recursion prior to getting some
+feedback on the new palette overriding feature.
+
+Also thanks to Christian Tietze for participating in that discussion
+on the mailing list.
+
+** Extract an arbitrary colour from a given theme's palette
+:PROPERTIES:
+:CUSTOM_ID: h:6ba1437f-e55f-4c3a-9c03-b0035293b4a2
+:END:
+
+I formalised the function ~modus-themes-get-color-value~ and
+documented it at length. It accepts a =COLOR= argument, which
+represents an entry in the palette (named colour or semantic colour
+value), as well as optional =OVERRIDES= and =THEME= arguments. When
+=OVERRIDES= is non-nil, ~modus-themes-get-color-value~ will read from
+the overrides, otherwise it will only consult the default palette
+value. The =THEME= argument specifies which theme's palette to use.
+In the absence of =THEME=, the current one is used.
+
+I already had the "get colour" functionality internally, but was
+inspired to make it public after checking Sacha Chua's blog post
+"Making highlight-sexp follow modus-themes-toggle":
+<https://sachachua.com/blog/2023/01/making-highlight-sexp-follow-modus-themes-toggle/>.
+Sacha was using a private function from the themes, which would have
+been problematic if I would ever move things around.
+
+Remember to read the documentation of ~modus-themes-list-colors~.
+That command shows a preview of the named colours. When called with a
+prefix argument (=C-u= by default), it shows a preview of the semantic
+colour mappings.
+
+** Option to disable other themes while loading Modus
+:PROPERTIES:
+:CUSTOM_ID: h:5af072da-38f6-44d0-9342-e799f0196006
+:END:
+
+In the past, we used to disable all other themes while loading a Modus
+theme. I revised this for version 4 because I learnt that some users
+use "themes" as bundles of arbitrary configurations.
+
+With the addition of the ~modus-themes-disable-other-themes~ user
+option, which is non-nil by default, I am restoring the old behaviour:
+when loading a Modus theme all other themes are disabled.
+
+This happens when the theme is loaded with the commands
+~modus-themes-toggle~ and ~modus-themes-select~, or via Lisp with the
+function ~modus-themes-load-theme~.
+
+Users who need to run multiple themes can set this option to a nil
+value. (Personally, I use minor modes for such stylistic bundles and
+never have to worry about ~(mapc #'disable-theme custom-enabled-themes)~.)
+
+Thanks to Tony Zorman for the feedback on the mailing list, which led
+me to the introduction of this user option:
+<https://lists.sr.ht/~protesilaos/modus-themes/%3C874jtew0gp.fsf%40hyperspace%3E#%3C87bkne84d2.fsf@hyperspace%3E>.
+
+** Renamed the named colours for bg-{added,changed,removed}-intense
+:PROPERTIES:
+:CUSTOM_ID: h:d43ef5cb-10dd-4c33-9429-2289a5fb2506
+:END:
+
+They are now called ~bg-added-fringe~, ~bg-changed-fringe~,
+~bg-removed-fringe~. Please update any palette overrides to reflect
+this renaming.
+
+** Documented how to override diffs for more optional combinations
+:PROPERTIES:
+:CUSTOM_ID: h:220d4361-7245-4632-998e-c0e2ee3b5f7d
+:END:
+
+The manual includes details (with copy-pastable code) on how to
+achieve foreground-only diffs and/or how to have red+blue diffs
+instead of the default red+green or the deuteranopia yellow+blue.
+
+Thanks to Andrew Tropin for requesting this feature. We used to
+provide this style in earlier versions of the themes, but now it is
+much more flexible. Andrew's request was done via a private channel
+and the information is shared with permission.
+
+[ Since we are here, also thanks to Andrew for keeping the Guix
+ package of the Modus themes up to date. ]
+
+** Stylistic changes
+:PROPERTIES:
+:CUSTOM_ID: h:fdcff629-22c1-4203-9104-4f732c59f731
+:END:
+
+- Guaranteed consistency between all of the line-related faces of the
+ ~consult~ package. We use the ~shadow~ face in all interfaces where
+ line numbers are contextual information (Occur, Grep,...). With
+ Consult, this was not the case for commands like ~consult-line~.
+
+ Thanks to Daniel Mendler (also known as @minad) for bringing this
+ matter to my attention:
+ <https://lists.sr.ht/~protesilaos/ef-themes/%3Cb03413a6-cb77-615d-145d-db4eb710bfca%40daniel-mendler.de%3E>.
+
+- Refined all diff colours for fringes and reduced the saturation for
+ added lines in ~modus-operandi-deuteranopia~, ~modus-vivendi-deuteranopia-theme~.
+ Thanks to Andrew Tropin for showing me some usability issues with
+ the previous styles. This was done via a private channel and the
+ information is shared with permission.
+
+- Instructed the ~dashboard~ icons to retain their underlying colour.
+ The default value of the ~dashboard-items-face~ made all icons use
+ the same colour, detracting from their distinctiveness. Thanks to
+ Thanos Apollo for bringing this matter to my attention. It was done
+ via a private channel and the information is shared with permission.
+
+- Amplified the intensity of the =#+begin_src= text when the user
+ option opts for ~(setq modus-themes-org-blocks 'gray-background)~.
+ The text is now easier to discern. That user option makes the
+ inside of the block have a gray background and the begin/end lines
+ to have a more intense gray, giving off a "blocky" impression.
+
+- Made the ~compilation-warning~ face also inherit the
+ ~modus-themes-bold~ face. This means that it responds to the value
+ of the user option ~modus-themes-bold-constructs~, the same way the
+ other compilation-related mode line faces do. Thanks to Manuel
+ Giraud for informing me about the inconsistency in
+ ~compilation-warning~. This was done via a private channel and the
+ information is shared with permission.
+
+- Calibrated the hueness of the "nuanced" backgrounds in the
+ ~modus-operandi-tinted~ and ~modus-vivendi-tinted~ themes. These
+ tweaks are necessary to retain thematic consistency.
+
+- Reset ~mu4e-header-highlight-face~ to its intended style. I made a
+ mistake before: I did not want the ~highlight~ face to be used in
+ this case as it is too intense. Sorry!
+
+- Toned down the highlight line of the ~ctrlf~ and ~swiper~ packages.
+ I mistakenly used the ~highlight~ before, which is too intense for
+ the purposes of an ancillary background colour.
+
+- Applied "nuanced" backgrounds to the tinted Org blocks. This fixes
+ an error of mine where I amplified the background colouration of Org
+ blocks. This concerns the case where the user option
+ ~modus-themes-org-blocks~ has a =tinted-background= value. Thanks
+ to Mark Bestley for informing me about this in issue 60 on the
+ GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/issues/60#issuecomment-1374530488>.
+
+- Removed the hardcoding of the ~italic~ style in three faces, opting
+ instead to make them subject to the user option ~modus-themes-italic-constructs~.
+ The faces are ~marginalia-documentation~, ~markup-attribute-face~,
+ and ~org-agenda-calendar-sexp~.
+
+- Tweaked the Org agenda deadline and today schedule to use a bold
+ weight only when the user option ~modus-themes-bold-constructs~ is
+ set to a non-nil value. Thanks to Marko Kocic for reporting an
+ issue that brought this matter to my attention:
+
+ - <https://lists.sr.ht/~protesilaos/modus-themes/%3C35588839.256749.1673272214728%40office.mailbox.org%3E>
+ - <https://lists.sr.ht/~protesilaos/modus-themes/%3C874jszvk5g.fsf%40protesilaos.com%3E>
+ - <https://lists.sr.ht/~protesilaos/modus-themes/%3C87ilhfu101.fsf%40protesilaos.com%3E>
+
+- Enforced the main foreground colour in the faces =highlight= and
+ =secondary-selection=. This should have always been there to avoid
+ awkward colour combinations. I realised it was missing after
+ corresponding with Edgar Vincent on a relevant topic:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3C878ri95h1q.fsf%40posteo.net%3E#%3C87ilhc7usc.fsf@posteo.net%3E>.
+
+- Made the ~eglot-mode-line~ face conditionally bold, by subjecting it
+ to the user option ~modus-themes-bold-constructs~.
+
+- Ensure that the background of the ~company~ package's popup is the
+ same as that of the ~corfu~ package. This is a subtle neutral
+ value.
+
+- Fixed the hue of the ~org-habit~ "ready" faces. It should be green
+ and I made a mistake here. The ~modus-operandi-deuteranopia~ and
+ ~modus-vivendi-deuteranopia~ themes do change the underlying hues
+ though, as green is not suitable for them.
+
+- Simplified the ~keycast~ faces so that (i) they do not use a =:box=
+ attribute that can look awkward in some cases and (ii) the name of
+ the given command is not colourised to avoid exaggerations with the
+ use of colour.
+
+- Made the ~powerline-active1~ face inherit from ~mode-line~ instead
+ of ~mode-line-active~. The latter only exists in newer versions of
+ Emacs and we do not want to make the themes break in older versions.
+ Thanks to TitusMu for identifying this and reporting it in issue 64 on
+ the GitHub mirror: <https://github.com/protesilaos/modus-themes/issues/64>.
+
+- Decoupled all ~ediff~ faces from their ~diff-mode~ counterparts.
+ Ediff does not depend on ~diff-mode~, so we want to make each set of
+ faces stand on its own. Thanks to Bernd Rellermeyer for pointing
+ out this implicit dependency in issue 68 on the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/issues/68>.
+
+** Miscellaneous
+:PROPERTIES:
+:CUSTOM_ID: h:14d1f1b0-00e0-4275-a06c-9e34daf6411a
+:END:
+
+- Improved the clarity and robustness of the code that does the work
+ of ~modus-themes-list-colors~.
+
+- Refined the colour value of the =blue-warmer= named colour for all
+ the light themes. It is a tiny bit darker than before.
+
+- Introduced a ~t~ fallback value for the user option
+ ~modus-themes-completions~. It makes it easier to apply the same
+ styles for the selection line and matching characters.
+
+- Documented how to not extend the active region background.
+
+- Explained how to make tabs more or less colourful by using palette
+ overrides.
+
+- Removed obsolete and redundant statements from the documentation the
+ user option ~modus-themes-completions~. There was (i) an outdated
+ reference to the =background= value, which is no longer supported,
+ and (ii) a statement about the standard Completions' buffer that was
+ not useful. Thanks to Rudolf Adamkovič for informing me about this:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3Cm2tu1211qz.fsf%40me.com%3E>.
+
+- Rephrase the statement ="*Completions* buffer"= in the documentation
+ in the interest of clarity. Thanks to Rudolf Adamkovič for the
+ suggestion:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3Cm2tu1211qz.fsf%40me.com%3E#%3Cm2eds43htz.fsf@me.com%3E>.
+
+- Updated the sample configuration of the themes with ~use-package~ in
+ the interest of simplicity. Thanks to Sergey Nichiporchik for the
+ contribution. Sergey's contribution is within the ~15 line limit
+ and thus does not require copyright assignment to the Free Software
+ Foundation.
+
+ This was done in merge request 59 on the GitLab mirror:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/59>.
+
+ The prepatory discussion took place in issue 310 on the same mirror:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/310>.
+
+ Weeks later I further simplified the relevant samples for the sake
+ of uniformity with the generic package setup. Thanks to Zoltan
+ Kiraly for informing me about the fact that the ~:bind~ keyword
+ delays the load of the package until the given command is invoked:
+ <https://github.com/protesilaos/modus-themes/pull/67>.
+
+ Streamlining the configuration makes it easier for me to propose one
+ set of basic configurations without the need to know what a
+ configuration macro is doing behind the scenes.
+
+- Fixed an example colour in the documentation. Thanks to Russell Sim
+ for spotting the error of me using =bg-blue= instead of
+ =bg-blue-intense=:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3Cyger0wa9gsn.fsf%40simopolis.xyz%3E>.
+
+- Defined the missing =modus-themes-nuanced-{red,green,yellow,blue,magenta,cyan}= faces.
+ Those are used internally to avoid repetition, though users can also
+ rely on them for their personal configurations (same for all other
+ Modus faces).
+
+- Improved the documentation on how to have a borderless mode line
+ style by using the palette overrides.
+
+- Updated the manual's entry on the ~pdf-tools~ backdrop to make it
+ use the new conventions that have been in place since version 4 of
+ the themes. Thanks to Utkarsh Singh for the patches:
+ <https://lists.sr.ht/~protesilaos/modus-themes/patches/37902>.
+
+- Add an explicit notice that the version of the themes that is built
+ into Emacs must use the ~require-theme~ function instead of the
+ familiar ~require~. Built-in themes are not considered "code", due
+ to old conventions, and are not part of the ~load-path~ that
+ ~require~ reads from. This is not up to the theme to decide.
+ Interested users must simply know about this important technicality.
+ Thanks to Koen van Greevenbroek for reporting the problem that
+ helped me identify this issue:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3C31038fd76868fa3d07c9a429dfed8fd6ac374bb8.camel%40posteo.net%3E>.
+
+- Clarified the wording of the ~modus-themes-with-colors~ setup for
+ custom faces. It explains when this macro should be called. Thanks
+ to user bangedorrunt for the feedback in issue 59 on the GitHub
+ mirror: <https://github.com/protesilaos/modus-themes/issues/59>.
+
+* 4.0.0
+:PROPERTIES:
+:CUSTOM_ID: h:cd353ccc-daf5-4ee5-885a-b3f21be92b66
+:END:
+
+This is the biggest release in the history of the project.
+Previously, a new version would consist of about 100 commits to the
+Git repository. This one includes 400+ of them in the span of one
+month. The out-of-the-box looks of the themes are largely the same as
+before, though I have made a lot of internal changes that affect how
+the themes are instantiated and customised.
+
+As part of this development cycle, I produced publications informing
+users of the upcoming changes, while demonstrating the new feature of
+overriding the colour palette and its semantic mappings.
+
+- 2022-12-03 Emacs: breaking changes coming to 'modus-themes' version 4 :: <https://protesilaos.com/codelog/2022-12-03-modus-themes-v4-development/>
+- 2022-12-07 Emacs: change colour values and mappings in Modus themes version 4 :: <https://protesilaos.com/codelog/2022-12-07-modus-themes-4-colour-values-mappings/>
+- 2022-12-17 Emacs: modus-themes version 4 demo [video] :: <https://protesilaos.com/codelog/2022-12-17-modus-themes-v4-demo/>
+- 2022-12-28 Emacs: note for MELPA or Git users of the Modus themes ahead of version 4 :: <https://protesilaos.com/codelog/2022-12-28-note-modus-themes-4-melpa/>
+
+I did this in the hope of preparing users for the refactored Modus
+themes, though I understand that not everyone has had the chance to
+consult those entries. The general idea is that *old custom code will
+not work* and most user options are either removed or confined to a
+more precise scope.
+
+Custom code will not work because the named colours of the palettes
+have changed. Many user options are made redundant by the new
+overrides' system. Specifically, if an option pertains to
+colouration, it is now done via overrides instead of the old method of
+me hardcoding styles (e.g. for stuff like "rainbow" headings).
+
+More details below. This is a long entry. Please take your time to
+study it before upgrading to the new version of the themes.
+
+** There now are six Modus themes for more legibility needs
+:PROPERTIES:
+:CUSTOM_ID: h:f305dd08-a713-4369-a16d-af9403ab6c22
+:END:
+
+Quoting from the manual's "Overview" section:
+
+#+begin_quote
+The Modus themes consist of six themes, divided into three subgroups.
+
+- Main themes :: ~modus-operandi~ is the project's main light theme,
+ while ~modus-vivendi~ is its dark counterpart. These two themes are
+ part of the project since its inception. They are designed to cover
+ a broad range of needs and are, in the opinion of the author, the
+ reference for what a highly legible "default" theme should look
+ like.
+
+- Tinted themes :: ~modus-operandi-tinted~ and ~modus-vivendi-tinted~
+ are variants of the two main themes. They slightly tone down the
+ intensity of the background and provide a bit more color variety.
+ ~modus-operandi-tinted~ has a set of base tones that are shades of
+ light ochre (earthly colors), while ~modus-vivendi-tinted~ gives a
+ night sky impression.
+
+- Deuteranopia themes :: ~modus-operandi-deuteranopia~ and its
+ companion ~modus-vivendi-deuteranopia~ are optimized for users with
+ red-green color deficiency. This means that they do not use red and
+ green hues for color-coding purposes, such as for diff removed and
+ added lines. Instead, they implement colors that are discernible by
+ users with deueteranopia or deuteranomaly (mostly yellow and blue
+ hues).
+#+end_quote
+
+All six themes will be included in Emacs 30 (~modus-operandi~ and
+~modus-vivendi~ are in Emacs since August 2020). I asked about it on
+the emacs-devel mailing list and received the approval of Eli
+Zaretskii, one of the Emacs maintainers. The full thread:
+<https://lists.gnu.org/archive/html/emacs-devel/2022-12/msg00834.html>.
+
+*** New command to select one of the Modus themes
+:PROPERTIES:
+:CUSTOM_ID: h:e4f011c4-46d3-4e4f-ad3e-9a609ef8bd5e
+:END:
+
+The ~modus-themes-select~ command uses minibuffer completion to load
+one of the six themes in the collection. Loading a Modus theme
+disables all other Modus themes.
+
+NOTE that Emacs can load multiple themes, which typically produces
+undesirable results and undoes the work of the designer. Use the
+~disable-theme~ command if you are trying other themes beside the
+Modus collection.
+
+*** New user option to specify themes to toggle
+:PROPERTIES:
+:CUSTOM_ID: h:c4efdaca-505b-4724-81b4-4a5340cbcaba
+:END:
+
+The ~modus-themes-to-toggle~ is a variable that affects the command
+~modus-themes-toggle~. By default, the toggling happens between the
+~modus-operandi~ and ~modus-vivendi~ themes, as was always the case.
+Though with the addition of new themes, it is possible to change this
+to something like:
+
+#+begin_src emacs-lisp
+(setq modus-themes-to-toggle '(modus-operandi-deuteranopia modus-vivendi-deuteranopia))
+#+end_src
+
+If ~modus-themes-to-toggle~ does not specify two Modus themes, the
+~modus-themes-toggle~ command will prompt with completion for a theme
+among the collection (this is practically the same as the aforementioned
+~modus-themes-select~ command).
+
+** Colour palettes and their overrides are much more powerful
+:PROPERTIES:
+:CUSTOM_ID: h:c20673d3-d992-4827-bd24-80329962dc8e
+:END:
+
+In previous versions, there were options to override colour values.
+Those were difficult to use as they (i) required expertise on picking
+the correct values and (ii) it was not clear which colour was used
+where.
+
+The new version broadens the colour palette to include *named colours*
+and *semantic colour mappings*. Named colours are associations
+between a symbol and a colour value, such as =(blue-warmer "#354fcf")=.
+While semantic colour mappings apply those named colours to specific
+constructs such as =(heading-2 yellow-faint)= for all level 2 headings.
+
+What this means is that overrides can now be targeted at semantic
+mappings as well to refashion practically every aspect of the themes.
+The manual provides lots of examples that can be copied and used
+directly. For example, it is possible to change the sequence of
+colours in headings so that, say, there is a colour-coding that
+denotes depth. Links to relevant entries are included in this
+document.
+
+The ~modus-themes-common-palette-overrides~ user option contains
+entries that are shared between all the themes. While there also
+exist theme-specific options such as ~modus-operandi-palette-overrides~.
+
+For technical insight into the palette overrides, consult the manual:
+<https://protesilaos.com/emacs/modus-themes#h:34c7a691-19bb-4037-8d2f-67a07edab150>.
+
+For practical examples check "Stylistic variants using palette
+overrides" and its subsections:
+<https://protesilaos.com/emacs/modus-themes#h:df1199d8-eaba-47db-805d-6b568a577bf3>.
+
+** Preset overrides for faint or intense colouration
+:PROPERTIES:
+:CUSTOM_ID: h:5ba76bb2-9ca8-4202-aca3-31aaca239d94
+:END:
+
+The palette overrides are comprehensive and can be tweaked in a
+detailed way. Still, users may prefer to use the presets for a
+"faint" or "intense" style. These presets showcase the new feature by
+styling elements that were previously not subject to configuration.
+They also provide the convenience of a common set of stylistic
+patterns.
+
+Read the "Palette override presets" section in the manual for how to
+use and/or extend those:
+<https://protesilaos.com/emacs/modus-themes#h:b0bc811c-227e-42ec-bf67-15e1f41eb7bc>.
+
+** Named colours are more meaningful
+:PROPERTIES:
+:CUSTOM_ID: h:94e59644-8ef8-4a46-9666-a241ba04b21a
+:END:
+
+In the past, the variants of the main accent colours were named like:
+
+- =red=
+- =red-alt=
+- =red-alt-other=
+
+The improved naming scheme changes those to:
+
+- =red=
+- =red-warmer=
+- =red-cooler=
+
+Semantically, the "warmer" variants have more yellow or red while the
+"cooler" ones have greater contribution of cyan or blue. As such, the
+user can expect =green-warmer= to be an olive green and =green-cooler=
+to be that of the pine (though olive trees can have blue-green
+colouration and pine trees can be "warmer", but I digress).
+
+Named colours can be previewed with the commands
+~modus-themes-list-colors~ (alias ~modus-themes-preview-colors~) and
+~modus-themes-list-colors-current~ (alias
+~modus-themes-preview-colors-current~).
+
+Those commands accept a =C-u= prefix argument, in which case they show
+the semantic colour mappings.
+
+** Rationalisation of the colour palette
+:PROPERTIES:
+:CUSTOM_ID: h:cb378214-54a1-4b5b-a801-aa206b94ae38
+:END:
+
+In previous versions, there were a lot of named colours that were
+added ad-hoc, such as =fg-special-cold= and =bg-special-calm-faint=.
+There was no clear design pattern behind them, nor was it obvious
+where those colours should be used. Furthermore, there were colours
+that were reserved for the various permutations of user options.
+
+This was too complex for users who wanted/needed to refashion aspects
+of the themes. It was also difficult to maintain.
+
+The new palettes are more streamlined and their application is more
+predictable. This only matters to users who tweak the themes: it
+makes their life easier, although it does render inapplicable any
+previous custom code.
+
+** Deprecation of user options
+:PROPERTIES:
+:CUSTOM_ID: h:fcaa0f80-7e78-44b1-ab04-90acb0046139
+:END:
+
+The following subsections explain the topics in further detail. The
+general idea for this change is that palette overrides provide a more
+powerful, more flexible, and less complex alternative. The code base
+is considerably smaller.
+
+With overrides, I can now provide support to cases such as:
+
+- Users who need different sets of greys as their monitor has
+ inadequate colour reproduction (this is much more common than you
+ think).
+- Users who want to make individual elements stand out, such as to
+ turn the delimiters of Org source blocks (the =#+begin_src= and
+ =#+end_src= lines) into, say, a shade of red.
+- Users who want to tone down the =TODO= and =DONE= keywords while
+ making headings more colourful. Or the inverse, or any combination
+ in-between the extremes.
+- Users who want Org property drawers to be more colourful but inline
+ code to be faint.
+
+You get the idea... All these and many more are now possible.
+Whereas in the past I would either have to tell people that it is not
+possible or hardcode a stylistic alternative via user options, thus
+further complicating the code base.
+
+Catering to all those use-cases is important due to the maximalist
+scope of the Modus themes: I cannot tell people to use another theme,
+because here is where they come for their legibility needs. This is
+consistent with my experience that accessibility is not a
+one-size-fits-all and that the most accessible design is that which is
+flexible, ceteris paribus.
+
+*** ~modus-themes-intense-mouseovers~
+:PROPERTIES:
+:CUSTOM_ID: h:7f4a658a-613b-4ab9-bc05-d9aa6179830b
+:END:
+
+This user option would amplify the background colour of mouse hover
+effects (technically, the ~highlight~ and ~mode-line-highlight~
+faces). It always used a blue colour.
+
+The same effect can now be achieved via overrides, except it is now
+possible to use any background colour or level of intensity that is
+provided by the themes' palette. The manual provides concrete
+examples: <https://protesilaos.com/emacs/modus-themes#h:b5cab69d-d7cb-451c-8ff9-1f545ceb6caf>.
+
+*** ~modus-themes-org-agenda~
+:PROPERTIES:
+:CUSTOM_ID: h:778abb81-4bcb-4a5c-85eb-eec9f417a443
+:END:
+
+This was a complex user option that was hard to test, document, and
+maintain. Most aspects of the Org agenda can be affected via
+overrides, as demonstrated in the manual:
+<https://protesilaos.com/emacs/modus-themes#h:a5af0452-a50f-481d-bf60-d8143f98105f>.
+
+*** ~modus-themes-fringes~
+:PROPERTIES:
+:CUSTOM_ID: h:b1ee38d7-45a0-474b-8c97-774f61462cc6
+:END:
+
+This user option provided two shades of grey and the option for an
+invisible background for the Emacs fringe. The same and better can be
+done via overrides, as shown in the manual:
+<https://protesilaos.com/emacs/modus-themes#h:c312dcac-36b6-4a1f-b1f5-ab1c9abe27b0>.
+
+*** ~modus-themes-lang-checkers~
+:PROPERTIES:
+:CUSTOM_ID: h:ad06917b-a078-48c8-97e8-1182e085a15c
+:END:
+
+This was another complex user option that offered several stylistic
+variants of dubious value. The main problem it had is that linter
+highlights are often applied automatically, so any super intense style
+becomes unusable. Same when a file has lots of warnings/errors.
+
+The semantic colour mappings I provide for this case are limited to
+underlines, which I think is the most usable/legible design. The
+manual provides concrete examples on how to tweak those:
+<https://protesilaos.com/emacs/modus-themes#h:03dbd5af-6bae-475e-85a2-cec189f69598>.
+
+*** ~modus-themes-mode-line~
+:PROPERTIES:
+:CUSTOM_ID: h:1b82b764-97f5-406a-8440-bae415c7d294
+:END:
+
+Yet another very complex user option that I removed in the interest of
+maintainability. All its stylistic permutations (and more) for
+colours are possible via overrides:
+
+- Make the mode line borderless :: <https://protesilaos.com/emacs/modus-themes#h:80ddba52-e188-411f-8cc0-480ebd75befe>
+- Make the active mode line colorful :: <https://protesilaos.com/emacs/modus-themes#h:e8d781be-eefc-4a81-ac4e-5ed156190df7>
+
+It is also possible to add padding to the mode line, though I explain
+why this was always a dirty hack:
+<https://protesilaos.com/emacs/modus-themes#h:5a0c58cc-f97f-429c-be08-927b9fbb0a9c>.
+
+*** ~modus-themes-diffs~
+:PROPERTIES:
+:CUSTOM_ID: h:dd2879a4-37c1-4ded-bc7e-24a217248961
+:END:
+
+I have redesigned all diff-related colours to improve their usability.
+They are less intense than before, but still stand out clearly. I am
+purposefully not documenting how to use overrides here as I want users
+to give this redesign a try. We can always document and refine things
+at a later point.
+
+*** ~modus-themes-subtle-line-numbers~
+:PROPERTIES:
+:CUSTOM_ID: h:bcce1b94-a223-4324-b0a6-940e389819a8
+:END:
+
+This was a simple, but ultimately very limited option. We can do much
+better with overrides because we can tweak every aspect of this
+interface without making the code more complex. The manual shows how
+to do it in style:
+<https://protesilaos.com/emacs/modus-themes#h:b6466f51-cb58-4007-9ebe-53a27af655c7>.
+
+*** ~modus-themes-markup~
+:PROPERTIES:
+:CUSTOM_ID: h:5eedfd24-9480-4b76-8b64-e625d3220a8d
+:END:
+
+This was a poorly named user option that only affected inline code
+elements in prose. The new semantic colour mappings provide more
+points of entry and thus make it easier to tweak things to one's
+liking (including tables, property drawers, source block delimiters
+(the =#+begin_src= and =#+end_src= lines)), and more. The manual
+shows how:
+<https://protesilaos.com/emacs/modus-themes#h:bb5b396f-5532-4d52-ab13-149ca24854f1>.
+
+*** ~modus-themes-paren-match~
+:PROPERTIES:
+:CUSTOM_ID: h:8dbe54c3-5bfc-424c-8952-f68015f6c6c4
+:END:
+
+The colouration of matching parentheses of the ~show-paren-mode~ can
+still be affected via overrides:
+<https://protesilaos.com/emacs/modus-themes#h:259cf8f5-48ec-4b13-8a69-5d6387094468>.
+
+*** ~modus-themes-syntax~
+:PROPERTIES:
+:CUSTOM_ID: h:22910131-87bf-4c03-bbf4-aac3010b570a
+:END:
+
+This was a user option that controlled the colouration of programming
+modes. We can reproduce it with overrides, except we now also have
+the freedom to adapt things further:
+
+- Make comments yellow and strings green :: <https://protesilaos.com/emacs/modus-themes#h:26f53daa-0065-48dc-88ab-6a718d16cd95>
+- Make code syntax use the old alt-syntax style :: <https://protesilaos.com/emacs/modus-themes#h:c8767172-bf11-4c96-81dc-e736c464fc9c>
+- Make use of alternative styles for code syntax :: <https://protesilaos.com/emacs/modus-themes#h:943063da-7b27-4ba4-9afe-f8fe77652fd1>
+
+*** ~modus-themes-links~
+:PROPERTIES:
+:CUSTOM_ID: h:68d41ee9-d277-45f9-a6cd-543dac9282c8
+:END:
+
+The colouration of links can now be affected via palette overrides, as
+documented in the manual:
+<https://protesilaos.com/emacs/modus-themes#h:6c1d1dea-5cbf-4d92-b7bb-570a7a23ffe9>.
+
+*** ~modus-themes-region~
+:PROPERTIES:
+:CUSTOM_ID: h:b97b78df-9ed9-4173-8de2-303851231e06
+:END:
+
+Overrides can be used to affect the region's colouration and/or to
+prevent the active region highlight from changing the underlying text
+colour. As always, the manual covers the details:
+<https://protesilaos.com/emacs/modus-themes#h:c8605d37-66e1-42aa-986e-d7514c3af6fe>.
+
+*** ~modus-themes-deuteranopia~
+:PROPERTIES:
+:CUSTOM_ID: h:e5fee2a1-2ace-4b4b-9aea-554d2b4a7c2d
+:END:
+
+Instead of this rather limited option, users are advised to use the
+new bespoke themes: ~modus-operandi-deuteranopia~ and
+~modus-vivendi-deuteranopia~. They are designed to cater to the needs
+of people with red-green colour deficiency.
+
+*** ~modus-themes-mail-citations~
+:PROPERTIES:
+:CUSTOM_ID: h:bb8a81c5-d0c1-4150-bf7a-254d1684d95e
+:END:
+
+All parts of an email composition buffer (per the standard
+=message.el= library) are configurable via palette overrides. Not
+just citation lines, but also message headers. The manual shows
+several stylistic alternatives:
+<https://protesilaos.com/emacs/modus-themes#h:7da7a4ad-5d3a-4f11-9796-5a1abed0f0c4>.
+
+Note that apart from this change, I also redesigned several faces that
+affect emails. This was done in the interest of consistency and to
+avoid some exaggerations.
+
+*** ~modus-themes-tabs-accented~
+:PROPERTIES:
+:CUSTOM_ID: h:1574b5bc-d615-4053-9bbf-79396745519b
+:END:
+
+I do not provide documentation on how to reproduce this style because
+I think it was not widely used. It is possible to do it with
+overrides. If anyone needs it, they are invited to contact me about
+it.
+
+*** ~modus-themes-box-buttons~
+:PROPERTIES:
+:CUSTOM_ID: h:19c81a75-a65e-49cb-83e5-c44167821865
+:END:
+
+All "graphical" buttons use a proportionately spaced font
+(~variable-pitch~) by default as it helps with legibility. The
+colours of those buttons can be changed by overriding the relevant
+entries:
+<https://protesilaos.com/emacs/modus-themes#h:4f6b6ca3-f5bb-4830-8312-baa232305360>.
+
+[ Use my ~fontaine~ package to affect fonts via faces and to apply
+ presets for various contexts. ]
+
+** Changes to remaining user options
+:PROPERTIES:
+:CUSTOM_ID: h:c93db0f4-1032-411a-881e-0c5fd23480cf
+:END:
+
+*** The ~modus-themes-headings~ also affects the Org agenda
+:PROPERTIES:
+:CUSTOM_ID: h:c2f088b6-dc84-4285-9ece-c877be6b274f
+:END:
+
+This user option applies to heading level 0 through 8 and also to the
+agenda date and structure constructs. Here is a complete example:
+
+#+begin_src emacs-lisp
+(setq modus-themes-headings ; read the manual's entry of the doc string
+ '((0 . (variable-pitch light 1.9))
+ (1 . (variable-pitch light 1.8))
+ (2 . (variable-pitch regular 1.7))
+ (3 . (variable-pitch regular 1.6))
+ (4 . (variable-pitch regular 1.5))
+ (5 . (variable-pitch 1.4)) ; absence of weight means `bold'
+ (6 . (variable-pitch 1.3))
+ (7 . (variable-pitch 1.2))
+ (agenda-date . (semilight 1.5))
+ (agenda-structure . (variable-pitch light 1.9))
+ (t . (variable-pitch 1.1))))
+#+end_src
+
+*** The ~modus-themes-headings~ no longer affects colours
+:PROPERTIES:
+:CUSTOM_ID: h:bb0bac60-ad22-4699-9579-881431972294
+:END:
+
+All colour-related changes can be done via palette overrides. This
+gives the user maximum flexibility on the choice of applied colours
+(e.g. to have alternating contrasting foregrounds or shades of the
+same hue). The manual shows several examples:
+<https://protesilaos.com/emacs/modus-themes#h:11297984-85ea-4678-abe9-a73aeab4676a>.
+
+*** The ~modus-themes-completions~ is simpler
+:PROPERTIES:
+:CUSTOM_ID: h:0b29c525-7def-4149-a26b-70ca5e021a27
+:END:
+
+It no longer covers =popup= entries as distinct from =selection=.
+This is because I revised all the applicable colours and faces to
+consolidate styles.
+
+The =matches= and =selection= keys now read the same list of values.
+
+All changes to colours are done through palette overrides, as
+demonstrated in the manual (again, far more flexible):
+<https://protesilaos.com/emacs/modus-themes#h:d959f789-0517-4636-8780-18123f936f91>.
+
+*** The ~modus-themes-prompts~ is simpler
+:PROPERTIES:
+:CUSTOM_ID: h:7e5b9fea-b696-4e8a-bebe-a7fbb0eb460a
+:END:
+
+This user option now only affects the typographic features of prompts.
+It can read any font weight, as explained in its documentation.
+Colours are influenced by semantic colour mappings in the palette and
+can be overridden accordingly. The manual shows several styles:
+<https://protesilaos.com/emacs/modus-themes#h:bd75b43a-0bf1-45e7-b8b4-20944ca8b7f8>.
+
+*** Auto-reload theme when configuring via Custom
+:PROPERTIES:
+:CUSTOM_ID: h:b26a2a1f-ee1e-4001-a3d0-4d4d7cb4fd5f
+:END:
+
+The user option ~modus-themes-custom-auto-reload~ supersedes the old
+~modus-themes-inhibit-reload~. It is now set to a non-~nil~ value by
+default.
+
+We do this as a convenience for users who tweak theme settings via the
+Custom UI and who do not know that all modifications to user options
+require a theme re-load for changes to take effect. Read more in the
+manual:
+<https://protesilaos.com/emacs/modus-themes#h:9001527a-4e2c-43e0-98e8-3ef72d770639>.
+
+** Deprecation of public functions
+:PROPERTIES:
+:CUSTOM_ID: h:8167bf46-7a43-4b46-b2ed-a66e5d73bb96
+:END:
+
+The ~modus-themes-color~ and ~modus-themes-color-alts~ are deprecated.
+Users are invited to concentrate on the ~modus-themes-with-colors~
+macro. The manual provides several examples on that front.
+
+The ~modus-themes-load-themes~ is no longer necessary due to the
+refactoring of the code base.
+
+The ~modus-themes-load-operandi~ and ~modus-themes-load-vivendi~ are
+superseded by the general ~modus-themes-load-theme~. It accepts the
+symbol of a Modus theme as its argument.
+
+The command ~modus-themes-report-bug~ is no more. Just send an email
+to the mailing list or to me privately. Find the information with
+=M-x describe-package= and then specify =modus-themes=.
+Alternatively, check my website: <https://protesilaos.com/contact>.
+
+** Removed support for some packages
+:PROPERTIES:
+:CUSTOM_ID: h:34ffc5ed-574d-44f1-8a27-c2e6bb8c69e0
+:END:
+
+These are the most notable packages that are no longer supported:
+
+- ~dired+~
+- ~lsp-mode~
+- ~helm~
+- ~treemacs~
+
+The reason is that they are very hard to use for me as an outsider.
+They provide lots of features, which means that I cannot easily
+identify faces in their context unless I become an expert in the
+relevant functionality.
+
+Other removed packages:
+
+- ~artbollocks-mode~. Use ~writegood-mode~.
+- ~apropos~. Its default faces are fine.
+- ~awesome-tray~.
+- ~bbdb~ and ~ebdb~. They are hard to set up, but their faces are
+ usable.
+- ~calfw~. Hard to set up and also seems to no longer be maintained.
+- ~easy-jekyll~
+- ~dir-treeview~
+- ~eros~
+- ~eshell-git-prompt~
+- ~eshell-prompt-extras~
+- ~eshell-syntax-highlighting~
+- ~evil-goggles~
+- ~evil-snipe~
+- ~evil-visual-mark-mode~
+- ~fountain-mode~. I need someone who uses it to help me test it.
+- ~macrostep~
+- ~mentor~
+- ~mini-modeline~
+- ~mmm-mode~. I need someone who uses it to help me test it.
+- ~org-table-sticky-header~.
+- ~phi-grep~
+- ~pomidor~
+- ~rainbow-blocks~. Use Adam Porter's (aka alphapapa) =prism.el=.
+- ~semantic~
+- ~smartparens~
+- ~spaceline~
+- ~sx~
+- ~telephone-line~
+- ~tomatinho~
+- ~winum~
+- ~xterm-color~.
+
+** Thanks for their feedback on the development of version 4
+:PROPERTIES:
+:CUSTOM_ID: h:bdaa3eaf-67e8-4de8-b8d5-7b11fa28dbcd
+:END:
+
+In alphabetical order:
+
+- Aleksei Pirogov :: Noticed that there were no semantic colour
+ mappings for the ~rainbow-delimiters~ (and related), thus reminding
+ me to make the requisite arrangements. Aleksei also spotted a
+ regression during the development of the "faint" overrides' preset.
+ These were done on the GitHub mirror:
+
+ - <https://github.com/protesilaos/modus-themes/issues/54>
+ - <https://github.com/protesilaos/modus-themes/issues/55>
+
+- Anders Johansson :: Pointed out some irregularities with the use of
+ ~make-obsolete~ in the =version-4= development branch. I should be
+ using ~make-obsolete-variable~ in some cases:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3CCAKJdtO-dzvR%3D2BaSd5qPzwDE%3D%2BaJSR6js7ii1O6KD7oFOB7gDw%40mail.gmail.com%3E>
+
+- Charlotte Van Petegem :: Reminded me to document how to reproduce
+ the old "alt-syntax" style by using palette overrides:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3C877cy917jw.fsf%40vanpetegem.me%3E>
+
+- Christian Tietze :: Spotted a bug in how shared palette overrides
+ would not be read in certain scenaria. Also suggested tweaks to the
+ documentation, which reminded me of tasks that still had to be done:
+
+ - <https://lists.sr.ht/~protesilaos/modus-themes/%3Cm1cz81rq9m.fsf%40christiantietze.de%3E>
+ - <https://lists.sr.ht/~protesilaos/modus-themes/%3Cm1fscxrr0s.fsf%40christiantietze.de%3E>
+ - <https://lists.sr.ht/~protesilaos/modus-themes/%3Cm1ilhtrs09.fsf%40christiantietze.de%3E>
+
+- Daniel Mendler (aka @minad on GitHub) :: Contacted me to comment on
+ the general redesign. From the discussion I learnt that preset
+ overrides would be useful. This information is shared with
+ permission, as it was done via a private channel.
+
+- James Ferguson :: Commented on the colours of the tab-bar and thus
+ inspired me to define relevant semantic colour mappings:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3CCAMtGdSnrKDGdagT7vGC9DnBZnOvkbM%3D4Nxwn3ts2tdO8YmUnxw%40mail.gmail.com%3E>
+
+- Philip Kaludercic :: Opined that the ~modus-themes-inhibit-reload~
+ should not be deprecated in the interest of usability. As noted
+ above, its functionality is preserved and now enabled by default in
+ ~modus-themes-custom-auto-reload~. Through the discussion we also
+ arrived at the concept of shared palette overrides instead of only
+ having theme-specific ones:
+
+ - <https://lists.sr.ht/~protesilaos/modus-themes/%3C87h6y3gyxx.fsf%40posteo.net%3E>
+ - <https://lists.sr.ht/~protesilaos/modus-themes/%3C87wn6qgjkx.fsf%40posteo.net%3E>
+
+- Tony Zorman :: Noted that there was no clear upgrade path to
+ version 4. This helped me explain some of the technicalities of
+ packaging and of the themes' redesign, but also to update the
+ manual:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3C874jtew0gp.fsf%40hyperspace%3E>.
+
+- a1ks :: Reported a bug caused by the typo of an extra backtick.
+ This was done on the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/issues/53>.
+
+- soaringbind :: Identified some omissions in the code where I forgot
+ to update certain Avy and Org faces. This continued in a second
+ thread about the use of some obsolete faces:
+
+ - <https://lists.sr.ht/~protesilaos/modus-themes/%3CNKXY2k1--3-9%40tuta.io%3E>
+ - <https://lists.sr.ht/~protesilaos/modus-themes/%3CNKd3jM_--3-9%40tuta.io%3E>
+
+- tumashu :: Experimented with the overrides and thus helped me
+ identify an area where the documentation could be improved. This
+ was done on the GitHub mirror:
+
+ - <https://github.com/protesilaos/modus-themes/issues/56>
+ - <https://github.com/protesilaos/modus-themes/issues/57>
+
+- wakamenod :: Encountered a bug that was caused by a mistake of mine
+ that affected how themes are instantiated. This was done on the
+ GitHub mirror: <https://github.com/protesilaos/modus-themes/issues/50>.
+
+** The largest release to date
+:PROPERTIES:
+:CUSTOM_ID: h:54a6bcd1-6ba0-42ed-8fdd-b83ee3efee73
+:END:
+
+There are many more changes that I did not describe. This already
+lengthy document is me covering just the headline features. The gist
+is that I spent the last month refactoring and testing the themes to
+ensure they can cope with the needs of users for years to come.
+
+I understand that the palette overrides are a new way of doing things
+and that some users may be inconvenienced over the short-term as they
+update their configurations. I strongly believe that this system is
+better and the Modus themes can now cover all the legibility needs of
+users, while also catering to their aesthetic preferences.
+
++ Package name (GNU ELPA): ~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>
++ 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>
++ Backronym: My Old Display Unexpectedly Sharpened ... themes
+
+* 3.0.0
+:PROPERTIES:
+:CUSTOM_ID: h:6829db8d-52c5-43a8-a026-f213dcfaced9
+:END:
+
+#+begin_src text
+Modus themes version 3.0.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2022-10-28
+
+
+The version that will ship with Emacs 29
+========================================
+
+The 'modus-operandi' and 'modus-vivendi' themes (package name is
+'modus-themes') have been a part of Emacs since August 2020. Emacs 28
+ships with version 1.6.0 of the themes. Emacs 29 will include version
+3.0.0.
+
+There is no clean upgrade path from the old version of the themes to
+the current one. Users are advised to review their configurations and
+consult with the detailed manual of the themes.
+
+I am available to answer any questions, either via my personal email
+or on the official sources of the themes. Find the full list here:
+<https://protesilaos.com/emacs>.
+
+
+Minor breaking changes
+======================
+
+I have changed the default value of the following user options:
+
+1. 'modus-themes-hl-line'
+2. 'modus-themes-completions'
+3. 'modus-themes-fringes'
+
+In the case of the first two, the background of the highlighted line
+is made to look a bit more intense.
+
+For the fringes, this tweak makes them visible, using a subtle grey
+colour. By default, "fringe" is an 8-pixel-wide area to the left and
+right side of an Emacs window.
+
+The intent of these changes is to make the out-of-the-box experience
+consistent with the accessibility considerations of the Modus themes.
+Specifically because some users may not realise that the themes are
+highly customisable.
+
+To revert to the old defaults, users must include this (or equivalent)
+in their init file:
+
+ (setq modus-themes-completions nil
+ modus-themes-hl-line nil
+ modus-themes-fringes nil)
+
+As always, changes to theme user options take effect upon a reload of
+the theme.
+
+This was announced on my website:
+<https://protesilaos.com/codelog/2022-10-23-breaking-modus-themes-3-0-0-notice/>.
+
+
+Support for new faces or changes to existing ones
+=================================================
+
+,* Refined the 'telega' faces for inline code and preformatted
+ elements. The faces are 'telega-entity-type-code' and
+ 'telega-entity-type-pre', respectively. This change makes them
+ subject to the style specified in the user option
+ 'modus-themes-markup'.
+
+ Thanks to Pablo Stafforini for showing me screenshots of how they
+ look, as I am not a telega/telegram user and cannot do this myself.
+ Done as part of issue 170 on the GitLab mirror:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/170#note_1143975582>.
+
+,* Removed all attributes from the 'textsec-suspicious' face. By
+ default, it applies a background, but does not affect the
+ foreground. The result is thus inaccessible in many cases
+ (e.g. blue links against a red background). There is no need for
+ such a background though, as the warnings are accompanied by the
+ relevant emoji: ⚠️.
+
+ To support this face, we need it to affect the foreground as well.
+
+,* Deleted some 'consult' "preview" faces in the interest of
+ consistency. This is to match the current style of the project:
+ <https://github.com/minad/consult/commit/1343e39fefcf8a28a7a415aa4b0a8ff7094370bf>.
+
+,* Expanded support of the built-in 'diff-mode' faces to include the
+ 'diff-changed-unspecified'. It is made to look the same as
+ 'diff-changed', i.e. yellow-tinted. There is a good chance that a
+ user will never see this face in action (I only encountered it
+ once).
+
+,* Reworked all the 'highlight-regexp' faces (like 'hi-yellow') to use
+ bespoke colour values.
+
+ These faces need to have a background that is consistent with their
+ semantics. Furthermore, they need to use the 'inverse-video'
+ attribute which, in turn, affects the combinations of colour we can
+ apply. Our accented backgrounds are designed to contrast well with
+ our nominal main foreground values, whereas this case demands
+ coloured backgrounds that contrast nicely with what would normally
+ be the main background colour. As such, we cannot apply our
+ ordinary entries from each theme's palette. It would be inefficient
+ to expand the palette of each theme just for this edge case.
+
+ Thanks to Kevin Kainan Li for the feedback on the mailing list, where
+ they informed me that the previous design was too dark/mute (and I
+ agreed with that assessment) and provided feedback on my samples:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3CCAMTq2Vp3Nnzv-i9wJdq4-OJ4X_QfWXySpUtAieBy0dgKLEOSBg%40mail.gmail.com%3E>.
+
+,* Recoloured the 'modus-themes-completion-match-1' to use a shade of
+ blue instead of cyan. This contributes to the distinctiveness of
+ those matches relative to 'modus-themes-completion-match-0' and the
+ other groups. These faces are used in completion User Interfaces,
+ such as 'vertico', 'corfu', 'orderless'. They are subject to the
+ user option 'modus-themes-completions'.
+
+,* Added support for the 'olivetti-fringe' face. Its background is the
+ same as the main background, meaning that the fringes are invisible
+ when 'olivetti-mode' is enabled. Thanks to Matthias Fuchs for
+ producing a report that helped me track this problem. It was done
+ in issue 46 on the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/issues/46>.
+
+
+Miscellaneous
+=============
+
+,* Added the new Emacs 29 theme properties to 'modus-operandi' and
+ 'modus-vivendi'. These make the themes work with the new built-in
+ command 'toggle-theme'. Thanks to Philip Kaludercic for the patch
+ and for the work on this in emacs.git:
+ <https://lists.gnu.org/archive/html/bug-gnu-emacs/2022-10/msg00886.html>.
+
+,* Refrained from deprecating the 'modus-themes-toggle' command in
+ favour of the new generic 'toggle-theme'.
+
+ The 'toggle-theme' is not functionally equivalent to the command
+ 'modus-themes-toggle' due to the optional arguments it accepts.
+ With 'toggle-theme' we are prompted to confirm loading the theme,
+ due to how unsafe themes can be... Further, we are asked to add the
+ loaded theme to the list of "safe" themes. This only applies to the
+ packaged version of the 'modus-themes', not the items that are built
+ into Emacs.
+
+ These prompts are consistent with how 'load-theme' works, but not
+ with what the user of 'modus-themes-toggle' has come to expect.
+
+ Users who do not like to maintain a 'custom-file' (like me) are thus
+ penalised each time they invoke the command.
+
+ The 'modus-themes-toggle' will only be deprecated if there is, say,
+ a user option in Emacs that disables those prompts each time a theme
+ is loaded. Basically, we need an arrangement that just toggles
+ themes without questions.
+
+ Thanks to Rudolf Adamkovič for suggesting the idea and to Philip
+ Kaludercic for the 'toggle-theme' (and related functionality):
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3C877d116lh4.fsf%40posteo.net%3E#%3Cm2lepgrd8l.fsf@me.com%3E>.
+
+,* Corrected the one-line description of the 'modus-vivendi' theme,
+ which was describing itself as a "light" theme.
+
+,* Ensured that the manual and all doc strings in the code use American
+ English, per the convention of emacs.git (my CHANGELOG still uses
+ what I prefer). Thanks to Stefan Kangas for contributing to this
+ effort with a patch that properly renders 'non-nil' in the texinfo
+ output as 'non-@code{nil}'.
+
+,* Made other minor tweaks and refinements.
+#+end_src
+
+* 2.7.0
+:PROPERTIES:
+:CUSTOM_ID: h:4d86106c-1df5-4f5f-bc6c-f14f5d13403b
+:END:
+
+#+begin_src text
+Modus themes version 2.7.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2022-10-01
+
+
+Support for packages or faces
+=============================
+
+,* Reinstated support for 'centaur-tabs'. I had removed it in commit
+ 2235ce5 (done on 2022-08-02) for version 2.5.0 of the modus-themes.
+ At the time I wrote:
+
+ centaur-tabs has a bug where it cannot read the value of a face if it
+ uses the standard ':inherit' attribute. I have sent a patch to fix it,
+ but have received no response since February:
+ <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>
+
+ I am happy to reinstate support for centaur-tabs as soon as the package
+ gets the maintenance it needs.
+
+ My patch/pull-request is now merged and the package is actively
+ maintained once again. Hence the decision to bring back support for
+ it, as promised.
+
+,* Applied styles for the 'icon-button' face of Emacs 29.
+
+
+,* Styled the 'log-edit-headers-separator' face of Emacs 29 (it was
+ introduced upstream by a patch of mine).
+
+,* Made the 'gnus-summary-low-unread' face inherit from the 'italic'
+ face like the rest of that subgroup of faces. This helps
+ differentiate it from the 'gnus-summary-high-unread' face. Thanks
+ to Mark Simpson for pointing out the possibility of conflating those
+ two faces: <https://lists.sr.ht/~protesilaos/modus-themes/%3Cm2r0zszc2z.fsf@gmail.com%3E>.
+
+,* Covered the 'read-multiple-choice-face' by adding a noticeable
+ background colour to it. The default attributes it has, which look
+ like other key bindings (bold and blue) plus an underline are
+ technically okay, though the context of this face is in the echo
+ area which is one line tall. Moreover, the highlighted keys are
+ inlined with other text. These make it difficult to spot the
+ highlights without some extra spacing. I use the addition of a
+ background in Org's export dispatcher interface which also has some
+ unique requirements (the 'org-dispatcher-highlight' face). The
+ principle is to have theme-wide consistency (e.g. "all key bindings
+ must look the same") EXCEPT when the specifics require a different
+ set of styles in the interest of usability.
+
+,* Extended the coverage of the 'auctex' package's faces to include the
+ 'font-latex-underline-face'. Thanks to Luis Miguel Castañeda for
+ reporting a typo I made which caused an error:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3C7h7d2oudpb.fsf@imaginarymagnitude.net%3E>
+
+,* Added support for 'crontab-mode'. Thanks to Antonio Ruiz for the
+ patch: <https://lists.sr.ht/~protesilaos/modus-themes/patches/35080>. It
+ is below the ~15 line threshold and thus requires no copyright
+ assignment to the Free Software Foundation.
+
+,* Extended support for the 'company' package's 'company-scrollbar-bg'
+ and 'company-scrollbar-fg' faces.
+
+,* Added support for the 'spell-fu' package. Thanks to Antonio Ruiz
+ for the patch: <https://lists.sr.ht/~protesilaos/modus-themes/%3C87fshnq7uv.fsf%40purelymail.com%3E>.
+ Same as further above for Antonio's copyright status.
+
+,* Moved the 'selectrum-prescient' faces to the 'prescient' group, to
+ be consistent with changes in the respective upstream packages.
+ Thanks to okamsn for the contribution, which was done in pull
+ request 41 on the GitHub mirror: <https://github.com/protesilaos/modus-themes/pull/41>.
+ The user okamsn has assigned copyright assignment to the Free
+ Software Foundation, although this patch is within the allowed
+ limits.
+
+
+Change to 'fill-column-indicator'
+=================================
+
+Made the 'fill-column-indicator' face more noticeable. It is what the
+'display-fill-column-indicator-mode' uses to draw a line on where the
+'fill-column' is.
+
+This change is in response to private messages I received as well as
+this, at parts impolite and toxic, thread that I refrained from
+participating in:
+<https://lists.gnu.org/archive/html/help-gnu-emacs/2022-08/msg00255.html>.
+
+[ I do not follow that mailing list, by the way. All my projects have
+ multiple communication channels and I always reply in a timely
+ fashion. Social media, fora about Emacs, generic mailing lists,
+ etc. are not among those channels.
+ <https://protesilaos.com/codelog/2022-07-24-report-issues-official-channels/>. ]
+
+The core idea is that the previous design was (1) considered
+"invisible" and (2) it prevented the customisation of the user option
+'display-fill-column-indicator-character'.
+
+I am addressing point 1, but point 2 puts us in an awkward spot as we
+would then not be allowed to use a background and a height value. Not
+doing so produces a dashed line by default, with the dashes further
+apart the greater the line-spacing is (especially in, say, Org
+headings that can have a greater height than paragraph text). It
+looks broken and I keep getting requests to fix what is not the
+themes' fault. So no, the themes will remain opinionated in this
+regard by ignoring 'display-fill-column-indicator-character' through
+the styling they apply to make the line contiguous.
+
+For context, also read Emacs bug#57424 and please don't take my words
+in a private message out of context. If I need to state my opinion in
+a public setting, I know how to do it.
+<https://debbugs.gnu.org/cgi/bugreport.cgi?bug=57424>.
+
+
+Refinement to modus-vivendi 'bg-diff-focus-removed' colour
+==========================================================
+
+Made the default removed diff background slightly more luminant. The
+colour is seen in diff-mode, ediff, and the Magit focused diff hunk.
+
+When the user option 'modus-themes-diffs' is set to either 'bg-only' or
+'desaturated', this colour is used to highlight word-wise ("refined")
+changes. The increased luminance lets it stand out more compared to the
+more subtle backdrop.
+
+Thanks to Kévin Le Gouguec for bringing this issue to my attention and
+for discussing it with me:
+<https://lists.sr.ht/~protesilaos/modus-themes/%3C87bks4i9tg.fsf@gmail.com%3E>
+
+
+Note about 'goto-address-mode'
+==============================
+
+Quote from the manual:
+
+ The built-in 'goto-address-mode' uses heuristics to identify URLs and
+ email addresses in the current buffer. It then applies a face to them
+ to change their style. Some packages, such as 'notmuch', use this
+ minor-mode automatically.
+
+ The faces are not declared with 'defface', meaning that it is better
+ that the theme does not modify them. The user is thus encouraged to
+ consider including (or equivalent) this in their setup:
+
+ (setq goto-address-url-face 'link
+ goto-address-url-mouse-face 'highlight
+ goto-address-mail-face 'link
+ goto-address-mail-mouse-face 'highlight)
+
+ My personal preference is to set 'goto-address-mail-face' to nil, as
+ it otherwise adds too much visual noise to the buffer (email addresses
+ stand out more, due to the use of the uncommon '@' character but also
+ because they are often enclosed in angled brackets).
+
+
+Changes to the manual
+=====================
+
+,* Fixed a few typos and ensured that spelling using American English
+ as that is what emacs.git requires.
+
+,* Added the missing ':config' keywords from the example configuration
+ of the 'circadian' package. Thanks to Koen van Greevenbroek for the
+ patch: <https://lists.sr.ht/~protesilaos/modus-themes/%3C8735cb6zm3.fsf%40posteo.net%3E>.
+#+end_src
+
+* 2.6.0
+:PROPERTIES:
+:CUSTOM_ID: h:fc108f65-3e0b-4e28-8030-86c797cb2b25
+:END:
+
+#+begin_src text
+Modus themes version 2.6.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2022-08-19
+
+
+Changes to supported faces or face groups
+=========================================
+
+,* Made the 'font-lock-warning-face' adapt to comments. This changes the
+ face from a yellow to a red hue when the user adds a value to
+ 'modus-themes-syntax' which includes 'yellow-comments' property.
+ Before, this face was indistinguishable from yellow comments due to a
+ regression in version 2.5.0 of the themes. Thanks to Augusto Stoffel
+ and Manuel Uberti for their feedback on the mailing list:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3C87r11k1c22.fsf%40gmail.com%3E>.
+
+,* Applied a consistent foreground color (a not-so-intense yellow hue) to
+ the 'org-checkbox' and 'markdown-gfm-checkbox-face'. The change comes
+ from the discussion on the mailing list where it became apparent that
+ a bit of colour is needed for such constructs:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3Cm2fsi9cja4.fsf%40me.com%3E>.
+
+ Thanks to Rudolf Adamkovič, Christian Tietze, and Karthik Chikmagalur
+ for their participation.
+
+,* Added support for the 'mu4e-related-face'. Thanks to Simon Pugnet for
+ the feedback on the mailing list:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3C87edxhvqwp.fsf@polaris64.net%3E>.
+
+,* Included support for the 'consult-preview-insertion' face. There are
+ two reasons for adding this:
+
+ 1. It decouples it from the 'region' face, which means that the user
+ option 'modus-themes-region' no longer has an unintended effect on
+ it.
+
+ 2. It makes it look consistent with the 'rectangle-preview' face (see
+ it in action with C-x SPC, move point down a few lines, type C-t
+ and then insert some text). I feel these sort of previews need to
+ look the same, though I don't have a strong attachment to the style
+ now in use.
+
+
+Removed support for the 'solaire' package
+=========================================
+
+The 'solaire-mode' package dims the background of what it considers
+ancillary "UI" buffers, such as the minibuffer and Dired buffers. The
+Modus themes used to support Solaire on the premise that the user was
+(i) opting in to it, (ii) understood why certain buffers were more gray,
+and (iii) knew what other adjustments had to be made to prevent broken
+visuals (e.g. the default style of the 'modus-themes-completions' uses a
+subtle gray background for the selection, which with Solaire becomes
+practically invisible).
+
+However, the assumption that users opt in to this feature does not
+always hold true. There are cases where it is enabled by default such
+as in the popular Doom Emacs configuration. Thus, the unsuspecting user
+who loads 'modus-operandi' or 'modus-vivendi' without the requisite
+customizations is getting a sub-par experience; an experience that we
+did not intend and cannot genuinely fix.
+
+[ Relevant reading about "The case of git-gutter, the modus-themes, and
+ Doom Emacs":
+ <https://protesilaos.com/codelog/2022-08-04-doom-git-gutter-modus-themes/> ]
+
+Because the Modus themes are meant to work everywhere, we cannot make an
+exception for Doom Emacs and/or Solaire users. Furthermore, we shall
+not introduce hacks, such as by adding a check in all relevant faces to
+be adjusted based on Solaire or whatever other package. Hacks of this
+sort are unsustainable and penalize the entire userbase. Besides, the
+themes are built into Emacs and we must keep their standard high.
+
+The fundamental constraint with Solaire is that Emacs does not have a
+real distinction between "content" and "UI" buffers. For themes to work
+with Solaire, they need to be designed around that package. Such is an
+arrangement that compromises on our accessibility standards and/or
+hinders our efforts to provide the best possible experience while using
+the Modus themes.
+
+As such, 'solaire-mode' is not---and will not be---supported by the
+Modus themes (or any other of my themes, for that matter). Users who
+want it must style the faces manually. Below is some sample code, based
+on what we cover at length in the manual:
+
+ (defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ `(solaire-default-face ((,class :inherit default :background ,bg-alt :foreground ,fg-dim)))
+ `(solaire-line-number-face ((,class :inherit solaire-default-face :foreground ,fg-unfocused)))
+ `(solaire-hl-line-face ((,class :background ,bg-active)))
+ `(solaire-org-hide-face ((,class :background ,bg-alt :foreground ,bg-alt))))))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+
+
+Changes to the manual
+=====================
+
+,* Added a missing parenthesis to a sample code block. Thanks to Paul
+ David for the contribution in pull request 39 on the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/pull/39>.
+
+,* Clarified the wording of individual statements pertaining to the need
+ of reloading a theme for changes to user options to become effective.
+#+end_src
+
+* 2.5.0
+:PROPERTIES:
+:CUSTOM_ID: h:32438044-6eee-4909-8e5a-860ce1457049
+:END:
+
+#+begin_src text
+Modus themes version 2.5.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2022-08-03
+
+This entry documents the changes made to the project since the
+publication of version 2.4.0 on 2022-06-01. It spans more than 60
+commits to an already stable project.
+
+The 'modus-operandi' and 'modus-vivendi' themes are built into Emacs-28
+(latest 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> (the website only
+documents the latest version).
+
+
+Enhancement to the user option 'modus-themes-headings'
+======================================================
+
+The user option 'modus-themes-headings' now reads a level 0 heading in
+addition to numbers 1--8. Heading 0 accepts the same list of properties
+as all other levels (please consult the doc string of the user option or
+the corresponding entry in the manual). Currently only the value of the
+Org #+title is affected (face is 'org-document-title'), but we may cover
+more faces if needed.
+
+Sample configuration:
+
+ ;; The `modus-themes-headings' is an alist with lots of possible
+ ;; combinations, including per-heading-level tweaks: read the
+ ;; manual or its doc string.
+ (setq modus-themes-headings
+ '((0 . (variable-pitch light (height 2.2)))
+ (1 . (rainbow variable-pitch light (height 1.6)))
+ (2 . (rainbow variable-pitch light (height 1.4)))
+ (3 . (rainbow variable-pitch regular (height 1.3)))
+ (4 . (rainbow regular (height 1.2)))
+ (5 . (rainbow (height 1.1)))
+ (t . (variable-pitch extrabold)))
+
+Given this change, I am also tweaking the default foreground value of
+the 'org-document-title'. It is a bit more saturated than before, but
+remains close to the spirit of the previous one.
+
+Thanks to Rudolf Adamkovič for proposing the idea on the mailing list:
+<https://lists.sr.ht/~protesilaos/modus-themes/%3Cm2y1x5tewl.fsf@me.com%3E>.
+
+
+Stylistic tweak to the user option 'modus-themes-syntax'
+========================================================
+
+Prevented the 'alt-syntax' property from desaturating the effect of the
+'yellow-comments' property when the two would be combined. Such as:
+
+ (setq modus-themes-syntax '(alt-syntax yellow-comments))
+
+The previous design was incorrect because it was always using the faint
+variant of the yellow comments, as if the user had specified:
+
+ (setq modus-themes-syntax '(alt-syntax faint yellow-comments))
+
+[ Read the doc string of 'modus-themes-syntax' or the manual for an
+ explanation of all properties and their combinations. ]
+
+
+Review of the Isearch (and related) colours
+===========================================
+
+Emacs' standard search has a face for the currently matched query and
+all its inactive matches. The faces are 'isearch' and 'lazy-highlight',
+respectively. Before, we were using a green background by default for
+the 'isearch' face and a cyan background for the 'lazy-highlight'. This
+was a choice that was made in the early days of the project when the
+palette was not yet fully realised.
+
+Green and cyan do not always contrast well side-by-side (subject to
+hardware capabilities and environmental lighting), so the 'isearch' face
+also had an added bold weight. This was not my preference, but it was
+necessary under the circumstances. The previous combinations were also
+not ideal when the user option 'modus-themes-deuteranopia' was set to a
+non-nil value: the blue background which was used instead of the green
+one could be conflated with the subtle teal of the 'lazy-highlight'
+under certain circumstances, such as poor colour reproduction at the
+monitor level or in terminal emulators with limited colour support.
+
+The new colours (intense yellow for active matches and subtle cyan for
+lazy ones) are complementary, meaning that they are naturally easy to
+tell apart.
+
+[ Read "Colour theory and techniques used in the Modus themes":
+ <https://protesilaos.com/codelog/2022-04-21-modus-themes-colour-theory/> ]
+
+These specific hues are also well-suited for users with red-green colour
+deficiency: yellow stays as-is, while the cyan colour becomes a bit more
+grey though remains distinct. As such, we do not need to run the helper
+function 'modus-themes--deuteran' to set the style based on the value of
+'modus-themes-deuteranopia'.
+
+The new colours do not clash with the style of the relevant 'match' face
+(used by 'M-x occur', 'M-x grep', and related), nor with the various
+permutations of the 'region' face (subject to the user option
+'modus-themes-region').
+
+Finally, the bold weight has been removed from the 'isearch' face. It
+was always a kludge. Also, it would make paragraphs rendered in the
+'variable-pitch' face (or proportional fonts in general) jump around as
+the user would move between the matches, because bold letters occupy
+more space than their regular weight counterparts so they affect the
+length of the line. This problem was reported by Augusto Stoffel on the
+mailing list: <https://lists.sr.ht/~protesilaos/modus-themes/%3C87sfnbswe9.fsf@gmail.com%3E>.
+
+
+Rewrote parts of the colour preview commands
+============================================
+
+The 'modus-themes-list-colors', 'modus-themes-list-colors-current' are
+commands that produce a buffer which shows previews of every entry in
+the palette. Their code has been simplified and they now produce a
+warning when the display terminal has limited colour support.
+Furthermore, they read any overrides as specified in the user options
+'modus-themes-operandi-color-overrides', 'modus-themes-vivendi-color-overrides'.
+
+
+The "summertime" re-spin of colour overrides
+============================================
+
+The manual now includes a complete hand-crafted example of a pair of
+themes that override the default palette. This is done as a technology
+demonstration. It is not considered an "official" extension of the
+Modus themes and will never be part of the code base as it does not
+conform with our lofty accessibility standards. However, I took great
+care in picking the colour overrides in the hope that users will (i)
+have a usable theme, should they opt for it, and (ii) they recognise the
+potential of our colour-overriding feature.
+
+Screenshots and related information:
+<https://protesilaos.com/codelog/2022-07-26-modus-themes-color-override-demo/>.
+
+Thanks to user “Summer Emacs” for (i) suggesting the name “summertime”,
+(ii) testing variants of this in her setup, and (iii) sending me
+feedback on possible tweaks and refinements. All errors are my own.
+
+The idea for this project came from an exchange where Summer discovered
+an old theme of mine (from my pre-Emacs days) and asked if I had
+anything like it for Emacs. Voilà!
+
+[ This information is shared with permission. ]
+
+As for whether I have more plans... "Perhaps!" ;)
+
+
+Removed support for certain packages or face groups
+===================================================
+
+I periodically install and use the packages we support to see if they
+have any updates we need to cover but also to confirm that they work.
+Usually, the user does not learn about this work, as I don't need to
+make any changes or will make some minor tweaks. When I think that the
+package is not in a good shape, I remove it from the list of explicitly
+supported packages, meaning that the modus-themes no longer cover the
+faces it defines. The removal of any package is done on a case-by-case
+basis. If you disagree with this decision, please inform me about and I
+shall reconsider.
+
+,* centaur-tabs :: Those of you who have been reading these release notes
+ are aware of a bug in centaur-tabs which basically prevents us from
+ using the standard ':inherit' attribute to style the centaur-tabs
+ faces. I have sent a patch to fix it, but have received no response
+ since February: <https://github.com/ema2159/centaur-tabs/pull/179>.
+ To me, this gives the package the "unmaintained" status, though I am
+ happy to revert the change as soon as it gets the maintenance it
+ needs.
+
+ Relevant reports (and I got many others in my private inbox):
+
+ - <https://github.com/protesilaos/modus-themes/issues/30>
+ - <https://gitlab.com/protesilaos/modus-themes/-/issues/288>
+ - <https://github.com/protesilaos/modus-themes/issues/15>
+
+,* cursor-flash :: its default face should be visible enough.
+
+,* dynamic-ruler :: The package does not build on my Emacs 29. Also, its
+ default faces are usable even without our recolouring.
+
+,* emacs-dashboard :: Its default faces inherit from basic faces that we
+ already support.
+
+,* frog-menu :: I have not seen this package being used anywhere. I
+ suspect it is because it has not found a niche between transient,
+ hydra, and embark.
+
+,* mct :: A few months ago I announced that its development is
+ discontinued. Either use vertico or switch to what Emacs provides as
+ a built-in option: <https://protesilaos.com/codelog/2022-04-14-emacs-discontinue-mct/>.
+
+,* org-treescope :: The package points to a GitHub repo, which is
+ archived. The current source is on GitLab, but the package is not
+ updated accordingly. This makes me believe it is not actively
+ maintained and am thus removing it from the list.
+
+,* paradox :: When I tried paradox, it took over my C-c g binding which I
+ have for Magit. As an Emacs user, I consider this an unacceptable
+ transgression. Looking at paradox's git repo, the project is not
+ maintained. If things change, I am happy to reinstate support for it.
+
+,* vc-annotate (built-in) :: It has not been working properly for a long
+ time now. Colours are unset and are not re-applied when switching
+ between the 'modus-operandi' and 'modus-vivendi' themes.
+
+ Furthermore, the way 'vc-annotate-color-map' intersects with
+ 'vc-annotate-background-mode' puts us in an awkward spot: when the
+ mode is non-nil, the mapped values are used as backgrounds WITHOUT
+ giving us the chance to make the appropriate adjustments to the
+ foreground (so we end up with inaccessible colour combinations). This
+ means that we must fix a problem which is not ours by overriding the
+ user option of the background altogether. A theme outright disabling
+ user options is bad form.
+
+ Even documenting a user-level set of configurations will not suffice,
+ as the results are unreliable. I tried the code which I copy further
+ below to test annotation with/without background, plus the change in
+ values when switching between modus-operandi and modus-vivendi.
+ Again, colours are not updated properly (I know the buffer of 'M-x
+ vc-annotate' needs to be generated again), as 'modus-operandi' may
+ retain the values set by 'modus-vivendi' or vice-versa.
+
+ Ultimately, I feel 'vc-annotate' needs to be refactored to use
+ ordinary faces in ordinary ways. Or, at least, not try to outsmart
+ the user/theme about the choice of colours.
+
+ Thanks to Philip Kaludercic for starting the thread about the
+ 'vc-annotate-background-mode' which reminded me about this problem:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3C875ylfxkgi.fsf@posteo.net%3E>.
+
+ The code I alluded to:
+
+ (setq vc-annotate-background-mode nil)
+
+ (defun my-modus-themes-vc-annotate ()
+ ;; Actual values are for demo purposes
+ (modus-themes-with-colors
+ (if vc-annotate-background-mode
+ (setq vc-annotate-background bg-alt
+ vc-annotate-color-map
+ `((20 . ,red-intense-bg)
+ (40 . ,red-subtle-bg)
+ (60 . ,red-refine-bg)
+ (80 . ,yellow-intense-bg)
+ (100 . ,yellow-subtle-bg)
+ (120 . ,yellow-refine-bg)
+ (140 . ,magenta-intense-bg)
+ (160 . ,magenta-subtle-bg)
+ (180 . ,magenta-refine-bg)
+ (200 . ,cyan-intense-bg)
+ (220 . ,cyan-subtle-bg)
+ (240 . ,cyan-refine-bg)
+ (260 . ,green-intense-bg)
+ (280 . ,green-subtle-bg)
+ (300 . ,green-refine-bg)
+ (320 . ,blue-intense-bg)
+ (340 . ,blue-subtle-bg)
+ (360 . ,blue-refine-bg)))
+ (setq vc-annotate-background nil
+ vc-annotate-color-map
+ `((20 . ,red)
+ (40 . ,magenta)
+ (60 . ,magenta-alt)
+ (80 . ,red-alt)
+ (100 . ,yellow)
+ (120 . ,yellow-alt)
+ (140 . ,fg-special-warm)
+ (160 . ,fg-special-mild)
+ (180 . ,green)
+ (200 . ,green-alt)
+ (220 . ,cyan-alt-other)
+ (240 . ,cyan-alt)
+ (260 . ,cyan)
+ (280 . ,fg-special-cold)
+ (300 . ,blue)
+ (320 . ,blue-alt)
+ (340 . ,blue-alt-other)
+ (360 . ,magenta-alt-other))))))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-vc-annotate)
+
+
+Revised supported faces or face groups
+======================================
+
+,* Enhanced the default background colour of the current date in the Org
+ agenda. This is a subtle change, all things considered, which makes
+ it easier to discern where the highlight is while it remains close to
+ the spirit of the previous design. The idea is to not add too much
+ saturation here, because the buffer is already "busy" with lots of
+ highlights. Thanks to Daniel Mendler for the feedback on the mailing
+ list: <https://lists.sr.ht/~protesilaos/modus-themes/%3C3d8b1096-a7db-1e08-fefe-d39bed4a7ea3@daniel-mendler.de%3E>.
+
+,* Restyled the 'M-x man' and 'M-x woman' faces to have a bit more
+ saturation. A while ago I desaturated the 'Man-overstrike' and
+ 'woman-bold' faces on the premise that the added bold weight would be
+ sufficient. However, the bold weight may sometimes not draw the
+ desired attention, such as at small point sizes or with certain font
+ configurations. As such, the added intensity in colour is necessary.
+
+,* Changed the Selectrum quick key faces ('selectrum-quick-keys-match'
+ and 'selectrum-quick-keys-highlight') to have the same style as Avy,
+ Vertico's own "quick keys", and related. For a technical analysis,
+ read "Modus themes: case study on Avy faces and colour combinations":
+ <https://protesilaos.com/codelog/2022-04-20-modus-themes-case-study-avy/>.
+
+,* Made internal adjustments so that 'M-x list-packages' inherits from
+ the standard 'success', 'warning', and 'error' faces instead of adding
+ its own face attributes. In practice, the user will notice a change
+ for new packages in the listing if 'modus-themes-deuteranopia' is
+ non-nil.
+
+,* Introduced the same inheritance rules as above for the 'syslog'
+ package (mutatis mutandis).
+
+,* Increased the saturation of the 'package-status-available' face, which
+ is shown in the 'M-x list-packages' buffer. The overall effect is
+ subtle, though sufficiently noticeable.
+
+,* Revised the faces of the 'deft' package to make it look consistent
+ with the rest of the theme's relevant interfaces (to the extent
+ possible as Deft uses a non-standard presentation).
+
+,* Aligned the 'speedbar-highlight-face' with the user option
+ 'modus-themes-intense-mouseovers'.
+
+,* Refined the 'highlight-thing' face (see package of the same name).
+ This makes it stand out more and it also aligns it with the standard
+ 'match' face, which is pertinent here.
+
+,* Amplified the saturation of the 'dired-git-info' face. Makes it
+ easier to differentiate the Git commit text from the Dired listing,
+ without drawing too much attention to itself.
+
+,* Adjusted the hue of the 'easy-jekyll-help-face' from teal to blue.
+ This makes it look more like the standard 'help-key-binding' face,
+ although 'easy-jekyll' does not align with upstream Emacs in this
+ regard.
+
+,* Intensified the background of 'rectangle-preview' to work even in
+ cases where a grey background is already on display. This face is
+ used for the 'string-rectangle' command (e.g. C-x SPC to draw a
+ rectangle and C-t to insert text in its stead---works as a simple
+ "multiple cursors" on a straight line).
+
+
+Support for new faces or face groups
+====================================
+
+,* chart (built-in)
+,* denote
+,* edmacro-label (Emacs 29)
+,* info+
+,* leerzeichen
+
+A comment on 'info+'. As is the case with PACKAGE+ packages from the
+Emacs Wiki, info+ defines lots of faces that hardcode colour values
+instead of inheriting from basic faces. It does so for no good reason
+and the results will likely not look decent in any theme. Furthermore,
+these faces colourise too much even when the colour values can be
+appropriately combined (ceteris paribus), making the buffer harder to
+read.
+
+The support I add for info+ is consistent with the design principles of
+the modus-themes, one of which is to avoid exaggerations as those
+indirectly affect legibility. As such, some of the changes I introduce
+here outright remove colouration, while others align the various
+constructs with the overall aesthetic of the themes.
+
+Note that, by default, info+ adds clickable buttons to glossary terms.
+This produces awkward combinations such as by buttonising the "string"
+component inside of what actually is a function's argument. So you
+have, say, FORMAT-[STRING] where "[]" represents the button: the FORMAT
+gets one face and the [STRING] another, even though they are part of a
+single argument. To me this looks broken and is counter-productive,
+though it is not up to the theme to decide how packages fontify the
+various constructs. At any rate, button styles at the theme level are
+controlled by the user option 'modus-themes-box-buttons'.
+
+Thanks to Jonas Collberg for the feedback in issue 33 over at the GitHub
+mirror: <https://github.com/protesilaos/modus-themes/issues/33>.
+
+
+Miscellaneous
+=============
+
+,* Named the mailing list address as the =Maintainer:= of Denote.
+ Together with the other package headers, they help the user find our
+ primary sources and/or communication channels. This change conforms
+ with work being done upstream in package.el by Philip Kaludercic. I
+ was informed about it here:
+ <https://lists.sr.ht/~protesilaos/general-issues/%3C875ykl84yi.fsf%40posteo.net%3E>.
+
+,* Addressed byte compilation warnings in doc strings pertaining to the
+ use of literal quotes. Thanks to Matt Armstrong and Rudolf Adamkovič
+ for the feedback on the mailing list:
+ <https://lists.sr.ht/~protesilaos/modus-themes/%3C87bktlvgyy.fsf@rfc20.org%3E>.
+
+,* Fixed the ':link' value in the declaration of the user options
+ 'modus-themes-operandi-color-overrides', 'modus-themes-vivendi-color-overrides'.
+ It once again directs to the correct heading in the manual.
+
+,* Documented all the aforementioned, where necessary.
+
+,* Mentioned my 'fontaine' and 'lin' packages in the relevant sections of
+ the manual. The former helps set fonts and switch between font
+ presents. The latter is a stylistic variant of hl-line (its
+ documentation explains its raison d'être).
+#+end_src
+
+* 2.4.0
+:PROPERTIES:
+:CUSTOM_ID: h:ee0dcce9-3481-4533-8ded-a9a1f5269a41
+:END:
+
+#+begin_src text
+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'.
+#+end_src
+
+* 2.3.0
+:PROPERTIES:
+:CUSTOM_ID: h:f95fb7e2-fcc8-43f6-bde5-27fe51b1bdd5
+:END:
+
+#+begin_src text
+Modus themes version 2.3.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2022-04-01
+
+This entry documents the changes made to the project since the
+publication of version 2.2.0 on 2022-02-23. It spans more than 70
+commits.
+
+To access the URL of the manual visit:
+<https://protesilaos.com/emacs/modus-themes>. Or read it in the Emacs
+Info reader by evaluating:
+
+ (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.
+
+
+Customisation options
+=====================
+
+,* The 'modus-themes-completions' now accepts a 'text-also' property for
+ the 'selection' key. This has the effect of colourising the current
+ line's text. Whereas the default does not change the text colour,
+ re-using whatever underlying colours are available. Consult the doc
+ string of this user option, as it provides for fine-grained control of
+ how completion UIs may look. Thanks to Morgan Willcock whose feedback
+ in issue 278 inspired me to add the 'text-also' property:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/278>.
+
+,* The 'modus-themes-box-buttons' now accepts an 'all-buttons' property.
+ It applies whatever other style is used for the boxed buttons to the
+ generic 'widget.el'. By default, the faces of 'widget.el' do not look
+ like graphical buttons: they have a bold weight and a foreground
+ colour instead. Examples where those are used are the Notmuch "hello"
+ buffer and the main view of the 'elfeed-summary' package. Thanks to
+ Daniel Mendler, Rudolf Adamkovič, and Tony Zorman for their feedback
+ in issue 296: <https://gitlab.com/protesilaos/modus-themes/-/issues/296>.
+
+,* The 'modus-themes-intense-mouseovers' is a boolean user option which
+ makes mouse hover effects more intense when set to a non-nil value.
+ By default, mouseovers use a cyan background value. This changes it
+ to a more prominent blue. Thanks to John Haman for the feedback in
+ issue 290: <https://gitlab.com/protesilaos/modus-themes/-/issues/290>.
+
+,* The user options 'modus-themes-box-buttons', 'modus-themes-mode-line',
+ 'modus-themes-org-agenda', and 'modus-themes-headings' can now read a
+ number value as a cons cell. The old method of a plain number
+ continues to work. This makes it possible to be more descriptive on
+ what a given value signifies. Each doc string describes the
+ technicalities. Here are samples that yield identical results:
+
+ (setq modus-themes-mode-line '(accented 0.9 borderless 2))
+ (setq modus-themes-mode-line '(accented (heigh 0.9) borderless (padding 2)))
+
+ Thanks to Daniel Mendler for proposing this idea in issue 282:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/282#note_842257619>
+
+
+Attempted bug fix for byte compiled files
+=========================================
+
+Quoting from the git log:
+
+ commit f067d2ef39c22174b95584f2cba7942aaf03bcca
+ Author: Protesilaos Stavrou <info@protesilaos.com>
+ Date: Thu Mar 3 06:52:31 2022 +0200
+
+ Reify themes with eval-and-compile
+
+ This is an attempt to fix a bug that has existed since version 1.2.0 of
+ the themes or even earlier.
+
+ The bug is about a mismatch between compiled code and runtime
+ dependencies. The runtime expects the current version while the
+ compiled code only furnishes an outdated one, thus resulting in an
+ error. This only happens when:
+
+ 1. Private functions change to accept more/fewer arguments.
+ 2. Variables change their acceptable value (e.g. from symbol to list).
+ 3. The user is installing the package via the package.el mechanism which
+ takes care of byte compilation (though anything that mimics
+ package.el should exhibit the same behaviour).
+
+ My understanding is that the cause was the limited scope of the
+ 'eval-and-compile' we had before: it would run the 'require' also at
+ compile time, whereas the 'modus-themes-theme' macro, which reifies the
+ actual theme, would only be evaluated at runtime. Hence the mismatch as
+ 'require' would read the already installed byte code while the macro
+ would expect newer forms.
+
+ Wrapping everything in the 'eval-and-compile' should address this
+ problem. Hopefully it will not engender new ones...
+
+ ,* * *
+
+ The latest reports about this bug:
+
+ ,* GitLab issue 287 with Mark Bestley and Daniel Mendler:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/287>.
+
+ ,* GitHub issue 22 with Rytis Paškauskas:
+ <https://github.com/protesilaos/modus-themes/issues/22>.
+
+ doc/modus-themes.info | 30 +++++++++++++++---------------
+ doc/modus-themes.org | 15 ++++++++-------
+ modus-operandi-theme.el | 10 +++++-----
+ modus-vivendi-theme.el | 10 +++++-----
+ 4 files changed, 33 insertions(+), 32 deletions(-)
+
+After nearly one month, no problem has been observed as a result of this
+change.
+
+
+Newly supported packages
+========================
+
+These are added to the already comprehensive coverage we guarantee.
+
+Directly supported:
+
+,* devdocs. Thanks to Augusto Stoffel, its developer, for the feedback
+ which was sent via email.
+
+,* mini-modeline. Thanks to Julio C. Villasante for the feedback in
+ issue 24 over at the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/issues/24>.
+
+Indirectly supported (they use faces that we already cover):
+
+,* elfeed-summary
+,* undo-hl
+
+
+Changes to supported faces or packages
+======================================
+
+,* Improved the colours used by 'avy' to always guarantee constrast in
+ hueness between side-by-side characters with a variety of user
+ settings. I tried various styles, such as:
+
+ (setq avy-style 'pre)
+ (setq avy-style 'at-full)
+
+ For the sake of completeness, I also ran tests by modifying the
+ 'avy-lead-faces' (which is a 'defconst', not a 'defcustom'):
+
+ (setq avy-lead-faces
+ '(avy-lead-face
+ avy-lead-face-0
+ avy-lead-face-2
+ avy-lead-face
+ avy-lead-face-0
+ avy-lead-face-2))
+
+ (setq avy-lead-faces
+ '(avy-lead-face
+ avy-lead-face-1
+ avy-lead-face-1
+ avy-lead-face-1
+ avy-lead-face-1))
+
+ (setq avy-lead-faces
+ '(avy-lead-face
+ avy-lead-face-2
+ avy-lead-face-2
+ avy-lead-face-2
+ avy-lead-face-2))
+
+,* Updated the 'vertico-quick' faces to keep them aligned with the new
+ Avy styles. Thanks to Daniel Mendler (Vertico's developer) for the
+ reminder:
+ <https://gitlab.com/protesilaos/modus-themes/-/commit/404a9658196debdde95a51148fc62c5b2faccfb9#note_856454659>.
+
+,* Applied warmer though still not saturated colours for Org clocking
+ overlays. The previous style could be mistaken for a mouse highlight
+ or the highlighted line if 'modus-themes-hl-line' included the
+ properties 'intense' and 'accented'. Thanks to Rudolf Adamkovič for
+ the feedback in issue 293:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/293>.
+
+,* Broadened coverage of the built-in 'shr.el' library to include the new
+ 'shr-code' face (Emacs 29).
+
+,* Expanded support for the 'embark' package by covering its new
+ 'embark-collect-marked' face. Thanks to Daniel Mendler for the
+ feedback in issue 299:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/299>.
+
+,* Made the 'fill-column-indicator' a contiguous line. It was a dashed
+ line before, per the Emacs defaults, which led to awkward results
+ depending on the font family and value of 'line-spacing'. Thanks to
+ Daniel Mendler for the feedback in issue 297:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/297>.
+
+,* Added explicit support for the built-in 'separator-line' face in order
+ to refine its presentation. This is present in 'M-x shortdoc' buffers
+ (Emacs 28). Thanks to Daniel Mendler for the feedback in issue 297:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/297>.
+
+,* Applied explicit styling to the generic 'underline' face in order to
+ ensure its consistent colouration. The problem before was that an
+ underline that spanned text with distinct colours would inherit the
+ colour of the affected character. A uniform presentation makes
+ everything easier to read.
+
+,* The 'ement.el' Matrix client now uses a subtle background for username
+ mentions and/or quoted text. This is consistent with how other Matrix
+ clients style such constructs. Thanks to Adam Porter (aka
+ "alphapapa"), the developer of ement.el, for explaining the
+ technicalities and providing the relevant feedback in issue 25 over at
+ the GitHub mirror: <https://github.com/protesilaos/modus-themes/issues/25>.
+
+,* Enforced consistency between 'icomplete' and 'ido'. The first match
+ was coloured differently in 'ido-mode' by mistake. Thanks to Morgan
+ Willcock for the feedback in issue 278:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/278>.
+
+,* Used the main foreground for Company's tooltip. This is how it should
+ have been. Corfu is designed that way as well. Thanks to user okamsn
+ for the feedback in issue 278:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/278>.
+
+,* Corrected an omission whereby the AUCTeX verbatim face was not
+ consistent with other such faces. Now it too is governed by the user
+ option 'modus-themes-markup'.
+
+,* Fixed the 'centaur-tabs' invalid background message. Thanks to
+ Lennart C. Karssen for reporting the bug in issue 288:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/288>. Note,
+ however, that the problem is due to some decisions made upstream. My
+ patch has not been merged yet (open since 2022-02-24):
+ <https://github.com/ema2159/centaur-tabs/pull/179>. Given this
+ opportunity, always anticipate that faces may ':inherit' from others
+ and thus functions like 'face-background' might return an undesirable
+ nil value if used without a fallback.
+
+
+Miscellaneous
+=============
+
+,* Made the 'modus-themes--current-theme' return the first Modus theme
+ instead of the 'car' of 'custom-enabled-themes'. This makes the
+ themes work at all times even when the user has multiple of them
+ enabled. Thanks to Pierre Téchoueyres for the patch, which was sent
+ via email with regard to Emacs bug#54598:
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=54598>.
+
+,* Implemented compile-time requirement for built-in libraries to be sure
+ that the themes work in all cases. Thanks to Antonio Hernández Blas
+ for reporting in issue 292 the bug with the old design that assumed
+ the 'cl-lib' and 'subr-x' as already loaded:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/292>.
+
+,* Wrote in the manual how to achieve a monochrome style (with
+ permutations) for code syntax highlighting. Thanks to Augusto Stoffel
+ for sharing the idea via an email exchange (this information is
+ divulged with permission).
+
+,* Clarified some statements in the manual's section about the nuances in
+ "enabling" and "loading" a theme.
+
+,* Documented how the applicable palette affects the outer boundaries of
+ the colour range that terminal emulators set when Emacs is ran without
+ a GUI. Here "the palette" refers to the relevant 16 ANSI escape
+ sequences (terminal colours 0 through 15). For the sake of
+ convenience, the node includes ready-to-use palettes for XTerm, which
+ can be adapted to other terminal emulators. This entry complements an
+ existing one on improving the colour accuracy in terminal emulators.
+
+,* Used American English constructions in a few places such as "color"
+ instead of "colour" as that is what core Emacs expects (and the themes
+ are part of emacs.git).
+
+,* Updated the description of the themes to be more user-friendly.
+ Instead of "Highly accessible themes (WCAG AAA)" we now have "Elegant,
+ highly legible and customizable themes". Nothing changes in terms of
+ substance. Thanks to Jorge Morais for the feedback.
+
+,* Clarified that the version of the themes which is built into Emacs
+ does not use 'require'. It is in response to this thread:
+ <https://lists.gnu.org/archive/html/help-gnu-emacs/2022-03/msg00049.html>.
+ Thanks to Philip Kaludercic for bringing the issue to my attention.
+
+,* Improved the code samples that show how to set up the package.
+
+,* Wrote the correct symbols for some obsoletion forms.
+
+Thanks once again to everyone involved!
+#+end_src
+
+* 2.2.0
+:PROPERTIES:
+:CUSTOM_ID: h:251849ee-3328-48c7-af5f-d1d6daca3a97
+:END:
+
+#+begin_src text
+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>.
+#+end_src
+
+* 2.1.0
+:PROPERTIES:
+:CUSTOM_ID: h:15098250-7b41-404b-86e1-9a99984976b9
+:END:
+
+#+begin_src text
+Modus themes version 2.1.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2022-02-17
+
+The present entry records the changes made to the project since the
+publication of version 2.0.0 on 2021-12-24. There have been more than
+110 commits in the meantime (and this log is close to 5000 words).
+
+All modifications of colour combinations mentioned herein are made in
+accordance with the primary accessibility objective of the themes for a
+minimum contrast ratio of 7:1 between background and foreground values
+in their given combination (the WCAG AAA standard for relative colour
+luminance). Edits also account for colour-coding that is optimised for
+the needs of users with red-green colour deficiency (deuteranopia).
+
+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.
+
+
+Commands
+========
+
+The following produce a buffer that previews the colour palette of the
+given theme ('modus-operandi' or 'modus-vivendi').
+
+,* 'modus-themes-list-colors' prompts for a theme before producing the
+ preview.
+
+,* 'modus-themes-list-colors-current' uses the current Modus theme.
+
+These commands are useful to anyone who wants to reference a named
+colour from the themes or copy a colour value, such as for the purposes
+of user-level customisation (as documented at length in the manual
+across several use-cases and with the inclusion of custom code).
+
+The commands are not bound to any key.
+
+
+Customisation options
+=====================
+
+,* Implemented the 'modus-themes-markup' variable, which supersedes the
+ now-deprecated 'modus-themes-intense-markup'. The new user option
+ accepts a list of properties (symbols). It affects constructs such as
+ Org's =verbatim=, ~code~, and macro (with three pairs of braces). By
+ default, when this user option is either nil or an empty list, the
+ affected constructs only have a foreground colour (e.g. Org verbatim
+ is magenta). Properties that change this style are:
+
+ 1. 'italic' for an added slant to the text.
+ 2. 'bold' for a heavier weight.
+ 3. 'background' to add a background colour.
+ 4. 'intense' to amplify the colouration (especially of 'background').
+
+ As with all user options which accept a list of properties, the order
+ of the symbols is no significant. In user configurations it may look
+ like this:
+
+ (setq modus-themes-markup '(background intense bold))
+
+ [ Read the manual for bold and italic fonts. We do not hardcode a
+ :weight or :slant, instead giving the user the option to set their
+ own values. The defaults are what you would normally expect from
+ "bold" and "italic". ]
+
+ Thanks to Rudolf Adamkovič for reporting some problems with the old
+ design in issue 274:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/274>.
+
+,* Added the 'modus-themes-box-buttons' which affects all pseudo
+ graphical buttons, such as those found in Custom UI buffers or EWW web
+ pages which include search forms and the like. The variable accepts a
+ list of properties as its value. By default (nil or empty list),
+ buttons have a grey background and the familiar 3D effect. Valid
+ properties are:
+
+ 1. 'flat' to remove the 3D effect.
+ 2. 'accented' to shift the colouration away from grey.
+ 3. 'faint' to reduce the overall colouration (e.g. grey becomes white).
+ 4. 'variable-pitch' to apply a proportionately spaced font.
+ 5. 'underline' to draw a line instead of applying a 3D or flat box
+ (particularly useful for those who use Emacs in a terminal emulator).
+ 6. The symbol of a font weight, such as 'bold', 'semibold', 'light' or
+ any one among those included in the 'modus-themes-weights' constant
+ (the underlying font family has to support the given weight).
+ 7. A number, expressed as a floating point (e.g. 0.9), which adjusts
+ the height of the button’s text to that many times the base font
+ size. The default height is the same as 1.0, though it need not be
+ explicitly stated.
+
+ The order in which those symbols appear in the list is not
+ significant. If 'underline' and 'flat' are both specified, the former
+ takes precedence. In user init files the form may look like this:
+
+ (setq modus-themes-box-buttons '(variable-pitch flat semilight 0.9))
+
+ Thanks to Daniel Mendler for suggesting this user option and providing
+ the relevant feedback in issue 282:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/282>.
+
+,* Expanded the 'modus-themes-mail-citations' with an 'intense' variant.
+ For example:
+
+ (setq modus-themes-mail-citations 'intense)
+
+ The default is a moderately coloured style. Other variants include
+ 'faint' for subtle colouration and 'monochrome' for an all-grey look.
+
+,* Reviewed the 'modus-themes-completion' option and harmonised all the
+ face specifications it governs. The variable now accepts a fourth
+ stylistic variant in 'super-opinionated': it is like the 'opinionated'
+ one though some details are even more pronounced. Other noteworthy
+ items:
+
+ [ Remember to read the doc string of 'modus-themes-completions', which
+ explains the grouping of the completion UIs. ]
+
+ - The (setq modus-themes-completions 'moderate) style is more-or-less
+ the same across all completion UIs. The highlight applied to the
+ current line is a bespoke shade of blue, the characters are less
+ saturated than before and their hues are different, though the
+ overall effect should still feel "sufficiently colourful, but not
+ overdone".
+
+ - The (setq modus-themes-completions nil) is the same as before.
+ However:
+
+ - The current line in Ivy now uses a shade of blue that is
+ specific to completion UIs instead of an intense cyan
+ background. This is for theme-wide consistency.
+
+ - Helm's current line has the same bespoke blue for its current
+ line instead of another shade of blue it was using before.
+
+ - The (setq modus-themes-completions 'opinionated) should be the same
+ as before, notwithstanding the aforementioned tweaks to Ivy/Helm.
+
+ - The (setq modus-themes-completions 'super-opinionated) for
+ Icomplete, Vertico, Selectrum, Mct uses the same blue for the
+ current line as is the default of Ivy and Helm.
+
+ Miscellaneous:
+
+ - The relevant private helper functions were rewritten.
+
+ - We declare a few faces to help streamline certain styles.
+
+ - Ivy action keys now inherit from 'modus-themes-key-binding'. We
+ generally try to make all keys look the same, except when that would
+ be detrimental to the usability of the given context/interface.
+
+ - Some Ivy faces are simplified or otherwise tweaked to fit in with
+ the rest of the theme.
+
+ Thanks to Rudolf Adamkovič for the feedback about Vertico in issues
+ 214 and 278 which prompted me to review all completion UIs:
+
+ - <https://gitlab.com/protesilaos/modus-themes/-/issues/214>
+ - <https://gitlab.com/protesilaos/modus-themes/-/issues/278>
+
+,* Adjusted the applicable hues in some 'modus-themes-syntax' variants. In
+ particular:
+
+ - The strings' hue has more hints of blue when 'modus-themes-syntax'
+ includes the 'green-strings' property. Such as:
+
+ (setq modus-themes-syntax '(green-strings))
+ (setq modus-themes-syntax '(alt-syntax green-strings))
+ (setq modus-themes-syntax '(alt-syntax green-strings faint))
+ (setq modus-themes-syntax '(alt-syntax green-strings faint yellow-comments))
+
+ - Strings are more orange/yellow than red when 'modus-themes-syntax'
+ includes the 'alt-syntax' property but NOT the 'green-strings'. For
+ example:
+
+ (setq modus-themes-syntax '(alt-syntax))
+ (setq modus-themes-syntax '(alt-syntax yellow-comments))
+ (setq modus-themes-syntax '(alt-syntax yellow-comments faint))
+
+ - Backslashes for regexp constructs are coloured appropriately to look
+ distinct from the rest of the string and from the escaped construct in
+ all cases.
+
+,* Removed background colours from the the default style of Org block
+ delimiters.
+
+ As I explained in Emacs bug#52587,[1] Org has code that overrides
+ themes which prefer not to extend the block delimiter faces to the
+ edge of the window (as we would like to do by default). This
+ practically means that we cannot have backgrounds for those lines and
+ keep them limited to the stretch of area covered by their text.
+
+ As such, the default for Org block delimiter lines now is a gray
+ foreground with no distinct background colour. The user option
+ 'modus-themes-org-blocks' provides "blocky" alternatives that use
+ background colours---those extend to the edge of the window.
+
+ [1] <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52587#46>
+
+,* Deleted the compatibility layer for all user options that used to
+ accept symbols in the past but now expect a list of symbols. The
+ manual contains a snippet with all customisation options for those who
+ do not want to read all the relevant doc strings. Evaluate this:
+
+ (info "(modus-themes) Customization Options")
+
+ Or visit: <https://protesilaos.com/emacs/modus-themes#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f>.
+
+ The original plan was to remove those during the transition to version
+ 2.0.0 (about a month ago) though I changed my mind thinking they would
+ not pose a longer-term problem.
+
+ New information by Mark Bestley in issue 272 shows that this kind of
+ complexity can lead to errors:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/272#note_826725412>.
+
+ So it is better to keep things simple and ask users to configure all
+ user options based on the up-to-date documentation.
+
+ Also thanks to Saša Janiška for the feedback in issue 272.
+
+
+New packages, faces, or face groups
+===================================
+
+,* all-the-icons-dired.
+
+,* all-the-icons-ibuffer.
+
+,* 'child-frame-border' face (Emacs 28).
+
+,* 'citar' package. Thanks to Rudolf Adamkovič for the feedback in issue
+ 280: <https://gitlab.com/protesilaos/modus-themes/-/issues/280>.
+
+,* 'elisp-shorthand-font-lock-face' (Emacs 29). Read the manual by
+ evaluating:
+
+ (info "(elisp) Shorthands")
+
+,* 'ement' (ement.el) Matrix client, though it is not listed in any
+ archive yet: <https://github.com/alphapapa/ement.el>.
+
+ Thanks to Samuel Culpepper for the feedback in issue 279:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/279>.
+
+ Also check the Ement issue tracker on the matter:
+ <https://github.com/alphapapa/ement.el/issues/53>.
+
+,* 'mct' package.
+
+,* 'menu' face (built-in) which is used in the menu-bar when Emacs runs
+ without a graphical toolkit.
+
+,* 'pgtk-im-0' face (Emacs 29). This is shown as a single-character-long
+ block when you type the Compose key followed by the composable
+ characters.
+
+,* 'pyim' (an input method for CJK characters). Thanks to Yuanchen Xie for
+ the contribution in merge request 57:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/57>.
+ The patch is small and is thus excluded from the requirement for
+ copyright assignment to the FSF (remember that the themes are built
+ into Emacs and any major contribution needs such copyright
+ assignment---read the relevant entry in the themes' manual).
+
+,* 'slime' and 'sly' packages. Thanks to John Haman for the feedback
+ which was done via email due to some problems with the web UI on
+ GitLab (this information is shared with permission). Please note that
+ I am not familiar with Common Lisp and could not test these
+ thoroughly. Any mistakes or omissions are my own.
+
+ Concerning the web UI, there is a fully functional mirror of the
+ themes on GitHub, while email is always an option. Use whatever works
+ for you to report an issue or send a patch.
+
+,* 'textsec' package (Emacs 29).
+
+New indirectly supported packages
+---------------------------------
+
+These inherit from base faces and look good enough already or use
+appropriate colours from the Modus themes:
+
+,* dtache
+,* org-remark
+
+
+Changes to supported faces or face groups
+=========================================
+
+,* Stopped making key bindings look like boxes. We revert to the old
+ style we were using before the introduction of the 'help-key-binding'
+ face (Emacs 28).
+
+ By default Emacs 28 or higher will render all key bindings it
+ identifies with a box around them. The idea is to make them look like
+ keys on a keyboard, which I never really liked because without
+ generous padding you get a very tight space between the character and
+ the box's borders which can look weird at small point sizes (Emacs
+ faces do not have padding in the same way CSS does).
+
+ I tried following the default style for a few months and have concluded
+ that it is not good enough for our purposes (my preferences
+ notwithstanding):
+
+ - The box attribute does not work in terminal emulators. This means
+ that keys only get a subtle grey background and the default
+ foreground, which can be hard to make them stand out from their
+ surrounding text if the font height is small and/or the keybinding is
+ short (e.g. a single character).
+
+ - The box and grey background combination limits our options when we
+ need to colour-code different types of keys. For example, the
+ 'which-key' package can show TAB as T and applies to it a different
+ face to make the distinction obvious. In that case, the presence of
+ the tight box makes the use of a bold weight inappropriate: the
+ character and the box's borders seem to overlap. While the grey
+ background limits our choice of colour as, for instance, yellow
+ never looks good against it. Same principle for interfaces that can
+ have colour-coded keys like 'transient' and 'hydra', where we lose
+ much-needed flexibility.
+
+,* Adjusted the brightness of the 'which-key-special-key-face'. This is
+ the face that applies to special keys. For example:
+
+ (setq which-key-special-keys '("SPC" "TAB" "RET" "ESC" "DEL"))
+
+,* Made 'transient' faces which are supposed to be de-emphasise certain
+ elements inherit the 'shadow' face. This is an implicit customisation
+ option, as it allows the user to adjust the foreground value of all
+ "less important" constructs simply by changing the 'shadow' face.
+
+,* Covered the 'transient-purple' face (these are like the colour-coding
+ of 'hydra').
+
+,* Tweaked the 'transient-argument' and 'transient-value' faces to make
+ things look a bit more consistent with the other transient faces.
+ This is to avoid potential conflicts with the highlighted key
+ bindings, especially when transient uses hydra-style colour-coded
+ keys.
+
+,* Applied the same metaphors for key bindings to 'marginalia-key'
+ ('marginalia' package) and 'embark-keybinding' ('embark' package).
+ They inherit the 'modus-themes-key-binding' when possible. The only
+ exception is with (setq modus-themes-completions nil) where conflicts
+ may arise between the key's style and matching characters of the
+ ongoing completion session.
+
+ Thanks to Rudolf Adamkovič for pointing out the inconsistency in issue
+ 278: <https://gitlab.com/protesilaos/modus-themes/-/issues/278>.
+
+,* Refrained from treating LaTeX sections as headings. This is because
+ unlike Org/Outline/Markdown Latex is basically source code, so the
+ sectioning does not work the same way it does for those lightweight
+ markup/outlining modes.
+
+ Furthermore, font-latex.el defines 'font-latex-fontify-sectioning'
+ which can be used to control the scale of those sections. It makes
+ sense for the themes to not interfere with that design and just allow
+ users to customise things uniformly regardless of the active theme.
+
+ Thanks to Gustavo Barros for the detailed feedback in issue 265:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/265>.
+
+,* Reviewed the hues of 'all-the-icons' and related packages.
+
+,* Applied the correct style to 'info-menu-header', meaning that it now
+ only uses a bold weight as it is not a real heading, instead of being
+ affected by the user option 'modus-themes-headings'.
+
+,* Included new 'telega-entity-type-spoiler' face. Thanks to bit9tream
+ for informing me about it in issue 271:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/271>. The
+ conclusion:
+
+ Tricky though perhaps dull
+
+ I understand this is not an interesting topic and it probably is
+ too difficult to relate to the various data points without
+ visualising them and comparing the before and after
+ states. Furthermore, data can be deceptive and I have always
+ maintained that theme development stands at the intersection of
+ science and art (at least for the purposes of conforming with the
+ rigorous accessibility standards of the Modus themes).
+
+ That granted, I wanted to shed light on the “behind the scenes”
+ work that is not immediately obvious when one checks a diff that
+ introduces some seemingly trivial tweaks like '#49d239'->'#49c029'
+ or '#7fcfff'->'#8fbfff'.
+
+,* Tweaked the hues of all graph colours, which are used in the
+ 'org-habit' table. The changes are subtle and should improve the
+ overall usability of the graph. For the technicalities, read:
+ <https://protesilaos.com/codelog/2022-01-02-review-modus-themes-org-habit-colours/>.
+
+ Also thanks to Rudolf Adamkovič for reporting the problem with white
+ text on yellow background in issue 270:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/270>.
+
+,* Styled the 'markdown-highlighting-face'. This is the face used for
+ text in between double equals signs when the user option
+ 'markdown-enable-highlighting-syntax' is non-nil.
+
+,* Amplified the overall colouration of Eldoc's current argument. It is
+ a yellow foreground with a tinted background. The blue foreground
+ which was applied before could be hard to tell apart in some cases,
+ especially because it is a common colour that is used elsewhere in the
+ themes. Whereas the warmer hues are easier to discern, especially
+ while relying only on peripheral vision.
+
+ Thanks to Rudolf Adamkovič for the feedback in issue 275:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/275>.
+
+,* Instructed Geiser to use the same style for its argument as Eldoc
+ (edited the faces 'geiser-font-lock-autodoc-current-arg' and
+ 'geiser-font-lock-autodoc-identifier').
+
+,* Made the 'keycast-key' face work when 'modus-themes-mode-line' has a
+ padding value (read the latter doc string or consult the manual).
+
+,* Refined the 'magit' faces for bisect, reflog, sequence, and signature
+ views. They get a bold weight and, where appropriate, are made to
+ comply with the 'modus-theems-deueteranopia' option (meaning that
+ greens turn into blues).
+
+,* Recoloured 'elfeed' tags from a shade of cyan to magenta, in the
+ interest of theme-wide consistency but also to make them easier to
+ tell apart from the name of the feed. Also updated the faces used in
+ the header-line to look better in context.
+
+,* Removed the hardcoded ':slant italic' from the 'italic' face, which is
+ consistent with how we do not hardcode ':weight bold' in the 'bold'
+ face.
+
+ Such a design allows users to configure those faces and have the
+ desired slant/weight (and even font family) apply consistently
+ throughout the theme. Read the manual for further details:
+ <https://protesilaos.com/emacs/modus-themes#h:2793a224-2109-4f61-a106-721c57c01375>.
+
+ Thanks to user derek-upham for pointing out the inconsistency in issue
+ 21 over at the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/issues/21>.
+
+,* Improved the styles that apply to compilation buffers and related.
+ The overarching intent was to reduce the excess colouration, without
+ upsetting expectations and affecting the overall presentation.
+
+ Thanks to Rudolf Adamkovič for the feedback in issue 277:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/277>.
+
+ Note that compilation buffers apply an underline by default. The
+ manual explains how to change that:
+ <https://protesilaos.com/emacs/modus-themes#h:420f5a33-c7a9-4112-9b04-eaf2cbad96bd>.
+
+,* Ensured a consistent style for the 'highlight' face across all
+ contexts (typically used for mouse hover effects). The mode line has
+ an exception when its style includes an accented background (per
+ 'modus-themes-mode-line').
+
+ Thanks to Rudolf Adamkovič for the feedback in issue 214:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/214>.
+
+,* Changed the foreground of 'mode-line-emphasis' from blue to purple, in
+ order to avoid potential (albeit unlikely) confusion with other
+ indicators.
+
+,* Desaturated the 'man' and 'woman' foreground value of the bold
+ constructs and tweaked other faces to avoid potential inconsistencies.
+ Thanks to Daniel Mendler for the feedback:
+ <https://gitlab.com/protesilaos/modus-themes/-/commit/8080eb1c6c0020ba82e8abaa933d6686327bc616#note_841424489>.
+
+,* Removed certain exaggerations from widgets as seen in the Custom UI
+ and EWW. Specifically:
+
+ - 'widget-field' does not need to ':extend', as that typically does
+ not look good.
+
+ - 'custom-state' gets a warmer colour to convey its message more
+ effectively.
+
+ - 'eww-form-text' no longer uses a ':box' because that breaks when the
+ widget occupies more than one line.
+
+ - 'eww-form-textarea' can now inherit from 'eww-form-text'.
+
+ Thanks to Daniel Mendler for the feedback on the style of those faces in
+ issue 284: <https://gitlab.com/protesilaos/modus-themes/-/issues/284>.
+
+
+The manual
+==========
+
+,* Clarified the wording of 'shr' fonts, which affect 'eww', 'elfeed',
+ 'ement', and possibly others.
+
+,* Wrote section on custom Org emphasis faces. It includes code samples.
+
+,* Answered a Frequently Asked Question on whether the Modus themes are
+ "colour schemes"---they are not and it is important to understand why.
+
+,* Addressed another Frequently Asked Question about porting the themes
+ to other platforms or editors. Relevant blog posts which explain how
+ complex the issue is and why porting requires the same attention to
+ detail as this project:
+
+ - <https://protesilaos.com/codelog/2022-01-03-modus-themes-port-faq/>.
+ - <https://protesilaos.com/codelog/2022-01-23-base16-modus-themes/>.
+
+,* Improved the sample code in the section about the backdrop of PDF
+ files while using 'pdf-tools'. Thanks to Utkarsh Singh for the patch,
+ which was sent via email.
+
+,* Provided sample code on an alternative style for Ediff.
+
+ There was a discussion with Philip Kaludercic in issue 273 about making
+ this a defcustom: <https://gitlab.com/protesilaos/modus-themes/-/issues/273>.
+
+ I first entertained the notion and did set up a branch for testing
+ purposes. However, I ultimately decided that such a course of action
+ would establish a bad precedent because then every conceivable stylistic
+ tweak could, in principle, become a user option. Furthermore, the
+ potential defcustom would introduce too much complexity as Ediff would
+ have to continue to behave as other diffs (per 'modus-themes-diffs') if
+ the user did not want the alternative style.
+
+ As such, documenting how a user can achieve this is the right choice.
+
+,* Fixed internal link in the manual. Thanks to Rudolf Adamkovič for
+ reporting the problem in issue 277:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/277>.
+
+
+Miscellaneous
+=============
+
+,* Covered workaround for improving the accuracy of colour reproduction
+ in terminal emulators. The results are still not as good as the
+ graphical version of Emacs, though they are considerably better than
+ before. Thanks to gitrj95's issue 18 at the GitHub mirror, which
+ prompted me to research this topic:
+ <https://github.com/protesilaos/modus-themes/issues/18>.
+
+,* Helped report a bug in the PGTK build of Emacs where a new emacsclient
+ window with the 'modus-vivendi' face would not show the cursor:
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=53073>. Thanks to
+ contributed to the discussion on issue 7 over at the GitHub mirror:
+ <https://github.com/protesilaos/modus-themes/issues/7>
+
+,* Shifted the hue of the intense 'hl-line' from a grey-cyan to a more
+ vivid blue by reducing the relative contribution of the green channel
+ of light.
+
+ The change affects these styles:
+
+ (setq modus-themes-hl-line '(accented intense))
+ (setq modus-themes-hl-line '(accented intense underline))
+
+ Thanks to Rudolf Adamkovič for suggesting a more vivid colour in issue
+ 214: <https://gitlab.com/protesilaos/modus-themes/-/issues/214>.
+
+,* Recalibrated the 'modus-vivendi' named colour 'bg-paren-match'.
+
+ I wanted to increase its distance relative to the main background,
+ just to be sure that it is easier to spot. This is achieved by moving
+ the hueness from the yellow to the magenta side of the spectrum.
+
+ Overall, the change is subtle and has no major impact on the contrast
+ ratio relative to the main background and foreground (we need to
+ consider both due to the specifics of show-paren-mode (and related)).
+
+ The results (#5f362f is the old, #6f3355 the new):
+
+ | | #000000 | #ffffff | #000000 | #ffffff |
+ |---------+---------+---------+---------+---------|
+ | #5f362f | 2.06 | 10.22 | 37904 | 333060 |
+ | #6f3355 | 2.28 | 9.21 | 58282 | 291037 |
+
+ The TBLFM formula for this table (org-mode notation):
+
+ $2='(Λ $1 @1$2);%.2f :: $3='(Λ $1 @1$3);%.2f :: $4='(Δ $1 @1$4) :: $5='(Δ $1 @1$5)
+
+ The Greek letters mean:
+
+ (defalias 'Λ #'modus-themes-contrast)
+ (defalias 'Δ #'color-distance)
+
+,* Expanded the "special" subset of the palette with faint variants of
+ the four backgrounds. These are reserved for special circumstances,
+ as the name implies. Below are the contrast values (see
+ 'modus-themes-contrast').
+
+ Modus Operandi main accept colours against faint special backgrounds:
+
+ | | #f0f1ff | #ebf5eb | #fef2ea | #faeff9 |
+ |---------+---------+---------+---------+---------|
+ | #a60000 | 7.15 | 7.17 | 7.29 | 7.16 |
+ | #972500 | 7.26 | 7.28 | 7.40 | 7.28 |
+ | #a0132f | 7.13 | 7.15 | 7.27 | 7.14 |
+ | #7f1010 | 9.44 | 9.47 | 9.63 | 9.47 |
+ | #702f00 | 8.94 | 8.97 | 9.12 | 8.96 |
+ | #7f002f | 9.64 | 9.67 | 9.83 | 9.66 |
+ | #005e00 | 7.20 | 7.23 | 7.34 | 7.22 |
+ | #315b00 | 7.13 | 7.15 | 7.27 | 7.15 |
+ | #145c33 | 7.18 | 7.20 | 7.32 | 7.20 |
+ | #104410 | 10.09 | 10.12 | 10.29 | 10.12 |
+ | #30440f | 9.56 | 9.59 | 9.75 | 9.58 |
+ | #0f443f | 9.76 | 9.79 | 9.96 | 9.79 |
+ | #813e00 | 7.14 | 7.17 | 7.28 | 7.16 |
+ | #70480f | 7.14 | 7.17 | 7.28 | 7.16 |
+ | #863927 | 7.13 | 7.15 | 7.27 | 7.15 |
+ | #5f4400 | 8.10 | 8.12 | 8.26 | 8.12 |
+ | #5d5000 | 7.17 | 7.19 | 7.31 | 7.19 |
+ | #5e3a20 | 8.91 | 8.94 | 9.09 | 8.93 |
+ | #0031a9 | 9.31 | 9.34 | 9.49 | 9.33 |
+ | #2544bb | 7.14 | 7.16 | 7.28 | 7.16 |
+ | #0000c0 | 10.64 | 10.67 | 10.85 | 10.66 |
+ | #003497 | 9.66 | 9.70 | 9.86 | 9.69 |
+ | #0f3d8c | 9.06 | 9.09 | 9.24 | 9.09 |
+ | #001087 | 13.15 | 13.20 | 13.42 | 13.19 |
+ | #721045 | 9.99 | 10.02 | 10.19 | 10.01 |
+ | #8f0075 | 7.72 | 7.75 | 7.88 | 7.74 |
+ | #5317ac | 8.98 | 9.01 | 9.16 | 9.00 |
+ | #752f50 | 8.22 | 8.25 | 8.38 | 8.24 |
+ | #7b206f | 8.22 | 8.25 | 8.38 | 8.24 |
+ | #55348e | 8.26 | 8.29 | 8.42 | 8.28 |
+ | #00538b | 7.18 | 7.20 | 7.32 | 7.19 |
+ | #30517f | 7.18 | 7.20 | 7.32 | 7.20 |
+ | #005a5f | 7.13 | 7.15 | 7.27 | 7.15 |
+ | #005077 | 7.76 | 7.79 | 7.91 | 7.78 |
+ | #354f6f | 7.49 | 7.52 | 7.64 | 7.51 |
+ | #125458 | 7.69 | 7.72 | 7.85 | 7.71 |
+
+ Modus Vivendi main accept colours against faint special backgrounds:
+
+ | | #0e183a | #001f1a | #241613 | #251232 |
+ |---------+---------+---------+---------+---------|
+ | #ff8059 | 7.01 | 7.01 | 7.07 | 7.00 |
+ | #ef8b50 | 7.01 | 7.00 | 7.07 | 7.00 |
+ | #ff9077 | 7.85 | 7.85 | 7.93 | 7.85 |
+ | #ffa0a0 | 8.91 | 8.91 | 9.00 | 8.91 |
+ | #f5aa80 | 9.04 | 9.04 | 9.13 | 9.04 |
+ | #ff9fbf | 9.06 | 9.05 | 9.14 | 9.05 |
+ | #44bc44 | 7.04 | 7.04 | 7.11 | 7.04 |
+ | #70b900 | 7.13 | 7.13 | 7.20 | 7.12 |
+ | #00c06f | 7.24 | 7.24 | 7.31 | 7.24 |
+ | #78bf78 | 7.87 | 7.86 | 7.94 | 7.86 |
+ | #99b56f | 7.60 | 7.59 | 7.67 | 7.59 |
+ | #88bf99 | 8.23 | 8.22 | 8.30 | 8.22 |
+ | #d0bc00 | 8.98 | 8.98 | 9.07 | 8.98 |
+ | #c0c530 | 9.31 | 9.31 | 9.40 | 9.30 |
+ | #d3b55f | 8.71 | 8.71 | 8.79 | 8.71 |
+ | #d2b580 | 8.81 | 8.80 | 8.89 | 8.80 |
+ | #cabf77 | 9.28 | 9.27 | 9.36 | 9.27 |
+ | #d0ba95 | 9.20 | 9.20 | 9.29 | 9.20 |
+ | #2fafff | 7.18 | 7.18 | 7.25 | 7.18 |
+ | #79a8ff | 7.32 | 7.32 | 7.39 | 7.31 |
+ | #00bcff | 7.96 | 7.96 | 8.04 | 7.96 |
+ | #82b0ec | 7.74 | 7.74 | 7.81 | 7.74 |
+ | #a0acef | 7.97 | 7.96 | 8.04 | 7.96 |
+ | #80b2f0 | 7.89 | 7.88 | 7.96 | 7.88 |
+ | #feacd0 | 9.94 | 9.93 | 10.03 | 9.93 |
+ | #f78fe7 | 8.29 | 8.29 | 8.37 | 8.29 |
+ | #b6a0ff | 7.82 | 7.81 | 7.89 | 7.81 |
+ | #e0b2d6 | 9.51 | 9.50 | 9.60 | 9.50 |
+ | #ef9fe4 | 8.88 | 8.88 | 8.96 | 8.87 |
+ | #cfa6ff | 8.72 | 8.71 | 8.80 | 8.71 |
+ | #00d3d0 | 9.28 | 9.27 | 9.36 | 9.27 |
+ | #4ae2f0 | 11.09 | 11.09 | 11.20 | 11.09 |
+ | #6ae4b9 | 11.08 | 11.07 | 11.18 | 11.07 |
+ | #90c4ed | 9.34 | 9.34 | 9.43 | 9.33 |
+ | #a0bfdf | 9.10 | 9.09 | 9.18 | 9.09 |
+ | #a4d0bb | 10.18 | 10.17 | 10.27 | 10.17 |
+
+,* Add docs on color overrides through blending. Thanks to Alex Griffin
+ for the contribution in issue 269 and the subsequent patch in merge
+ request 56 (the patch is exempt from copyright assignment):
+
+ - <https://gitlab.com/protesilaos/modus-themes/-/issues/269>.
+ - <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/56>.
+
+,* Fixed typo in the ':group' value of some faces defined in
+ modus-themes.el. Thanks to Gustavo Barros for reporting it in issue
+ 266: <https://gitlab.com/protesilaos/modus-themes/-/issues/266>
+
+,* Updated copyright statement in all .el files to use the same wording
+ as all other files that are built into Emacs.
+
+,* Made all sorts of tweaks and refinements to doc strings and nodes in the
+ manual.
+
+Thanks again to everyone involved! This has been yet another cycle of
+intense work which further iterated on an already solid base.
+#+end_src
+
+* 2.0.0
+:PROPERTIES:
+:CUSTOM_ID: h:46d92baa-eff3-4973-bac0-cf762b457e2d
+:END:
+
+#+begin_src text
+Modus themes version 2.0.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2021-12-24
+
+This entry covers the changes made to the project since the publication
+of version 1.7.0 on 2021-11-18. There have been more than 90 commits in
+the meantime. This is a major upgrade with some backward-incompatible
+changes, even though most work was done behind the scenes (i.e. not in
+git commits but local testing) to guarantee the relevance of all
+user-facing styles, code practices, et cetera.
+
+All modifications of colour combinations mentioned herein are made in
+accordance with the primary accessibility objective of the themes for a
+minimum contrast ratio of 7:1 between background and foreground values
+in their given combination (the WCAG AAA standard for relative colour
+luminance). Edits also account for colour-coding that is optimised for
+the needs of users with red-green colour deficiency (deuteranopia).
+
+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.
+
+A fully fledged org-mode file with the annotated task list for Modus
+themes version 2.0.0 is supplied as complementary material to the
+present entry. It should be annexed below this text on the announcement
+page: <https://protesilaos.com/codelog/2021-12-24-modus-themes-2-0-0/>.
+
+
+Customisation options
+=====================
+
+There are some breaking changes that were necessary to improve the code
+base and make things easier as well as more efficient for end users.
+Please read carefully and apologies in advance for whatever
+inconvenience.
+
+,* The 'modus-themes-variable-pitch-headings' no longer has any effect.
+ Instead, users can specify a 'variable-pitch' property to the list
+ they pass to the 'modus-themes-headings' or 'modus-themes-org-agenda'
+ (examples below).
+
+,* All 'modus-themes-scale-*' options are removed. Scaling of headings
+ is now handled directly by the user options 'modus-themes-headings'
+ and 'modus-themes-org-agenda' (code samples below).
+
+,* The 'modus-themes-headings' option now accepts a floating point (see
+ function 'floatp') that represents the multiplier relative to the base
+ font size. This can be used to scale headings accordingly. Since
+ this option can target individual heading levels (for 1 through 8),
+ users can now implement their desired scale with greater precision.
+ Whereas before it was limited to the first four levels, admittedly for
+ no good reason.
+
+ The newly introduced 'variable-pitch' property can also be applied on
+ a per-level basis (making it easy to combine with existing properties,
+ such as a custom weight, for maximum control). Example:
+
+ ;; This is an alist: read the manual or its doc string.
+ (setq modus-themes-headings
+ '((1 . (variable-pitch light 1.6))
+ (2 . (overline semibold 1.4))
+ (3 . (monochrome overline 1.2))
+ (4 . (overline 1.1))
+ (t . (rainbow 1.05))))
+
+,* The 'modus-themes-org-agenda' follows the same design as the
+ 'modus-themes-headings' where appropriate. Headings that can be
+ scaled accept a floating point, while those that may be rendered in a
+ proportionately spaced font accept the 'variable-pitch' property. In
+ addition, a custom font weight is also supported in the relevant
+ places (just as with 'modus-themes-headings'). Overall, the interface
+ can now be tailored to the user's preferences with greater precision.
+
+ ;; This is an alist: read the manual or its doc string.
+ (setq modus-themes-org-agenda
+ '((header-block . (variable-pitch light 1.6))
+ (header-date . (bold-today grayscale underline-today 1.2))
+ (event . (accented varied))
+ (scheduled . uniform)
+ (habit . traffic-light)))
+
+,* The 'modus-themes-scale-small' that was used in the Org agenda
+ interface has been removed. No replacement is provided, as the
+ downsizing had the undesired effect of breaking the otherwise neat
+ alignment of elements on the grid.
+
+,* The 'modus-themes-mode-line-padding' option has been removed.
+ Instead, users can specify a natural number (positive integer)
+ directly in the list of properties passed to the
+ 'modus-themes-mode-line' variable. This has no effect when the
+ 'moody' property is also set, because the Moody library applies its
+ own padding. For example:
+
+ (setq modus-themes-mode-line '(borderless accented 4))
+
+ Though not related to changes on our end, users of Emacs 29 must now
+ set 'x-use-underline-position-properties' to nil for padding to work
+ properly (due to other adjustments upstream). This relates to Emacs
+ bug#52324 we had reported:
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52324>.
+
+,* All deuteranopia styles are consolidated in a single toggle:
+ 'modus-themes-deuteranopia'. The 'modus-themes-success-deuteranopia'
+ is thus rendered obsolete and superseded, while the individual
+ deuteranopia-friendly styles for diffs ('modus-themes-diffs') and the
+ Org agenda's habit graph ('modus-themes-org-agenda') are altogether
+ removed. As opposed to top-level forms, there is no clean way to
+ notify the user of the deprecation of individual values of a user
+ option.
+
+,* The "foreground only" style has been altogether removed from the user
+ option 'modus-themes-diffs'. It never was up to the aesthetic
+ standard of the themes even though the colours met the minimum 7:1
+ contrast ratio. There is a new section in the manual which documents
+ how to implement such a style with user-level configurations. Short
+ version:
+
+ (defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ `(modus-themes-diff-added ((,class :background unspecified :foreground ,green))) ; OR ,blue for deuteranopia
+ `(modus-themes-diff-changed ((,class :background unspecified :foreground ,yellow)))
+ `(modus-themes-diff-removed ((,class :background unspecified :foreground ,red)))
+
+ `(modus-themes-diff-refine-added ((,class :background ,bg-diff-added :foreground ,fg-diff-added)))
+ ;; `(modus-themes-diff-refine-added ((,class :background ,bg-diff-added-deuteran :foreground ,fg-diff-added-deuteran)))
+ `(modus-themes-diff-refine-changed ((,class :background ,bg-diff-changed :foreground ,fg-diff-changed)))
+ `(modus-themes-diff-refine-removed ((,class :background ,bg-diff-removed :foreground ,fg-diff-removed)))
+
+ `(modus-themes-diff-focus-added ((,class :background ,bg-dim :foreground ,green))) ; OR ,blue for deuteranopia
+ `(modus-themes-diff-focus-changed ((,class :background ,bg-dim :foreground ,yellow)))
+ `(modus-themes-diff-focus-removed ((,class :background ,bg-dim :foreground ,red)))
+
+ `(modus-themes-diff-heading ((,class :background ,bg-alt :foreground ,fg-main)))
+
+ `(diff-indicator-added ((,class :foreground ,green))) ; OR ,blue for deuteranopia
+ `(diff-indicator-changed ((,class :foreground ,yellow)))
+ `(diff-indicator-removed ((,class :foreground ,red)))
+
+ `(magit-diff-added ((,class :background unspecified :foreground ,green-faint)))
+ `(magit-diff-changed ((,class :background unspecified :foreground ,yellow-faint)))
+ `(magit-diff-removed ((,class :background unspecified :foreground ,red-faint)))
+ `(magit-diff-context-highlight ((,class :background ,bg-dim :foreground ,fg-dim))))))
+
+ ;; This is so that the changes persist when switching between
+ ;; modus-operandi and modus-vivendi
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+
+
+Removed support for packages
+============================
+
+The following are no longer supported by the themes. The reasons vary
+in each case, though they boil down to (i) the package being obsoleted,
+or (ii) the package's faces inheriting from base faces that we already
+support (e.g. font-lock). Each case was carefully considered as part of
+the comprehensive review of all packages supported by the themes, though
+chances are that some mistake was made regardless. If you believe a
+package should not have been removed, please report as much.
+
+,* ag
+,* apt-sources-list
+,* apt-sources-list
+,* buffer-expose
+,* counsel-org-capture-string
+,* define-word
+,* diredc
+,* disk-usage
+,* easy-kill
+,* flyspell-correct
+,* git-gutter{,fringe}+
+,* git-lens
+,* git-walktree
+,* highlight-blocks
+,* highlight-defined
+,* highlight-escape-sequences
+,* highlight-symbol
+,* highlight-tail
+,* hyperlist-mode
+,* isl (isearch-light)
+,* minibuffer-line
+,* mu4e-conversation
+,* no-emoji
+,* objed
+,* parrot
+,* phi-search
+,* pkgbuild-mode
+,* rainbow-identifiers
+,* sallet
+,* spell-fu
+,* spray
+,* swoop
+,* vdiff
+,* volatile-highlights
+
+
+Changes to supported faces or face groups
+=========================================
+
+,* Eliminated any possible exaggerations in wgrep faces. Those no longer
+ use coloured backgrounds. Instead they have colour-coded foreground
+ colours as well as a bold weight (they ultimately inherit from the
+ 'bold' face, which is a "hidden" customisation option, as explained in
+ the manual).
+
+,* Forced Org block delimiters to not extend their background by default
+ (though check 'modus-themes-org-blocks'). That was the intended
+ design all along, but now it needs to be made explicit. See, for
+ example, bug#52587 for Emacs:
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52587>
+
+,* Revised the 'org-sexp-date' face so that it no longer looks like
+ 'org-date'. Dates are clickable buttons: they work like links, so
+ they have an underline by default and are subject to the
+ 'modus-themes-links' user option. Whereas the 'org-sexp-date' is not
+ applied to interactive elements and must thus be visually distinct.
+
+ This face is used for diary-style entries in Org files. For example:
+
+ %%(diary-anniversary 2000 12 25) NAME %d%s birthday
+
+,* Rewrote several Auctex/Tex faces to inherit from base faces where
+ relevant (e.g. 'bold', 'success') as well as from font-lock faces. In
+ the latter case, the end-result makes Auctex/Tex subject to the
+ 'modus-themes-syntax' option. These refinements promote theme-wide
+ consistency without detracting from the established styles.
+
+,* Improved Git (Magit) commit faces for warnings or errors. This
+ concerns two cases:
+
+ 1. The summary line exceeds the recommended limit of 50 characters.
+ This now uses a yellow foreground colour which contrasts well with
+ the summary line's new blue hue (blue and yellow are complementary
+ for our purposes, meaning that they have good contrast in hueness).
+
+ 2. The second line (the one right below the summary) has text that
+ should not be there. This one is coloured in a shade of red, which
+ again contrasts well with blue.
+
+ Thanks to Damien Cassou for noticing in issue 261 that the previous
+ style of applying tinted backgrounds did not work well when
+ 'hl-line-mode' was enabled ('hl-line-mode' overrides backgrounds and
+ so the warnings/errors where not always obvious):
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/261>.
+
+,* Added support for the new 'magit-branch-warning' face that we helped
+ upstream define: <https://github.com/magit/magit/issues/4550>. It
+ disambiguates warnings in Magit status buffers from the generic and
+ often inappropriate for such a context 'font-lock-warning-face'.
+
+,* Simplified all the Apropos faces. They no longer look like buttons or
+ links as that makes the presentation of 'M-x apropos' very busy.
+ Instead, they now only have a foreground colour.
+
+,* Updated support for org-roam faces by removing old entries and
+ covering new ones.
+
+,* Replaced old company-mode faces with their new aliases:
+
+ - company-scrollbar-bg => company-tooltip-scrollbar-thumb
+ - company-scrollbar-fg => company-tooltip-scrollbar-track
+
+,* Made 'org-column-title' inherit from 'fixed-pitch' when the user
+ option 'modus-themes-mixed-fonts' is non-nil. This is needed to line
+ up columns correctly. Thanks to Björn Lindström for the contribution
+ in merge request 52:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/52>.
+
+,* Forced the 'org-colview' faces to use the same height, even when
+ headings are scaled (see 'modus-themes-headings'). This ensures that
+ the columns are aligned properly and text fits on the same row.
+ Thanks to Björn Lindström for the contribution in merge request 53:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/53>.
+
+,* Refrained from applying a bold weight to the Org date selection
+ indicator in the calendar. The use of bold has the potential to create
+ problems with the alignment of dates for certain typefaces that do not
+ have a proper bold variant. Also, there is no need for added emphasis
+ given that we already use a prominent background colour.
+
+,* Made 'M-x org-table-header-line-mode' or the third-party package
+ 'org-table-sticky-header' use colours that fit better with those of
+ tables.
+
+,* Removed explicit styling of the 'magit-branch-current' face because
+ its definition checks if the ':box' attribute can be set and if not, it
+ uses ':inverse-video'. Useful for terminal emulators.
+
+,* Expanded support for the 'mode-line-active' face for Emacs29. The
+ face upstream basically adds proportionately spaced fonts (the
+ 'variable-pitch' face) to the mode line. The themes can already use
+ that if the user option 'modus-themes-variable-pitch-ui' is non-nil.
+ Thanks to Manuel Uberti for the feedback in issue 257:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/257>.
+
+,* Implemented some stylistic refinements for ERC and Rcirc to ensure
+ theme-wide consistency (e.g. timestamps are a shade of cyan).
+
+,* Tweaked adoc-mode faces for stylistic theme-wide consistency.
+
+,* Refashioned all the git faces of Treemacs so that they are more
+ consistent with other such contexts or uses. The new styles also
+ conform with the 'modus-themes-deuteranopia' option.
+
+
+Miscellaneous
+=============
+
+,* Ended the wanton use of internal functions in places that did not
+ require them. Instead, the themes define faces that evaluate such
+ functions once and pass their results to the relevant entries. Cases
+ include:
+
+ - Symlink and/or broken link faces in contexts such as Dired,
+ Eshell, Helm, Trashed.
+
+ - Tabbed interfaces (tab-bar, tab-line, centaur-tabs).
+
+ - Verbatim markup or that of inline code in Org, Markdown, Asciidoc,
+ etc.
+
+ - The optional use of 'variable-pitch' for User Interface elements
+ (see 'modus-themes-variable-pitch-ui').
+
+,* Refined the dedicated diff background colours of modus-vivendi that
+ are used when the user option 'modus-themes-deuteranopia' is non-nil.
+ The changes improve the distinction between all red and yellow
+ constructs in contexts where they appear together (e.g. smerge-mode).
+ Basically, yellows will look more bright, while reds appear as
+ brown. The corresponding blues are toned down a bit to be consistent
+ with the other colours. Consequently, the standard shades of green
+ for added lines (when 'modus-themes-deuteranopia' is nil) are
+ recalibrated to combine well with all other values.
+
+,* Made several faces return an 'unspecified' value instead of nil for
+ their unused attributes under certain circumstances. This is to guard
+ against third-party code that unconditionally expects a non-nil value.
+
+,* Omitted {over,under}line attributes from the mode line when the
+ 'padded' property is added to the 'modus-themes-mode-line' user
+ option. Those are not necessary in that context. Thanks to Illia
+ Ostapyshyn for the contribution in merge request 54:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/54>
+
+,* Rewrote several internal functions in the interest of consistency and
+ clarity.
+
+,* Deleted two user options that were long obsolete: (i)
+ 'modus-themes-org-habit' has been superseded by
+ 'modus-themes-org-agenda' since version 1.5.0 of the themes and (ii)
+ 'modus-themes-intense-hl-line' has been replaced by
+ 'modus-themes-hl-line' since version 1.3.0.
+
+,* Removed parentheses from headings in the manual as they are invalid
+ characters for some version of Texinfo. See Emacs bug#52126:
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=52126>.
+
+,* Updated all doc strings so that quoted lists yield valid syntax in
+ Help buffers; syntax that can be directly evaluated (otherwise Emacs
+ prettifies straight quotes as curly ones, which break the code).
+ Thanks to Christian Tietze for bringing this issue to my attention:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/248#note_753169268>.
+
+,* Rewrote all sections of the manual to document the current state of
+ the project as pertains to valid user options, explicitly supported
+ face groups, and so on.
+#+end_src
+
+* 1.7.0
+:PROPERTIES:
+:CUSTOM_ID: h:22de7065-f54c-4944-b47f-3cc8a30551c8
+:END:
+
+#+begin_src text
+Modus themes version 1.7.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2021-11-18
+
+The present entry records the changes made to the project since the
+release of version 1.6.0 on 2021-09-29. There have been more than 60
+commits since then.
+
+Every modification pertaining to colour combinations referenced herein
+is implemented in accordance with the primary accessibility objective of
+the themes for a minimum contrast ratio of 7:1 between background and
+foreground values in their given combination (the WCAG AAA standard).
+Edits also account for colour-coding that is optimised for the needs of
+users with red-green colour deficiency (deuteranopia).
+
+To access the URL of the manual visit this web page:
+<https://protesilaos.com/emacs/modus-themes>. Or read it from Emacs by
+evaluating this form:
+
+ (info "(modus-themes) Top")
+
+The themes are built into Emacs version 28 (next stable release), and
+are available on GNU ELPA as well as other archives. This release is
+the first one that is included with Emacs 29, or else the 'master'
+branch in emacs.git.
+
+
+Customisation options
+=====================
+
++ The 'modus-themes-no-mixed-fonts' has been deprecated and replaced by
+ the 'modus-themes-mixed-fonts'. This is a breaking change for users
+ who want to use "mixed fonts": they must set the new variable to
+ non-nil.
+
+ As the name implies, the new variable changes the meaning of the
+ feature to make it opt-in by default. This is consistent with the
+ principle of least surprise, as users may not know why some fonts look
+ different than others in certain cases.
+
+ Thanks to Christian Tietze for clarifying the doc string of this new
+ user option in merge request 51:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/51>.
+
+ For context, "mixed fonts" refers to a design where spacing-sensitive
+ constructs, such as code blocks and Org tables, inherit from the
+ 'fixed-pitch' face to remain monospaced (and properly aligned) at all
+ times. Depending on the user's configurations, the 'fixed-pitch' face
+ may not use the typeface that the user expects.
+
+ The manual provides information on how to set the desired fonts by
+ editing the 'default', 'fixed-pitch', and 'variable-pitch' faces.
+
++ The new 'modus-themes-mode-line-padding' can be used to control the
+ apparent padding of the mode line when the user option
+ 'modus-themes-mode-line' includes the 'padded' property. The padding
+ must be a positive integer (otherwise the code would be needlessly
+ complex to guard against values that make the mode line look awkward,
+ like anything lower than -3 or maybe even -2).
+
+ Thanks to Guilherme Semente and Manuel Uberti for the feedback in
+ issue 245: <https://gitlab.com/protesilaos/modus-themes/-/issues/245>.
+
+ Note that the out-of-the-box style of the themes has a padding of 1
+ (technically a ':line-width' of 1 for the ':box' attribute), whereas
+ the default style of Emacs has it at -1. This is a design choice to
+ avoid an overlap between the outer boundaries of a font's glyphs and
+ the borders of the mode line, when using certain common typefaces at
+ various point sizes. Such an overlap can hinder readability.
+
+ The manual contains a new Do-It-Yourself (DIY) section with detailed
+ code samples on how to apply a negative value.
+
++ The new 'modus-themes-intense-markup' option can be set to non-nil to
+ make constructs such as inline code and verbatim text more colourful.
+ This has a general utility, though its consideration was prompted by a
+ phenomenon reported by Stefan Kangas in issue 238 where the overlay of
+ the 'hl-line-face' overrides the subtle background these constructs
+ use and can thus make them virtually indistinguishable from ordinary
+ text: <https://gitlab.com/protesilaos/modus-themes/-/issues/238>.
+
+ Such is the standard behaviour of 'hl-line-mode' and there is nothing
+ a theme can (or rather "should") do about it. Thanks to Stefan Kangas
+ for the feedback.
+
++ The 'modus-themes-headings' option can now accept and apply an exact
+ font weight such as 'semibold' or 'light'. (The list of available
+ weights is the value of the 'modus-themes--heading-weights' internal
+ variable.) This supersedes the now-deprecated 'no-bold' property:
+ 'no-bold' is henceforth understood as the presence of a 'regular'
+ weight.
+
+ Recall that this user option is an alist and can be used to target
+ heading levels individually, which further reinforces the utility of
+ this new property.
+
+ Thanks to Christian Tietze for suggesting this idea in issue 248:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/248>. And
+ thanks to Daniel Mendler for refining its implementation in commit
+ 54bfd62, which was sent as a patch file (yes, we accept those and I
+ actually prefer them over a web app's UI).
+
++ The 'modus-themes-org-agenda' has seen improvements to its 'event' key
+ (this is an alist that has multiple keys). It now accepts a 'varied'
+ property which differentiates between (i) plain timestamp entries and
+ (ii) entries that are generated from either the diary or a symbolic
+ expression. The 'varied' property combines with the other available
+ properties to particularise their effects. Consult the doc string or
+ the manual for the technicalities.
+
+ Thanks to Gustavo Barros for the detailed commentary in issue 241:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/241>.
+
++ The 'modus-themes-lang-checkers' now accepts a 'faint' property. This
+ has the effect of toning down the colours in use. By default, the
+ only colour is that of the underline, though more can be added by
+ combining the properties accepted by this user option. Consult its
+ doc string or the manual for further details.
+
+ Thanks to Morgan Smith for suggesting the idea in issue 239:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/239>.
+
+
+Add support for new packages or face groups
+===========================================
+
++ 'company-tooltip-deprecated' face. Thanks to Roman Rudakov for the
+ feedback in issue 247: <https://gitlab.com/protesilaos/modus-themes/-/issues/247>.
+
++ 'corfu-default' face. Thanks to Daniel Mendler (Corfu's developer)
+ for the feedback in issue 254:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/254>.
+
++ 'image-dired' package (Emacs 29). Thanks to Stefan Kangas for making it
+ happen in emacs.git and for the feedback in issue 250:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/250>.
+
++ 'nano-modeline' package.
+
++ 'vertico-quick' package. Thanks to Nicolas De Jaeghere for the
+ contribution in merge request 48:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/51>.
+
+
+Changes to existing faces or face groups
+========================================
+
++ Added support for the new Org agenda faces that improve the
+ contextuality of various views. We implemented those upstream for Org
+ version 9.5 in close cooperation with Gustavo Barros. Thanks to
+ Gustavo for the detailed feedback in issue 241:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/241>. The
+ thread about the patch upstream:
+ <https://list.orgmode.org/87lf7q7gpq.fsf@protesilaos.com/>
+
++ Refined Org agenda date faces in the interest of consistency and in
+ accordance with the aforementioned change. Thanks again to Gustavo
+ Barros for the discussion in issue 241.
+
++ Applied the 'shadow' face more consistently across all contexts where
+ only a subtle foreground value is expected. This design choice makes
+ it possible for users to manually edit the foreground colour of
+ 'shadow' to something even more subtle than the 'fg-alt' palette
+ variable we use, which maps to a gray colour (e.g. they could use
+ "gray50").
+
++ Implemented a subtle background colour to the 'widget-inactive' face.
+ This makes it easier to discern inactive buttons, checkboxes, and the
+ like, in contexts such as the Customize User Interface. Thanks to
+ Stefan Kangas for the feedback in issue 242:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/242>.
+
++ Tweaked 'file-name-shadow' to also use italics (inherit from the
+ 'italic' face) in order to be more easy to distinguish it from
+ ordinary text in the minibuffer.
+
+ Recall that the manual documents the meaning of inheriting from the
+ 'bold' and 'italic' faces instead of hardcoding a bold weight and an
+ italic slant, respectively. In short: users can change the weight to
+ what they want (e.g. semibold) and/or use distinct font families.
+
++ Amplified the style of Version Control (VC) warnings and errors to let
+ them draw more attention to themselves (because these indicators need
+ to be acted upon).
+
++ Recoloured the 'custom-group-tag' face to make it fit better in its
+ context and be consistent with the rest of the themes' established
+ patterns.
+
++ Made marks for selection in Dired, Ibuffer, and related, conform with
+ the 'modus-themes-success-deuteranopia' option. This means that they
+ use blue colours when the option is non-nil, instead of their default
+ shades of green.
+
++ Adjusted the box width of key bindings for Emacs 28 or higher. They
+ should no longer cause any alignment issues. This style is now used
+ throughout the themes, including in transient views (e.g. Magit) which
+ were the exception before. Thanks to Manuel Uberti and Kevin Fleming
+ for the feedback in issue 232:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/232>.
+
+
+Miscellaneous
+=============
+
++ Wrote a brief description of every user option in the manual. Also
+ covered its type, as in boolean, alist, et cetera.
+
++ Corrected the mode line border width for one combination of properties
+ in the 'modus-themes-mode-line' option. This should now have the same
+ height as all others:
+
+ (setq modus-themes-mode-line '(accented borderless))
+
++ Ensured that mode line attributes would not be set to nil, but kept at
+ an 'unspecified' value instead, where relevant. This avoids problems
+ with [faulty] code that unconditionally depends on something that does
+ not exist, as in the following while ':box' is nil:
+
+ (face-attribute 'mode-line :box)
+
++ Expanded, reworded, or otherwise improved the manual, based on the
+ aforementioned.
+
+Thanks once again to everyone involved!
+#+end_src
+
+* 1.6.0
+:PROPERTIES:
+:CUSTOM_ID: h:e4b9945c-1db8-4626-abc9-372469b19253
+:END:
+
+#+begin_src text
+Modus themes version 1.6.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2021-09-29
+
+This entry records the changes made to the project since the release of
+version 1.5.0 on 2021-07-15. There have been around 70 commits since
+then.
+
+Every colour-related modification referenced herein is always
+implemented in accordance with the primary accessibility objective of
+the themes for a minimum contrast ratio of 7:1 between background and
+foreground values in their given combination (the WCAG AAA standard).
+Such edits also account for colour-coding that is optimised for the
+needs of users with red-green colour deficiency (deuteranopia or
+variants).
+
+Here is the URL of the manual: <https://protesilaos.com/emacs/modus-themes>.
+Or read it from Emacs by evaluating this form:
+
+ (info "(modus-themes) Top")
+
+The themes are built into Emacs version 28 (current development target),
+and are available on GNU ELPA as well as other archives. This release
+is the final one for the emacs-28 branch, as that gets cut as the next
+stable release of GNU Emacs. Future releases will target Emacs 29 once
+that becomes the new 'master' branch.
+
+
+Customisation options
+=====================
+
+[ Themes need to be reloaded for changes to take effect. ]
+
++ Introduced the new 'modus-themes-tabs-accented' boolean option. When
+ set to non-nil, it renders the background of all tab interfaces in a
+ shade of blue. Those interfaces are tab-bar (built-in), tab-line
+ (built-in), and Centaur tabs.
+
+ - The background "accented" colour is the same as the one used for
+ mode lines when 'modus-themes-mode-line' is configured accordingly.
+
++ Tweaked the 'modus-themes-mode-line' to accept a 'padded' symbol as
+ part of the list of properties it can read. This will increase the
+ spacing around the mode lines' text, making the line taller overall
+ but also more spacious.
+
+ Thanks to Manuel Uberti for making the proposal and providing feedback
+ in issue 228: <https://gitlab.com/protesilaos/modus-themes/-/issues/228>.
+
++ Added the 'modus-themes-scale-small' which complements the existing
+ scale values with one that is meant to be smaller than the base
+ height. This option is reserved for special cases and is currently
+ only used as an opt-in feature in the Org agenda.
+
++ Expanded the 'modus-themes-org-agenda' with more parameters:
+
+ - The current date can now also be underlined.
+ - Date headings can be scaled/enlarged in size.
+ - Events, like those of the Diary or sexp entries, can be customised.
+
+ Consult the manual or the variable's doc string for the details.
+
++ Removed the obsoleted aliases 'modus-themes-slanted-constructs' and
+ 'modus-themes-scale-5'. Those are superseded by the more
+ appropriately named 'modus-themes-italic-constructs' and
+ 'modus-themes-scale-title'.
+
+ Thanks to Nicolas De Jaeghere for the patch in merge request 47:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/47>.
+
+
+Faces and face groups
+=====================
+
++ Make the 'prodigy' faces for red/green/yellow inherit from the faces
+ 'error'/'success'/'warning', respectively. This is done to (i) avoid
+ duplication and (ii) ensure that the green/success colour coding is
+ consistent with the goal of the themes to empower users with red-green
+ colour deficiency. The boolean option that changes all such greens to
+ shades of blue is 'modus-themes-success-deuteranopia'.
+
++ Assigned the ':extend' attribute to the 'org-code' face. This is
+ necessary when the Org source contains lines that start with a colon
+ sign. Those are interpreted as code blocks. For example:
+
+ : #+BEGIN_SRC emacs-lisp
+ : (defun in-interval (bounds el)
+ : (and (>= el (car bounds)) (<= el (cadr bounds))))
+ : #+END_SRC
+
+ With the ':extend' in place, the background stretches to the edge of
+ the window, thus giving those lines a uniform rectangular shape. For
+ inline uses of 'org-code', the background should remain limited to the
+ span of the text.
+
++ Broadened support for 'marginalia' faces in two phases.
+
+ - The first pertained to the file permissions that are shown when
+ completing against file paths. Their style is similar to what
+ 'dired+' or the 'direfl' packages provide, however we have taken
+ care to optimise the interface for the purposes of completion
+ UIs---where things can look like Dired, we make them alike, but
+ where they must differ, we differentiate the designs accordingly.
+ There can be no compromises or arbitrary constraints.
+
+ Also read: <https://github.com/minad/marginalia/pull/91>.
+
+ - The second batch covered all sorts of extra classes that provide
+ granular control over the appearance of Marginalia instances.
+ Refinements also had to be made to already-supported faces for the
+ sake of achieving consistency across the various Marginalia
+ interfaces.
+
+ Also read: <https://github.com/minad/marginalia/pull/92>.
+
++ Refined 'diredfl' and 'dired+' faces. For the various "priv" faces,
+ the intent is to increase the difference in hueness between adjacent
+ file permissions (the changes are minor, but they do change the
+ overall result). Numbers are toned down so that they do not clash
+ with dates. The file suffix no longer uses cyan to stand out more in
+ detailed views.
+
++ Made 'icomplete-selected-match' (Emacs28) more legible by aligning its
+ presentation with metaphors that are estaslished across the
+ modus-themes. Thanks to Kévin Le Gouguec (peniblec) for noting the
+ inconsistency with the new face upstream and for writing the patch for
+ it in merge request 50:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/50>.
+ Also thanks to Manuel Uberti for confirming that things would look
+ consistent in the comments' section of that merge request.
+
++ Fixed faulty inheritance for the 'web-mode-keyword-face'. It should
+ now properly copy the attributes of 'font-lock-keyword-face'.
+
++ Made inheritance of the new 'help-key-binding' (Emacs28 key) the
+ default for all faces that need to style key bindings.
+
+ In Emacs 28 all key bindings are automatically displayed with the face
+ 'help-key-binding' which uses some new face attributes to draw a
+ cleaner box around it. Given that the themes must work with earlier
+ versions of Emacs, we cannot inherit it unconditionally so we added
+ the relevant conditionality. It is nice to offer this feature to
+ those who use the themes on Emacs 28. Older versions retain the
+ previous style of a blue colour coupled with a bold weight.
+
+ The exception to this rule is the transient.el faces (this is the
+ pop-up window used by Magit, among others---transient.el is now built
+ into Emacs). The box effect creates unpredictable misalignments, so
+ we default to the old key binding style for those.
+
+ Thanks to Manuel Uberti and Kevin Fleming for their feedback in issue
+ 232: <https://gitlab.com/protesilaos/modus-themes/-/issues/232>.
+
++ Added support for the new 'notmuch-jump-key' face. I contributed this
+ face in commits c37c9912, 5cc106b0 to the Notmuch git repo:
+ <https://git.notmuchmail.org/git/notmuch>.
+
++ Updated the 'bookmark-face' (Emacs28) as it has been changed upstream
+ to be a fringe indicator instead of an in-buffer, line-wide background
+ highlight.
+
++ Aligned Ediff faces with other 'modus-themes-diffs' styles. Before we
+ would differentiate a "focus state", though that is now considered
+ surplus to requirements. The notion of a "focus state" only make
+ sense in Magit which applies variegated colour-coding to diff hunks
+ based on their state. Whereas non-active Ediff changes are grayed
+ out, so there is no need for further colour-coding nuances. The most
+ noticeable change is with:
+
+ (setq modus-themes-diffs 'bg-only)
+
+ As noted in the commit message of 64c74ae (from 2021-09-04):
+
+ If users think this change is for the worse, we can always define a
+ helper function like this:
+
+ (defun modus-themes--ediff-style (bgonly default)
+ "Diff style for Ediff.
+ BGONLY and DEFAULT depend on the value of `modus-themes-diffs'.
+ The former is more subtle."
+ (if (eq modus-themes-diffs 'bg-only)
+ (list bgonly)
+ (list default)))
+
+ And apply it thus:
+
+ `(ediff-current-diff-A ((,class :inherit ,@(modus-themes--ediff-style
+ 'modus-themes-diff-removed
+ 'modus-themes-diff-focus-removed))))
+
+ No feedback was received towards that end in about a month, so we
+ consider the change to be acceptable, without prejudice to the
+ possibility of future updates.
+
++ Unified the styles of 'org-agenda-calendar-sexp', 'org-agenda-diary',
+ and 'org-agenda-calendar-event'. This is not a user-facing change but
+ an internal refactoring to avoid repetition. It also makes things
+ easier for the implementation of the 'modus-themes-org-agenda' (as
+ mentioned above).
+
++ Ensured that the 'bookmark-menu-bookmark' face inherits from the
+ 'bold' face. By default it hardcodes the bold weight, whereas we
+ instruct it to inherit the 'bold' face. A user can thus change the
+ ':weight' of that face to whatever they want, like semibold,
+ extrabold, etc. We do this throughout the themes for bold and
+ italics---consider it a "hidden feature" of sorts. Check the manual
+ for more on the matter:
+
+ (info "(modus-themes) Configure bold and italic faces (DIY)")
+
++ Provided support for tab-bar groups (Emacs28). Specifically the faces
+ 'tab-bar-tab-group-current' and 'tab-bar-tab-group-inactive'.
+
+ Thanks to Adam Porter (alphapapa) for the feedback in issue 8 over at
+ the Github mirror: <https://github.com/protesilaos/modus-themes/issues/8>.
+
++ Decoupled the 'stripes' face from that of 'hl-line-face'. This is
+ because the stripes are not meant to change depending on the value of
+ the user option 'modus-themes-hl-line'.
+
++ Revised the red shade of "flagged" entries in mu4e and notmuch. Those
+ are now consistent with Gnus. The shade of red that was used before
+ was closer to the orange side of the spectrum whereas the current has
+ hints of blue (a cherry colour) and thus combines better with the cyan
+ and blue that prevail in those interfaces. These are fine margins,
+ though the effect is noticeable regardless.
+
++ Configured the new 'ansi-color' faces (Emacs28) which are used by
+ shells and terminals (among others). Thanks to Manuel Uberti for
+ reporting the changes to upstream Emacs in issue 236:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/236>.
+
++ Expanded support for EMMS faces, pertaining to its browser views.
+ Thanks to Feng Shu (tumashu) for bringing those to my attention in
+ issue 11 over at the Github mirror:
+ <https://github.com/protesilaos/modus-themes/issues/11>.
+
++ Styled the new 'tab-line-tab-modified' face (Emacs28). It should now
+ use a faint red colour to denote changes to the underlying file.
+ Thanks to Adam Porter (alphapapa) for bringing it to my attention in
+ issue 12 over at the Github mirror:
+ <https://github.com/protesilaos/modus-themes/issues/12>.
+
++ Configured the single face that the 'cursor-flash' package has to
+ offer. Thanks to Manuel Uberti for the feedback in issue 231:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/231>.
+
++ Included 'elpher' in the list of supported packages by means of
+ covering the heading faces it implements.
+
++ Recalibrated certain dedicated colours for inactive tabs and tweaked
+ tab faces to (i) marginally improve the default aesthetic and (ii)
+ harmonise it with the style of 'modus-themes-tabs-accented'.
+
++ Removed the foreground attribute from all markup faces that are meant
+ to denote emphasis in italics. That is because such faces are
+ typically composed with others, so we do not wish to inadvertently
+ override any other colour that would otherwise have taken effect.
+
++ Wrote the faces for upstream Org that improve the contextuality of
+ various agenda views (included in version 9.5). This was done in
+ close collaboration with Gustavo Barros who offered detailed feedback
+ in issue 208 (which also led to the creation and eventual expansion of
+ the 'modus-themes-org-agenda' user option):
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/208>.
+
+ Four new faces improve certain styles and offer more flexibility for
+ some Org agenda views: 'org-agenda-date-weekend-today',
+ 'org-imminent-deadline', 'org-agenda-structure-secondary',
+ 'org-agenda-structure-filter'. They inherit from existing faces in
+ order to remain backward-compatible.
+
+ Quoting from <https://list.orgmode.org/87lf7q7gpq.fsf@protesilaos.com/>:
+
+ + The 'org-imminent-deadline' is useful to disambiguate generic
+ warnings from deadlines. For example, a warning could be
+ rendered in a yellow colored text and have a bold weight,
+ whereas a deadline might be red and styled with italics.
+
+ + The 'org-agenda-structure-filter' applies to all tag/term
+ filters in agenda views that search for keywords or patterns.
+ It is designed to inherit from 'org-agenda-structure' in
+ addition to the 'org-warning' face that was present before (and
+ removes the generic 'warning' face from one place). This offers
+ the benefit of consistency, as, say, an increase in font height
+ or a change in font family in 'org-agenda-structure' will
+ propagate to the filter as well. The whole header line thus
+ looks part of a singular design.
+
+ + The 'org-agenda-structure-secondary' complements the above for
+ those same views where a description follows the header. For
+ instance, the tags view provides information to "Press N r" to
+ filter by a numbered tag. Themes/users may prefer to
+ disambiguate this line from the header above it, such as by
+ using a less intense color or by reducing its height relative to
+ the 'org-agenda-structure'.
+
+ + The 'org-agenda-date-weekend-today' provides the option to
+ differentiate the current date on a weekend from the current
+ date on weekdays.
+
+Other patches I have made to, inter alia, emacs.git and org.git with
+regard to faces are documented in previous change log entries.
+
+
+Documentation
+=============
+
++ Removed references to old versions of the themes from before their
+ refactoring in version 1.0.0. Those old packages no longer exist.
+ Users must install the 'modus-themes' and then load either of
+ 'modus-operandi' or 'modus-vivendi'.
+
++ Included various extensions of the Vertico package in the list of
+ indirectly supported packages. Those define faces which either
+ inherit from basic ones that we already support or use colours that
+ are consistent with our accessibility target.
+
++ Referenced 'side-hustle', 'tide', 'bufler' as an indirectly supported
+ packages for the same reasons.
+
++ Simplified time-stamp local variables that are used in modus-themes.el
+ to show the time the file was edited. We apply 'time-stamp-pattern'
+ instead of setting multiple time-stamp variables. Thanks to Stephen
+ Gildea for the patch, which was sent to me via email (yes, you can
+ always do that).
+
++ Updated the manual's "acknowledgements" section to name all new
+ contributors to code/ideas/feedback.
+
++ Furnished information on how to configure the 'highlight-parentheses'
+ package and extend its faces for use with the themes. The entry
+ provides a complete Elisp implementation.
+
++ Improved the code samples for the prism.el setup that users may wish
+ to set up by themselves. The new lists of colours work better when
+ Prism's colouration is limited to a small set of hues.
+
++ Deleted trailing whitespace in the manual which had adverse effects
+ when trying to compile the modus-themes.org over at emacs.git. Thanks
+ to Philip Kaludercic for the patch in merge request 49:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/49>.
+
+Thanks again to everyone involved. Looking forward to see the Modus
+themes, version 1.6.0, as part of the next stable release of Emacs.
+#+end_src
+
+* 1.5.0
+:PROPERTIES:
+:CUSTOM_ID: h:05fc633d-69d6-4b5e-aade-1f9e4ba30ed3
+:END:
+
+#+begin_src text
+Modus themes version 1.5.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2021-07-15
+
+This entry outlines the set of changes made to the project since the
+release of version 1.4.0 on 2021-05-25. There have been over 130
+commits since then.
+
+Every colour-related modification referenced herein is always
+implemented in accordance with the primary accessibility objective of
+the themes for a minimum contrast ratio of 7:1 between background and
+foreground values in their given combination (the WCAG AAA standard).
+Such edits also account for colour-coding that is optimised for the
+needs of users with red-green colour deficiency (deuteranopia or
+variants).
+
+Here is the URL of the manual: <https://protesilaos.com/emacs/modus-themes>.
+Or read it from Emacs by evaluating this form:
+
+ (info "(modus-themes) Top")
+
+The themes are built into Emacs version 28 (current development target),
+and are available on GNU ELPA as well as other archives.
+
+
+Customisation options
+=====================
+
+Overview of new style of sets of properties
+-------------------------------------------
+
+Several variables now accept a list of symbols as a value. Those
+represent properties, which can be combined with each other to realise
+the possible styles. The idea was to simplify their specification in
+order to make them easier to both maintain and extend. Thanks to Philip
+Kaludercic for introducing this concept in issue 210:
+<https://gitlab.com/protesilaos/modus-themes/-/issues/210>.
+
+The variables are:
+
++ 'modus-themes-prompts' by Philip Kaludercic in merge request 43:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/43>
+
++ 'modus-themes-mode-line' by Philip Kaludercic in merge request 40:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/40>.
+
++ 'modus-themes-lang-checkers' by Philip Kaludercic in merge request 46:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/46>
+
++ 'modus-themes-org-agenda'
++ 'modus-themes-links'
++ 'modus-themes-headings'
++ 'modus-themes-hl-line'
++ 'modus-themes-paren-match'
++ 'modus-themes-region'
++ 'modus-themes-syntax'
+
+Take 'modus-themes-syntax' as an example. Up until version 1.4.0, it
+would only accept a symbol, signifying a predefined style. So we had
+the possible value 'faint' and another 'faint-yellow-comments'. To make
+a third variant of the "faint" aesthetic, such as by combining it with
+the "alt syntax" and/or "green strings", we would need to write new
+presets in the form of 'faint-green-strings', 'faint-alt-syntax',
+'faint-alt-syntax-green-strings', 'faint-green-strings-yellow-comments',
+'faint-alt-syntax-green-strings-yellow-comments'. That would have been
+inefficient, hence why it was not done.
+
+With the new approach of defining a list of properties, those
+combinations are all possible. Such as:
+
+ (setq modus-themes-syntax '(faint alt-syntax))
+
+ (setq modus-themes-syntax '(yellow-comments alt-syntax green-strings))
+
+The order in which the properties are set is not significant.
+
+The doc string of each of the aforementioned variables, or the
+corresponding entry in the manual, provides guidance on how to configure
+things. The old forms will continue to work for the time being, though
+they are considered deprecated and will stop being supported at a future
+date.
+
+
+Changes in stylistic variants for variables with sets of properties
+-------------------------------------------------------------------
+
++ The meaning of the "alt syntax" style in 'modus-themes-syntax' has
+ been redefined. In the past, it used to have green-coloured strings
+ and doc strings. Those are now red. Some other changes have been
+ implemented to make the overall looks more consistent. Users who
+ liked the old style can retain it by passing this list of properties:
+
+ (alt-syntax green-strings)
+
+ New styles for the "faint" aesthetic are possible, here shown as lists
+ of properties:
+
+ (faint green-strings)
+ (faint alt-syntax)
+ (faint alt-syntax green-strings)
+
+ To each of those the 'yellow-comments' property can be added as well.
+
+ Consult the doc string or the manual for the technicalities and code
+ samples.
+
++ The 'modus-themes-hl-line' no longer has styles that include only an
+ underline. Those proved to be problematic under certain circumstances
+ and were thus removed.
+
+ Minor changes have been implemented to make the following combination
+ of properties more consistent, by colourising the underline:
+
+ (accented intense underline)
+
++ The 'modus-themes-paren-match' now has styles that include an
+ 'underline' property. Those extend the old options, such as:
+
+ (bold intense underline)
+
++ The 'modus-themes-headings' have an improved set of styles for the "no
+ text color" aesthetic. Those involve the 'monochrome' property, which
+ can now yield results that include a background (whereas before it was
+ just colourless text for the headings, optionally without a bold
+ weight). As this is an alist, here is an example (always check the
+ docs for fully fledged code samples):
+
+ (setq modus-themes-headings
+ '((1 . (background overline))
+ (2 . (overline background rainbow))
+ (t . (monochrome no-bold background))))
+
+ To allow a heading level N to retain its original style, a 't' value
+ can be passed. In the previous version of the themes, it was possible
+ to use 'nil' for the same purpose, though that is no longer valid. In
+ those cases, the fallback value of the alist will be used instead,
+ such as what is noted above:
+
+ (t . (monochrome no-bold background))
+
++ The 'modus-themes-links' provide several new possible styles, due to
+ an expanded set of properties that includes, among others, 'bold',
+ 'italic', and 'background'. The documentation covers the details.
+
++ The 'modus-themes-lang-checkers' can now attain a style that uses a
+ prominently coloured background in addition to what was available
+ before as a subtle background and the other variants.
+
+
+New variables
+-------------
+
++ The 'modus-themes-org-agenda' provides the means to refashion the
+ entirety of the Org agenda buffer. The value it accepts is an alist,
+ with some keys expecting a symbol and others a list of properties.
+ The minutia are covered in its doc string. A possible configuration
+ can look like this:
+
+ (setq modus-themes-org-agenda
+ '((header-block . (variable-pitch scale-title))
+ (header-date . (grayscale workaholic bold-today))
+ (scheduled . uniform)
+ (habit . traffic-light)))
+
+ 'modus-themes-org-agenda' supersedes the old variable that was specific
+ to the Org habit graph: 'modus-themes-org-habit'. There now is a
+ 'habit' key which accepts the same values as before, plus a new style
+ that is optimised for users with red-green colour deficiency:
+ 'traffic-light-deuteranopia'. Please consult the doc string of
+ 'modus-themes-org-agenda' or the relevant entry to the manual.
+
+ Thanks to Gustavo Barros for contributing to the creation of this
+ variable as well as to all other changes in the relevant faces that
+ were done in the interest of usability. A full report about
+ 'modus-themes-org-agenda' with screen shots is available here:
+ <https://protesilaos.com/codelog/2021-06-02-modus-themes-org-agenda/>.
+
+ A patch has been sent to upstream Org, with its review pending, which
+ improves upon some of the areas we had identified:
+ <https://lists.gnu.org/archive/html/emacs-orgmode/2021-06/msg00092.html>.
+
++ The 'modus-themes-inhibit-reload' controls a new behaviour of
+ automatically reloading the active theme when an option is set via the
+ Custom interfaces or with 'customize-set-variable'. To opt-in to this
+ feature, set the variable to a 'nil' value.
+
+ Thanks to Philip Kaludercic for implementing this in merge request 40:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/40>.
+
+ In the development phase of this option, a bug was identified
+ pertaining to recursion, as reported by Gustavo Barros in issue 213:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/213>. Changes
+ have been made to remove that possibility, as found in merge request
+ 45: <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/45>.
+
+ A thread was started on the emacs-devel mailing list to inquire upon
+ the technicalities of this option, but it did not gain any traction:
+ <https://lists.gnu.org/archive/html/emacs-devel/2021-06/msg00828.html>.
+
+ As such, we have decided to take our chances by pressing on with this
+ feature. Users who are interested in it are encouraged to give it a
+ try and report any possible complications. Issue 213 remains open.
+
++ The 'modus-themes-italic-constructs' is the new name of the variable
+ 'modus-themes-slanted-constructs'. The term "slant" was considered
+ too vague or technical and some users could have missed the meaning of
+ this option.
+
++ The 'modus-themes-scale-5' is renamed to 'modus-themes-scale-title' to
+ better convey its utility.
+
+
+Changes to the manual
+=====================
+
++ Rewrote or introduced the documentation for all the customisation
+ options mentioned above. Also updated relevant code samples, such as
+ in the manual's introduction to the customisation options. Evaluate
+ this form for an annotated code overview:
+
+ (info "(modus-themes) Customization Options")
+
++ Rephrased a reference to "gamma ray values" as "gamma values". Thanks
+ to Anders Johansson for the contribution in merge request 42:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/42>.
+
++ Removed the Org macro that would insert the build date in the manual's
+ introduction. This was required to make the file reproducible,
+ otherwise it would keep changing each time a new version of Emacs was
+ built. Refer to Emacs bug#48661 by Glenn Morris:
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=48661>.
+
++ Included note on tweaking the key hints that the Avy package produces.
+ This is in response to issue 215 by Rudolf Adamkovič:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/215>. Thanks to
+ Nicolas De Jaeghere for providing the text.
+
++ Wrote a note on how to control the underlines that are generated in
+ compilation-mode buffers and related. It is about configuring the
+ variable 'compilation-message-face'.
+
++ Documented how to configure the colours that are applied to the names
+ of the days in the 'M-x calendar' interface. The relevant variable is
+ 'calendar-weekend-days'.
+
++ Elaborated on a "do it yourself" (DIY) guide on how to benefit from
+ the hidden feature of the themes about how they handle the bold weight
+ and the italic slant. In short, we do not hardcode values and thus
+ make it easy for users to specify the particularities of what it means
+ for a face to have a 'bold' or 'italic' attribute.
+
+
+Faces and face groups
+=====================
+
+New entries
+-----------
+
+Newly supported packages:
+
++ 'ledger-mode'. Thanks to Pengji Zhang for the feedback in issue 202:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/202>.
+
++ 'gotest'. Thanks to Jerry Zhang for the feedback in issue 226:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/226>.
+
++ 'css-mode'
+
+New faces for already supported groups:
+
++ 'shr-h1', 'shr-h2', 'shr-h3', 'shr-h4', 'shr-h5', 'shr-h6' of the
+ shr.el library (simple HTML renderer, as experienced in, for example,
+ EWW). Those are available for Emacs28, with a patch by me:
+ <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=49433>
+
++ 'apropos-button' as a generic face that fontifies faces in apropos
+ buffers. Available for Emacs28, with a patch by me:
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=49162>.
+
++ 'selectrum-mouse-highlight'. This makes the mouse hover effect for
+ selectrum look the same as in most other contexts. Thanks to okamsn
+ for the feedback in issue 203:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/203>.
+
+
+Review of existing entries
+--------------------------
+
++ Added an ':extend' property to 'next-error' face. This face is used
+ for pulse effects. It is good to have them extend to the edge of the
+ window, so that they are easier to spot. Thanks to Gustavo Barros for
+ the feedback in issue 200, which is about pulse.el:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/200>.
+
++ Tweaked the various Apropos faces. The idea was to remove the colour
+ from the pseudo headings so that we would not get an exaggerated
+ result of too much variety in the buffer (e.g. that of 'M-x apropos').
+ The individual buttons retain their style as links, meaning that they
+ are governed by the variable 'modus-themes-links'.
+
++ Revised 'whitespace-line' face to make it look like a warning, as it
+ ought to be. Thanks to Pengji Zhang for the feedback in issue 204:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/204>.
+
++ Reworked the colour-coding of the Hydra and Transient packages. These
+ are meant to tone down some excesses with the standard red and to
+ adapt other colours to it. Thanks to Gustavo Barros for providing
+ suggestions and helping me tweak those in issue 206:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/206>.
+
++ Recoloured 'transient-argument' to improve its uniqueness in its
+ context and to better comply with the expectation of hydra-style
+ colour coding, as noted right above.
+
++ Made the 'org-agenda-done' face conform with the customisation option
+ 'modus-themes-success-deuteranopia'. This means that it will be
+ coloured in blue instead of green when the option is set to a non-nil
+ value.
+
++ Grayed out the foreground of the Org block delimiter lines on the
+ premise that any extra colouration was not needed, given the presence
+ of a gray background and the overall markup of the block.
+
++ Toned down the colouration of the 'org-code' face, so that it is
+ consistent with 'org-verbatim' as well as the colours used in opening
+ and closing lines of blocks. Thanks to Gustavo Barros for suggesting
+ this change in issue 206, though it went through a couple of reviews:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/206>.
+
++ Simplified the inheritance of the 'fixed-pitch' face, which is used
+ for internal purposes to ensure alignment of elements in buffers that
+ must cope with mixed font configurations, such as an org-mode file
+ with 'M-x variable-pitch-font' enabled.
+
+ [ Recall that the option 'modus-themes-no-mixed-fonts' can disable
+ this feature. Also note that the 'mixed-fonts' package, or
+ equivalent, is not needed while using the Modus themes (though there
+ is nothing wrong with having them together). ]
+
++ Reduced the overall intensity of 'org-mode-line-clock-overrun'.
+ Thanks to Gustavo Barros for the feedback in issue 208:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/208>.
+
++ Simplified or otherwise tweaked several Org agenda faces to render
+ possible the new 'modus-themes-org-agenda' variable, as documented
+ above. Thanks to Gustavo Barros for the feedback in issue 208:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/208>.
+
++ Increased ever so slightly the foreground colour of the 'highlight'
+ face. This can help improve the perception of highlights, such as
+ upon hovering over a link with the mouse. Thanks to Rudolf Adamkovič
+ for reporting the potential problem in issue 216:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/216>.
+
++ Prevented the override of the 'diff-context' face when users assign a
+ 'bg-only' value to the 'modus-themes-diffs' variable. This makes it
+ consistent with the intent of this style, which is to work with a
+ non-nil value for 'diff-font-lock-syntax' (basically to allow the
+ usual colour highlights of the underlying code syntax in diff
+ buffers).
+
++ Ensured consistency of all prompt-related faces by introducing a new
+ face, 'modus-themes-prompt', that is inherited by all others (all
+ prompt styles are controlled by the variable 'modus-themes-prompts').
+ This was originally implemented with the 'comint-highlight-prompt'
+ face, though that could potentially lead to undefined faces if the
+ comint library was not loaded. Whereas the 'modus-themes-prompt'
+ guarantees that we pass a known face at all times. Thanks to Philip
+ Kaludercic for bringing this potential bug to my attention in a
+ comment to merge request 43:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/43#note_615224855>.
+
++ Removed the background colour from the 'widget-inactive' face. It
+ would create problems in some cases, such as in Custom buffers for
+ multiple choice options.
+
++ Refined 'calendar-weekend-header' and 'calendar-weekday-header' to
+ emulate the design of physical calendars and remain truthful to the
+ expectations set by the default configuration of the calendar.el
+ library. Weekends now use a faint red, while weekdays are rendered in
+ the same subtle gray they had before. The underlying principle is to
+ make weekends convey a subtle warning to the effect that "this is not
+ a day for work" (notwithstanding precarious economic realities). As
+ noted above, there is an entry in the manual on how to make all days
+ look the same, be it gray or faint red. Evaluate this form:
+
+ (info "(modus-themes) Note on calendarel weekday and weekend colors")
+
+
+Request for feedback on a potential version 2.0.0 of the Modus themes
+=====================================================================
+
+While we maintain a cautious stance towards preserving the default
+styles, there are some cases where we might be forced to introduce
+backward-incompatible changes.
+
+Three such cases that can benefit from user feedback are:
+
++ Issue 196 on 'modus-themes-no-mixed-fonts'
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/196>.
+
++ Issue 198 on 'modus-themes-hl-line'
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/198>
+
+ [ Note that 'modus-themes-hl-line now accepts a list of properties as
+ described in the opening sections of this entry. ]
+
++ Issue 218 on 'modus-themes-diffs'
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/218>.
+
+
+Miscellaneous
+=============
+
++ Recalibrated the value of the colour 'bg-hl-line-intense' in the
+ palette 'modus-themes-vivendi-colors'. The change should be
+ practically indecipherable, though it slightly improves things in
+ certain contexts.
+
++ Refined the intensity of the three main yellow colours in
+ 'modus-themes-vivendi-colors'.
+
++ Introduced a new 'modus-themes-faces' group so that those are
+ decoupled from the customisation options in the various Custom
+ buffers. Thanks to Philip Kaludercic for the patch in merge request
+ 39: <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/39>.
+
++ Updated the manual's "Acknowledgements" section to include all new
+ users who contributed to the project.
+
+Thanks again to everyone involved!
+
+
+#+end_src
+
+* 1.4.0
+:PROPERTIES:
+:CUSTOM_ID: h:4c643e3c-5284-4fab-97e8-217bc1c02f5d
+:END:
+
+#+begin_src text
+Modus themes version 1.4.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2021-05-25
+
+This entry records the changes made to the project since the release of
+version 1.3.0 on 2021-04-17. There have been around 100 commits in the
+meantime, as is the norm.
+
+If you are coming from older versions, please consult the change log
+entry for version 1.0.0 with regard to the breaking changes that were
+introduced.
+
+Every colour-related modification is always done in accordance with the
+overarching accessibility objective of the themes for a minimum contrast
+ratio of 7:1 between background and foreground values in their given
+combination (the WCAG AAA standard).
+
+URL of the official manual: <https://protesilaos.com/emacs/modus-themes>. Or
+read it with Emacs' Info reader by evaluating this form:
+
+ (info "(modus-themes) Top")
+
+Remember that the themes are built into Emacs version 28 (current
+development target), and are available on GNU ELPA, as well as other
+archives.
+
+
+Customisations variables
+------------------------
+
++ Redefined the style of 'fg-only' that 'modus-themes-diffs' accepts, so
+ that it no longer uses a red-green colour coding, but applies a
+ red-blue distinction instead. The symbol 'fg-only' is a deprecated
+ alias for the more descriptive 'fg-only-deuteranopia'.
+
+ This is done because green text on a light background is one of the
+ worst combinations for the purposes of legibility, as it does not
+ stand out in its context and thus forces undesirable compromises.
+ Whereas red and blue work well in this case, while making the style
+ accessible to users with red-green colour deficiency (deuteranopia).
+ To avoid inconsistencies between Modus Operandi and Modus Vivendi, we
+ replace green with blue in both themes. A full report is available in
+ issue 183 which was created on April 21, 2021:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/183>.
+
++ Introduced the boolean 'modus-themes-success-deuteranopia' which
+ replaces all instances of green with blue in contexts where a
+ red-green colour coding is in effect (e.g. Org TODO vs DONE keywords,
+ isearch current match...).
+
++ Implemented 'modus-themes-mail-citations' to control the colouration
+ of cited text in email-related buffers, such as Gnus or message.el.
+ It accepts values nil, 'faint', and 'monochrome'. By default (the nil
+ value) the text of citations cycles through blue, green, red, yellow
+ depending on the level of depth.
+
++ Expanded the set of options for 'modus-themes-mode-line' to encompass
+ the values 'borderless-accented', 'borderless-accented-3d', and
+ 'borderless-accented-moody'. Those are variations of existing styles.
+ The complete list:
+
+ - nil (default)
+ - 3d
+ - moody
+ - borderless
+ - borderless-3d
+ - borderless-moody
+ - accented
+ - accented-3d
+ - accented-moody
+ - borderless-accented
+ - borderless-accented-3d
+ - borderless-accented-moody
+
++ Renamed the non-nil values that 'modus-themes-org-blocks' accepts from
+ 'grayscale', 'rainbow' to 'gray-background' and 'tinted-background',
+ respectively. The new symbols better describe their effect on Org
+ source blocks, namely, that they affect the background of the block
+ rather than the foreground. The old symbols will still work but are
+ considered deprecated aliases of the newer ones.
+
++ Altered the intensity of the 'modus-themes-hl-line' option
+ 'accented-background' to a more noticeable shade of cyan/teal. The
+ old style was too subtle to have the desired effect. The value
+ 'underline-accented' is not affected by this change, as it still uses
+ the same subtle background it did before in combination with a more
+ pronounced underline colour.
+
++ Deleted all deprecation warnings that concerned the transition from
+ version 0.13.0 of the themes to 1.0.0. Those had been in effect for
+ several months, spanning four tagged releases.
+
+
+Faces or face groups
+--------------------
+
++ Reconsidered the use of colour in all email-related citation faces to
+ avoid exaggerations and reduce complexity. Colour values have been
+ tweaked to tone down their overall intensity, while the number of
+ colours has been reduced to four. Gnus and Mu4e have faces for more
+ levels of citation depth, though those will simply repeat the
+ four-colour cycle.
+
++ Made the 'message-mml' face look consistent with the rest of the
+ buffer while composing an email by changing its foreground colour from
+ a yellow to a cyan variant.
+
++ Refined several faces in the Notmuch group in the interest of harmony:
+
+ - Individual message headers in 'notmuch-show-mode' use bold text in
+ addition to their existing subtle background to better stand out in
+ their context. The face is 'notmuch-message-summary-face'.
+
+ - Tags are no longer set unconditionally to a bold typographic weight.
+ They become such for unread threads in 'notmuch-search-mode'
+ buffers, as well as for headers of 'notmuch-show-mode'.
+
+ - Removal and addition of tags is now denoted by a strike-through and
+ an underline effect, respectively, whereas before they both used
+ underlines with the only difference being their colour.
+
+ - The subject line in 'notmuch-search-mode' buffers uses the main
+ foreground instead of a dimmed one. The field of matching authors
+ has a tweaked foreground to keep the tabular view easy to read.
+
+ - All cryptography-related faces are simplified to not show a coloured
+ background but only use a foreground colour instead.
+
++ Removed direct support for 'counsel-notmuch' as it already inherits
+ from the relevant notmuch faces. The package is thus considered
+ indirectly supported.
+
++ Refrained from setting a background to the 'csv-separator-face' as it
+ would inevitably colourise the negative space in the tabular view
+ created by 'csv-align-mode'. A red text colour is used instead, even
+ though this is not common practice: it is easier to spot for small,
+ single characters, such as a comma or a semicolon that is meant to
+ have a special meaning. Thanks to Kevin Fleming for reporting the
+ problem and for offering feedback on the choice of colour in issue
+ 194: <https://gitlab.com/protesilaos/modus-themes/-/issues/194>.
+
++ Distinguished between ordinary links and widget buttons by removing
+ the underline from the latter (the 'widget-button' face) and altering
+ the shade of its foreground colour. Such widgets are used in Emacs'
+ Custom interfaces and can also be found in the default Notmuch "hello"
+ buffer that runs 'notmuch-hello-mode'.
+
++ Tweaked the Ediff current faces to be consistent with 'diff-mode' and
+ related. In practice, this only applies when 'modus-themes-diffs' is
+ set to a value of 'fg-only-deuteranopia', as it adds a dim background
+ to the current diff hunk. All other styles of 'modus-themes-diffs'
+ look the same as before while using Ediff.
+
++ Simplified the faces of 'corfu' to match the current state of the
+ upstream project. Thanks to Daniel Mendler (its developer) for
+ reporting this in issue 184:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/184>.
+
++ Refined all Eshell faces so that the output of 'ls' is consistent with
+ the overall aesthetic of the themes. Also made 'eshell-prompt'
+ inherit from 'comint-highlight-prompt' to look the same as other such
+ prompts (all are configurable by 'modus-themes-prompts').
+
++ Revised 'eshell-prompt-extras' and 'eshell-git-prompt' to use colours
+ and typographic weight that better match the style of the various
+ configurations they offer.
+
++ Simplified 'eshell-syntax-highlighting' to inherit from the standard
+ Eshell faces, where appropriate.
+
++ Adjusted the colour of 'centaur-tabs-active-bar-face' and removed the
+ bespoke 'fg-tab-accent' colour from 'modus-themes-operandi-colors' and
+ 'modus-themes-vivendi-colors' that was only used by it (and which
+ should have never been introduced to begin with).
+
++ Updated the 'tab-bar-groups' faces to match changes upstream. Thanks
+ to Fritz Grabo (its developer) for the patch in merge request 35:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/35>.
+
++ Changed the Ibuffer title and group faces to better differentiate
+ between group titles and special or non-file-visiting buffers. Thanks
+ to Nicolas De Jaeghere for the patch in merge request 37:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/37>.
+
++ Ensured that all faces that denote a "success" state, or which are
+ expected to be coloured in green in a red-green binary, can use an
+ appropriate blue colour (or colour combination that involves blue)
+ instead when 'modus-themes-success-deuteranopia' is set to a non-nil
+ value.
+
++ Added support for the new 'bookmark-face' in Emacs version 28. This
+ means that the built-in bookmark.el library is directly supported by
+ the themes. This face can be disabled by setting 'bookmark-fontify'
+ to nil. Thanks to Mark Barton for reporting the presence of this new
+ face and for providing feedback on its style in issue 189:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/189>.
+
++ Aligned 'hes-mode' ('highlight-escape-sequences') with the standard
+ font-lock faces for regexp grouping. This means that it conforms with
+ changes to the 'modus-themes-syntax' variable.
+
++ Reconfigured the 'org-quote' face to adapt its style depending on the
+ value of 'modus-themes-org-blocks'. The default is a subtle blue/cold
+ foreground colour against the main background. When a value of
+ 'gray-background' is assigned to 'modus-themes-org-blocks', the text's
+ colour becomes that of the main foreground in order to maintain a good
+ level of legibility. Thanks to Rudolf Adamkovič for the feedback in
+ issue 190: <https://gitlab.com/protesilaos/modus-themes/-/issues/190>.
+
++ Refashioned the 'show-paren-match-expression' face to make it apply a
+ bespoke background colour and not override the expression's foreground
+ colours. This face is used by 'show-paren-mode' when the
+ customisation variable 'show-paren-style' is set to the 'expression'
+ value. Thanks to Rudolf Adamkovič for the feedback in issue 191:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/191>.
+
++ Made headings level 8 use a fine shade of magenta by default instead
+ of gray (notwithstanding user changes to 'modus-themes-headings').
+ This should have a negligible difference in Org or Outline buffers,
+ but is more noticeable when editing Elisp in Emacs28 while also using
+ 'outline-minor-mode' and with 'outline-minor-mode-highlight' set to
+ 'override'. That is because several top-level forms use that heading
+ level with those configurations.
+
+
+Documentation (the manual)
+--------------------------
+
++ Incorporated a sample configuration block with all customisation
+ variables and with comment annotations of their available options, in
+ an attempt to make it easier for users to discover what the themes
+ provide.
+
++ Replaced all instances of "modeline" with "mode line" for consistency
+ with the Emacs style. Thanks to Rudolf Adamkovič for the patch that
+ started this process in merge request 33:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/33>.
+
++ Wrote note on setting mode line faces that indicate the state of
+ 'god-mode'. Thanks to Rudolf Adamkovič for the feedback in issue 187:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/187>. Also
+ thanks to Rudolf for updating the applicable hook in merge request 34:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/34>.
+
++ Listed 'org-mode' variables that affect fontification in blocks:
+ 'org-src-fontify-natively', 'org-fontify-whole-block-delimiter-line',
+ and 'org-fontify-quote-and-verse-blocks'. This complements the
+ already documented variables 'org-fontify-whole-heading-line' and
+ 'org-fontify-done-headline' that pertain to headings.
+
++ Included note on fontifying inline Latex expressions in Org buffers.
+ Thanks to Rudolf Adamkovič for the feedback in issue 190:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/190>.
+
++ Elaborated on the use of 'face-remap-add-relative' by means of sample
+ code that cycles through arbitrary colours for the 'region' face.
+ This is filed under the "Do It Yourself" (DIY) section.
+
++ Provided a DIY method for adapting the fontification of Org source
+ block delimiter lines to the value of 'modus-themes-org-blocks'.
+
++ Expanded the DIY entry on overriding the saturation of the active
+ theme's colours with a method that combines the programmatic approach
+ with manual overrides. The user can thus specify the colour values
+ they want to override and let the rest be handled by Elisp.
+
++ Introduced a section with answers to Frequently Asked Questions (FAQ)
+ about the design of the themes as well as recommendations on how to
+ ensure optimal reading conditions or start thinking about them. The
+ questions are:
+
+ - Is the contrast ratio about adjacent colors?
+ - What does it mean to avoid exaggerations?
+ - Why are colors mostly variants of blue, magenta, cyan?
+ - What is the best setup for legibility?
+
+
+Miscellaneous
+-------------
+
++ Removed superfluous code from internal functions and adapted their
+ indentation to make them easier to read.
+
++ Recalibrated some values in 'modus-themes-vivendi-colors' to ensure
+ consistency in luminance with other colours that are used in their
+ context. Those are subtle changes that can only be discerned in
+ side-by-side comparisons of the before and after states. Thanks to
+ André Alexandre Gomes for the feedback in issue 193:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/193>.
+
++ Changed the saturation and hueness of the bespoke 'fg-comment-yellow'
+ in 'modus-themes-operandi-colors' and 'modus-themes-vivendi-colors' to
+ better contrast with its context, while still keeping its luminance
+ consistent with its role as a colour for comments in code. This is
+ used when 'modus-themes-syntax' is configured appropriately (read its
+ doc string or consult the manual).
+
++ Attempted to add explicit support for the faces of the built-in
+ pulse.el library, but ultimately opted against them as the doc string
+ of 'pulse-highlight-face' advises against customising it, even though
+ it is not clear from the source code in emacs.git what the problem
+ could be. We shall reconsider this case for the next release cycle.
+ Thanks to Gustavo Barros for the feedback on several aspects of this
+ topic in issues 185 and 200:
+
+ - <https://gitlab.com/protesilaos/modus-themes/-/issues/185>
+ - <https://gitlab.com/protesilaos/modus-themes/-/issues/200>
+
++ Took the feedback of John Haman in issue 199 as a reminder to complete
+ the set of possible values for the 'modus-themes-mode-line' variable:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/199>.
+#+end_src
+
+* 1.3.0
+:PROPERTIES:
+:CUSTOM_ID: h:5063c0c5-832e-4577-936e-d602b07d6d79
+:END:
+
+#+begin_src text
+Modus themes version 1.3.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2021-04-17
+
+This entry records the changes introduced to the project since the
+publication of version 1.2.0 (2021-03-04). There have been around 100
+commits in the meantime, as is the norm with all releases hitherto.
+
+Every colour-related modification documented herein conforms with the
+overarching accessibility objective of the themes for a minimum contrast
+ratio of 7:1 between background and foreground values in their given
+combination (the WCAG AAA standard).
+
+As the official manual is referenced several times throughout this log,
+make sure to store its URL: <https://protesilaos.com/emacs/modus-themes>. Or
+read it from Emacs' Info reader by evaluating this form:
+
+ (info "(modus-themes) Top")
+
+If you are coming from older versions, please consult the change log
+entry for version 1.0.0 with regard to the breaking changes that were
+introduced.
+
+Remember that the themes are built into Emacs28, and are available on
+GNU ELPA, as well as other archives.
+
+
+Customisation options
+---------------------
+
++ The old 'modus-themes-intense-hl-line' boolean variable has been
+ replaced by 'modus-themes-hl-line', which provides several options for
+ how to style the current line of 'hl-line-mode'. To retain the old
+ effect, one must do this:
+
+ ;; Replacement for (setq modus-themes-intense-hl-line t)
+ (setq modus-themes-hl-line 'intense-background)
+
+ The list of possible values:
+
+ 1. nil (default)
+ 2. intense-background
+ 3. accented-background
+ 4. underline-neutral
+ 5. underline-accented
+ 6. underline-only-neutral
+ 7. underline-only-accented
+
+ The doc string of 'modus-themes-hl-line' as well as the manual
+ describe the specifics. Thanks to Manuel Uberti for the feedback in
+ commit b020592:
+ <https://gitlab.com/protesilaos/modus-themes/-/commit/b020592e1a96d6e00d7d03faf9c293ec6081d49c>.
+
++ The 'modus-themes-mode-line' variable now accepts three new "accented"
+ styles that complement the existing set:
+
+ 1. nil (default)
+ 2. 3d
+ 3. moody
+ 4. borderless
+ 5. borderless-3d
+ 6. borderless-moody
+ 7. accented
+ 8. accented-3d
+ 9. accented-moody
+
++ The 'modus-themes-region' is extended with two new options of an
+ "accent" background:
+
+ 1. nil (default)
+ 2. no-extend
+ 3. bg-only
+ 4. bg-only-no-extend
+ 5. accent
+ 6. accent-no-extend
+
++ The default value of 'modus-themes-headings' for per-level styles can
+ now be set to nil. This fixes an inconsistency between the fallback
+ value, which accepted nil, and the per-level styles which did not.
+ Thanks to Mauro Aranda for reporting this in issue 163:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/163>.
+
+ Please read the manual for the specifics of this variable, as it is an
+ alist that accepts several possible combinations.
+
+
+Updates to the manual
+---------------------
+
++ Rewrote the sections that cover the aforementioned customisation
+ options.
+
+ - For 'modus-themes-mode-line', we had to revise the recommendation
+ for setting 'face-near-same-color-threshold' to 45000. That value
+ is appropriate for the 'moody' and 'borderless-moody' options.
+ Whereas for 'accented-moody' the number should be raised to 70000.
+ Thanks to Nicolas De Jaeghere for providing this piece of
+ information:
+ <https://gitlab.com/protesilaos/modus-themes/-/commit/ab6ba698269f012ec880b690282264649bfb3b0d#note_551342198>
+
++ Rephrased the GNU Free Documentation License quote to match the style
+ of other manuals that are also built into Emacs.
+
++ Documented 'org-mode' variables that affect the looks of various
+ fontification styles.
+
++ Simplified the 'kbd' macro that is declared in modus-themes.org to
+ allow GNU ELPA's build system to parse the file for Emacs 26.
+
++ Documented existing support for 'tab-bar-mode' and 'tab-line-mode'.
+
++ Wrote a note on how to configure the 'dimmer.el' library by Neil
+ Okamoto, in order to guarantee consistent results with the themes.
+ The key is to use the RGB colour space instead of CIELAB.
+
++ Included note on shr.el fonts and how those are used by EWW and
+ Elfeed.
+
++ Added a "Do-It-Yourself" (DIY) section on how to remap buffer-local
+ faces.
+
++ Detailed a DIY method to make the buffer-local backdrop of a pdf-tools
+ page use a distinct colour than the default white for Modus Operandi.
+ Extended the same principle to Modus Vivendi and described how to
+ adapt to theme changes (such as via 'modus-themes-toggle'). Thanks to
+ Utkarsh Singh for providing feedback on this topic in issue 175:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/175>.
+
++ Elaborated on DIY techniques to programmatically override the
+ saturation of all colours specified by the active Modus theme. Thanks
+ to user pRot0ta1p for the feedback in issue 166:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/166>.
+
+
+Support for packages
+--------------------
+
+These are added to the already comprehensive list of explicitly
+supported packages:
+
++ corfu
++ embark
+
++ pandoc-mode. Thanks to Farasha Euker for the feedback in issue 171:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/171>.
+
++ tab-bar-groups
++ telega
++ vertico
+
+Also added support for the 'help-key-binding' face which is part of
+Emacs 28.
+
+
+Changes to already supported faces or face groups
+-------------------------------------------------
+
++ Renamed all internal faces that the themes defined from
+ "modus-theme-*" to "modus-themes-*".
+
++ Refashioned all Ediff faces in the process of a major review of this
+ tools' overall design. The manifold changes are:
+
+ - All inactive diffs respect the underlying fontification
+ (e.g. programming syntax highlighting). Before they would override
+ it with a gray foreground.
+
+ - All inactive diffs have been toned down, as their background is a
+ finer shade of gray than the prominent one that was used before.
+
+ - There no longer is a visual distinction between even and odd
+ inactive diffs (by means of different shades of gray). We are of
+ the opinion that such subtleties, whose utility is marginal at best,
+ have no place in themes that are designed for accessibility.
+
+ - All bespoke gray colour combinations that were only intended for
+ those inactive diffs have thus been removed from each theme's
+ palette.
+
+ - Active diffs follow the same style as diff-mode, to ensure
+ theme-wide consistency (all diff styles are controlled by the
+ variable 'modus-themes-diffs').
+
+ This topic was discussed at length (with screenshots) in issue 169:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/169>. Thanks to
+ peniblec and Nicolas De Jaeghere for their feedback.
+
++ Made 'smerge-markers' and 'vdiff-closed-fold-face' look like the
+ headings in 'diff-mode' in the interest of consistency, especially
+ while configuring the 'modus-themes-diffs' variable.
+
++ Ensured consistency between all faces that pertain to key bindings in
+ contexts where the hint to the key is active, in that pressing the key
+ performs the action (e.g. Magit's transient buffers, which-key,...).
+ The 'help-key-binding' for Emacs 28 is not included in this group,
+ because it applies in cases where the keys are not active, such as in
+ Help buffers.
+
++ Refined 'epa-validity-disabled' and 'epa-validity-high' faces. The
+ former no longer uses a background, as that was considered an
+ exaggeration. While the latter is cast in a cyan hue instead of green
+ for greater clarity (this relates to the general push to optimise for
+ red-green colour deficiency, which means to only use green where it is
+ absolutely necessary and, in such cases, to provide for a blue-ish
+ alternative, as with the 'deuteranopia' value that can be assigned to
+ 'modus-themes-diffs').
+
++ Reworked 'ace-window', 'avy', and 'magit-blame' faces to ensure that
+ their overlays do not inherit the face properties of underlying text,
+ such as a different font family or height. Thanks to Nicolas De
+ Jaeghere for the multiple merge requests and the concomitant feedback:
+
+ - <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/27>.
+ - <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/29>.
+ - <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/30>.
+ - <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/31>.
+ - <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/32>.
+
+ Also thanks to Damien Cassou for reporting an intermediate problem
+ with 'avy' in issue 177; a problem that was eventually addressed by
+ Nicolas De Jaeghere in merge request 31 (cited above):
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/177>.
+
++ Optimised the colour combinations used by 'avy' to improve the
+ distinction between consecutive characters.
+
++ Reduced the brightness of EWW certificate faces, as they would attract
+ disproportionate attention to themselves.
+
++ Reworked all EWW text field and button faces to look more like what
+ they are supposed to.
+
++ Removed the slant and distinct foreground from the 'org-quote' face,
+ as they would interfere with emphasis within the quote block. Thanks
+ to Farasha Euker for the feedback in issue 171:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/171>.
+
++ Reduced the intensity in colouration of 'org-code' and 'org-macro' in
+ order to avoid exaggerations and prevent their compounding effect in
+ technical documents that include a high concentration of those faces.
+ They still retain their overall character and continue to look like
+ variants of 'org-verbatim'.
+
++ Extended support for Selectrum's new 'selectrum-quick-keys-highlight'
+ and 'selectrum-quick-keys-match'.
+
++ Adjusted a few bongo faces for improved consistency and a more
+ pleasant result overall. Quote from commit 07224cda08:
+
+ Refine bongo faces for consistency
+
+ The previous design was meant to keep the track fields distinct
+ from each other. However the use of yellow was not good
+ aesthetically: it does not fit with the rest of the theme.
+
+ Upon further experimentation, I realised that the album field
+ (yellow) is only present when the artist and title fields are also
+ available: first is the title, then the artist, and finally the
+ album. This is true even with 'bongo-join-inserted-tracks' set to
+ a non-nil value. So changing the face from yellow to a neutral
+ value is safe.
+
+ The other two faces are adapted to look better in the new context.
+
++ Made more command prompt faces respond to changes in the variable
+ 'modus-themes-prompts'. This concerns faces from the groups cider,
+ circe, erc, indium, rcirc.
+
++ Refashioned typescript faces, making them more prominent by default,
+ while also exposing them to the value of 'modus-themes-syntax'.
+
++ Revised the style of 'info-colors-ref-item-command'. This makes
+ commands look the same as functions, which is technically correct. It
+ also predicates the exact style on the value of the variable
+ 'modus-themes-syntax'.
+
++ Made all enh-ruby-mode faces adapt to 'modus-themes-syntax'. Same for
+ julia.
+
++ Reconfigured all ztree faces for stylistic consistency. The
+ 'ztreep-diff-model-add-face' now responds to the 'deuteranopia' value
+ that can be passed to 'modus-themes-diffs'.
+
++ Appended the ':extend t' attribute to 'gnus-summary-cancelled' and
+ 'gnus-summary-selected'. These are only noticeable on Emacs 28
+ following commit 88409b21c2 in emacs.git.
+
++ Tweaked all faces of 'highlight-changes-mode' to better deliver on the
+ intent of that mode.
+
++ Opted to unconditionally render all 'dired-async' faces in a bold
+ typographic weight, instead of basing them on a non-nil value for
+ 'modus-themes-bold-constructs'. Also changed 'dired-async-message' to
+ a blue foreground, which further improves the themes' performance for
+ red-green colour deficiency.
+
++ Adjusted the colours of some 'notmuch-crypto-*' faces to better convey
+ their meaning.
+
++ Removed remaining conditional logic for underline styles in some
+ spell- and linter- related faces to ensure that all such cases are
+ controlled by the variable 'modus-themes-lang-checkers' (building on
+ work that had been done in the past).
+
++ Stopped changing 'keycast-key' to match the modeline style, as that
+ diluted the meaning of the variable 'modus-themes-mode-line'.
+
++ Tweaked calendar and diary faces for stylistic effect, except for the
+ 'diary' face which has been converted from a green to a blue variant
+ for the purposes of coping with cases of red-green colour deficiency.
+
+
+Miscellaneous
+-------------
+
++ Clarified the changes in the backward-incompatible transition from
+ version 0.13.0 of the themes to >= 1.0.0. Thanks to Damien Cassou for
+ reporting the absence of easy-to-find information in issue 174:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/174>.
+
++ There were three point releases after 1.2.0 which refined certain
+ aspects of the themes' packaging so that they could work both as
+ built-in themes for Emacs as well as in package format via the likes
+ of GNU ELPA. Those issues were eventually resolved by Basil
+ L. Contovounesios:
+
+ - Issue 162: <https://gitlab.com/protesilaos/modus-themes/-/issues/162>.
+ - Emacs bug#45068: <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45068#218>.
+
++ Rewrote the 'modus-themes-headings' variable's declaration to improve
+ its presentation in Custom interfaces. Thanks to Mauro Aranda for
+ submitting the patch for commit 1c60927ebd.
+
++ Applied the ':format' keyword to all 'defcustom' forms, based on the
+ aforementioned patch. This should make all options look better in the
+ various Custom interfaces. Thanks to Mauro Aranda for the feedback in
+ issue 163: <https://gitlab.com/protesilaos/modus-themes/-/issues/163>.
+
++ Refined the colour values 'bg-alt' and 'bg-dim' in 'modus-vivendi' to
+ improve their instantiation on Textual User Interfaces. In
+ particular, recalibrated the blue channel of light so that when the
+ TUI cannot render the colour directly, it defaults to a gray value
+ instead of a dark blue.
+
++ Added a "Last-Modified" meta header to modus-themes.el, with gets
+ updated automatically and uses a timestamp. This helps users who
+ track the themes' git repo directly. Thanks to Togan Muftuoglu for
+ the feedback in issue 168:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/168>.
+
++ Expanded the palette of each theme with accent values that are
+ reserved for use in the tab-bar. Those are used by the newly
+ supported 'tab-bar-groups' package.
+
++ Recalibrated a few colour combinations to improve their resulting
+ legibility. The changes should not be noticeable to the untrained
+ eye. Interested parties can consult commit 349ea4a943.
+
++ Tweaked the hueness of the 'yellow-active' colour of 'modus-operandi'.
+
+Thanks once again to everyone involved!
+#+end_src
+
+* 1.2.0
+:PROPERTIES:
+:CUSTOM_ID: h:751083a7-3514-40f5-9928-17a11de5b439
+:END:
+
+#+begin_src text
+Modus themes version 1.2.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2021-03-04
+
+This entry records the changes introduced to the project since the
+publication of version 1.1.0 (2021-01-24). There have been close to 100
+commits in the meantime.
+
+Every colour-related modification documented herein conforms with the
+overarching accessibility objective of the themes for a minimum contrast
+ratio of 7:1 between background and foreground values in their given
+combination (the WCAG AAA standard).
+
+As the official manual is referenced several times throughout this log,
+make sure to store its URL: <https://protesilaos.com/emacs/modus-themes>. Or
+read it from Emacs' Info reader by evaluating this form:
+
+ (info "(modus-themes) Top")
+
+If you are coming from older versions, please consult the change log
+entry for version 1.0.0 with regard to the breaking changes that were
+introduced.
+
+
+Prior notice: Upgrading the themes in Emacs28 and GNU ELPA
+----------------------------------------------------------
+
+Emacs28, the current development target, now includes a 'require-theme'
+function. It is a prerequisite to upgrading the Modus themes to their
+current version. Prior to the definition of that function, the themes
+could not transition from their 0.13.0 version to >=1.0.0. Special
+thanks to Basil L. Contovounesios for making it happen, as well Mauro
+Aranda and Eli Zaretskii for their feedback and support.
+
+Expect the Modus themes in upstream Emacs to be updated shortly after
+the publication of this document.
+
+GNU ELPA currently ships version 0.12.0 of the two standalone packages
+'modus-operandi-theme' and 'modus-vivendi-theme'. This will change in
+the immediate future, as a new 'modus-themes' package will succeed them.
+That new package will be built directly from emacs.git, as it must now
+become a ':core' entity instead of being listed as an ':external' one.
+
+Again, expect a patch to be applied to elpa.git shortly after this
+document goes live.
+
+
+Customisation options
+---------------------
+
+[ All variables and their values are documented in the themes' manual.
+ The default value is always nil. ]
+
++ The new boolean 'modus-themes-subtle-line-numbers' variable will make
+ the effect of 'display-line-numbers-mode' more subtle when set to a
+ non-nil value. It removes the underlying background of the unfocused
+ lines while toning down their foreground.
+
++ The 'modus-themes-diffs' variable now accepts a 'deuteranopia' value.
+ This optimises for red-green colour deficiency in all modes that show
+ diffs (diff-mode, ediff, Magit...). In practice, all instances of
+ green are replaced with appropriate blue hues. For more on the
+ matter, read the report which also includes pictures:
+ <https://protesilaos.com/codelog/2021-02-25-modus-themes-diffs-deuteranopia/>.
+
++ The 'modus-themes-syntax' variable now reads 'faint-yellow-comments'
+ as a valid value. This has the same scope as the existing 'faint'
+ value with the added effect of assigning a yellow tint to comments: it
+ tones down the saturation of colours that apply to code syntax
+ (standard font-lock faces and others inheriting from them).
+
++ The 'modus-themes-links' variable is expanded to accept the new value
+ of 'neutral-underline-only': it removes the foreground from the link
+ and draws a neutral gray underline below it.
+
+
+Refinements to existing packages or face groups
+-----------------------------------------------
+
++ Refashioned all faces that pertain to emails, including Gnus, Mu4e,
+ Notmuch, and the standard 'message.el' library. This concerns the
+ colours that apply to the message header keys and their values, as
+ well as quote levels.
+
+ - Introduced more contrasting hues for headings and made more
+ considerate use of bold typography. The new colour combinations are
+ better suited for the task of delivering a sense of structure;
+ structure that is at once effective and subtle.
+
+ - Applied less intense colours throughout all quotation levels.
+
+ - Revised the sequencing of hues in quotation levels to allow distinct
+ levels to stand out more without relying on excessive saturation.
+
+ - Aligned the styling of Notmuch header dates with their counterparts
+ in other similar contexts, in pursuit of theme-wide consistency.
+
++ Rewrote the faces of EBDB to achieve a better sense of structure.
+
++ Refined the colour combinations of change-log and log-view buffers to
+ make it easier to discern distinct elements.
+
++ Tweaked the colours of certain Elfeed constructs to improve the
+ overall presentation of its search buffers.
+
++ Changed the colour combinations of 'M-x re-builder' to amplify the
+ distinction between the matching regexp groups while still reducing
+ their overall intensity.
+
++ Reconfigured the 'diff-changed' face to always extend its background
+ to the edge of the window. Such "changed" lines are visible in
+ 'diff-mode' buffers when the command 'diff-unified->context' is
+ invoked.
+
++ Tweaked the colour combinations of ancillary faces in diff buffers
+ when the variable 'modus-themes-diffs' is set to the value 'fg-only'.
+ In particular:
+
+ - Removed the subtle background from the diff hunk headings and changed
+ their colour to ensure good visibility---guarantees a sense of
+ structure.
+
+ - Made the context lines inherit the default foreground colour (pure
+ black/white), so that it contrasts better with red, green, and
+ yellow text.
+
+ - Applied an accented foreground to the diff header. This is to
+ ensure that it is not mistaken for a diff hunk's context.
+
+ All these guarantee that the foreground-only highlights in line-wise
+ differences draw more attention to themselves.
+
++ Aligned all the standard hi-* faces with their default aesthetics.
+ Those are used by commands such as 'highlight-symbol-at-point'.
+ Thanks to Philip K. for the valuable feedback in issue 157:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/157>.
+
++ Removed obsolete Consult faces and added new ones, so as to remain in
+ sync with the latest developments in that project. Thanks to Daniel
+ Mendler (Consult's maintainer) for reporting the inconsistency in
+ issue 155: <https://gitlab.com/protesilaos/modus-themes/-/issues/155>.
+
+ - 'consult-preview-line' now retains fontification on the current
+ line, instead of applying its own foreground.
+
+ - 'consult-narrow-indicator' is refashioned to be colour-coded in a
+ consistent way with 'consult-async-split', as both denote the
+ delineation of a given scope.
+
+ - 'consult-imenu-prefix' contrasts better with text on its current
+ line, while it adapts to possible customisations performed on the
+ Consult front.
+
++ Expanded the coverage of 'marginalia' faces to two include
+ 'marginalia-char' and 'marginalia-type'. This is done in the interest
+ of internal consistency between the elements of this set, as their
+ defaults were also accessible (they inherit from standard faces that
+ we already support).
+
++ Opted to render the Notmuch logo in a neutral gray backdrop. This was
+ deemed necessary as the logo is an immutable image file that consists
+ of black and white strokes. Black and white are the main background
+ values of 'modus-vivendi' and 'modus-operandi' respectively, which
+ could lead to confusion. The neutral gray ensures that the logo is
+ visible at all times. Thanks to Utkarsh Singh for the feedback in
+ issue 122: <https://gitlab.com/protesilaos/modus-themes/-/issues/122>.
+
++ Refined the dedicated colour values used for diff hunk headings, as
+ seen in diff-mode buffers or Magit. The new colours yield text that
+ is easier to read by slightly toning down the combined intensity of
+ background+foreground.
+
++ Removed the subtle background of 'diff-header' and 'diff-file-header'.
+ The header's foreground and textual representation suffice to render
+ it distinct in its context.
+
++ Tweaked 'org-agenda-structure' and 'org-scheduled' to enhance the
+ usability of Org Agenda buffers.
+
+ - Made 'org-agenda-structure' use the largest possible height that we
+ expose to users: 'modus-themes-scale-5'.
+
+ - Re-calibrated the hueness of 'org-scheduled' and amplified its
+ saturation, in order to better convey the meaning of a scheduled
+ task.
+
+ Thanks to Morgan Smith for the valuable feedback in issue 153:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/153>.
+
++ Tweaked the faces of the 'bongo' package to enhance the
+ distinctiveness of the constructs they style.
+
++ Adjusted the overall aesthetic of calendar faces in the interest of
+ theme-wide consistency.
+
++ Aligned the visual metaphors of 'org-code' with those of 'org-macro'
+ and 'org-verbatim', by ensuring that a subtle background is present
+ behind the affected text, while the foreground conforms with the norms
+ of the 'modus-themes-no-mixed-fonts' customisation option.
+
++ Made quoted text in Info buffers look the same as 'org-verbatim' and
+ Markdown's inline code.
+
++ Instructed the faces of 'info-colors' to inherit from appropriate
+ font-lock faces. This guarantees that everything works as intended
+ with the various values of 'modus-themes-syntax'.
+
++ Refined the language tag of Markdown fenced blocks so that it does
+ attract unwarranted attention while delivering on its intended
+ purpose.
+
++ Rendered explicit the slant of ace-window hints, guaranteeing that it
+ does not inherit from the underlying text. Thanks to Nicolas De
+ Jaeghere for the patch:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/27>.
+
+ [ Some more changes have been discussed, but those require tweaks to
+ the upstream package. ]
+
++ Ensured that the 'org-tree-slide-header-overlay-face' never draws an
+ overline when the variable 'modus-themes-headings' includes a relevant
+ setting for heading level 1. Such as with the following example (all
+ customisation options are documented in the themes' manual):
+
+ (setq modus-themes-headings
+ '((1 . section)
+ ...))
+
++ Extended support for the new 'tab-line-tab-inactive-alternate' face as
+ that occurs in Emacs28 (current development target). It comes into
+ effect when the variable 'tab-line-tab-face-functions' includes a
+ value of 'tab-line-tab-face-inactive-alternating'.
+
+
+Newly supported packages
+------------------------
+
++ bbdb :: Thanks to Nicolas De Jaeghere in issue 128:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/128>.
+
++ mmm-mode :: Thanks to Davor Rotim for the feedback in issue 161:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/161>.
+
++ quick-peek :: Thanks to Burgess Chang for the feedback in issue 151:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/151>
+
++ selectrum-prescient :: This new package was brought to my attention by
+ Manuel Uberti. The intent is to phase out the faces in Selectrum,
+ namely 'selectrum-primary-highlight', 'selectrum-secondary-highlight',
+ though those will still be supported by the Modus themes for the
+ foreseeable future.
+
++ shortdoc
+
++ spray
+
++ terraform-mode :: Thanks to Kevin Fleming for the feedback in issue
+ 159: <https://gitlab.com/protesilaos/modus-themes/-/issues/159>.
+
++ vc-dir (Emacs28)
+
+
+Theme-related contributions to the wider community
+--------------------------------------------------
+
++ Contributed the faces for 'vc-dir' in Emacs28 and applied them to all
+ VC backends: <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=46358> and
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=46745>.
+
++ Contributed a new face and some related tweaks to Emacs'
+ 'shortdoc.el': <http://debbugs.gnu.org/cgi/bugreport.cgi?bug=46748>.
+
++ Added faces to the 'tab-bar-echo-area.el' package:
+ <https://github.com/fritzgrabo/tab-bar-echo-area/pull/2>.
+
++ Reported issue that led to the review of the header face in
+ 'org-tree-slide': <https://github.com/takaxp/org-tree-slide/issues/38>.
+
++ Helped refine the faces of the 'rlist.el' package:
+ <https://gitlab.com/mmemmew/rlist/-/commit/386f506d0110bebedd3a48ff972adba96e2232eb>.
+
+
+Documentation updates
+---------------------
+
++ Wrote about the indirect support for the 'goggles' package. I had
+ helped write its faces, as was documented in the changelog for version
+ 1.1.0 of the themes. Thanks to Manuel Uberti for bringing this to my
+ attention in issue 158:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/158>.
+
++ Explained that any changes to 'custom-theme-load-path' and/or
+ 'custom-theme-directory' should be performed before the themes are
+ loaded. Thanks to Adrian Manea for the feedback in issue 156:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/156>.
+
++ Included the symbol 'bg-only' in the 'modus-themes-diffs' section of
+ the manual. Thanks to user "iSeeU" for reporting the omission:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/154>.
+
++ Expanded the manual's entry on the semantics of the optional heading
+ scale used by the themes (the variables 'modus-themes-scale-[1-5]').
+ The values 1-4 apply to regular headings, with 4 being the largest on
+ the scale. While 'modus-themes-scale-5' is reserved for special
+ headers, such as Org '#+title:' or the Org Agenda's structure. Recall
+ that those variables only come into effect if the boolean variable
+ 'modus-themes-scale-headings' is set to a non-nil value (it is nil by
+ default).
+
++ Made several changes to the 'modus-themes.org' file in an effort to
+ improve the accuracy of the generated Texinfo markup. Thanks to Glenn
+ Morris and Richard Stallman for their valuable feedback in
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45143>.
+
++ Recorded a note in the manual on the intended colouration of
+ backgrounds applied by 'mmm-mode'. It explains what the constraints
+ are from an accessibility standpoint and how users can configure
+ things locally for more colourful, yet inaccessible, backgrounds.
+ Thanks to Davor Rotim for the valuable feedback in issue 161:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/161>.
+
++ Refined the manual's note on prism.el, simplifying the code samples
+ and clarifying the commentary.
+
++ Wrote indices for concepts, variables, functions, which are rendered
+ in the Info manual.
+
++ Elaborated on the possibility---and relative merits---of implementing
+ a theme-agnostic hook for advanced face configurations, as opposed to
+ relying on 'modus-themes-after-load-theme-hook'. Thanks to Daniel
+ Mendler for the valuable feedback in issue 131:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/131>.
+
+
+Miscellaneous
+-------------
+
++ Rewrote the documentation string of the 'deftheme' declaration of
+ 'modus-operandi' and 'modus-vivendi'.
+
++ Provided links to the Info nodes that discuss each of the 'defcustom'
+ declarations.
+
++ Wrote doc strings for every custom face that the themes define.
+#+end_src
+
+
+* 1.1.0
+:PROPERTIES:
+:CUSTOM_ID: h:bb0e16a9-8a8b-4b1b-9d62-b1715295247b
+:END:
+
+#+begin_src text
+Modus themes version 1.1.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2021-01-24
+
+This entry records the changes introduced to the project since the
+publication of version 1.0.0 (2020-12-05). There have been around 150
+commits in the meantime, qualifying this as one of the largest releases
+to date.
+
+As always, every colour-related modification documented herein conforms
+with the overarching accessibility objective of the themes for a minimum
+contrast ratio of 7:1 between background and foreground values in their
+given combination (conformance with the WCAG AAA standard).
+
+As the official manual is referenced several times, make sure to store
+its URL: <https://protesilaos.com/emacs/modus-themes>.
+
+If you are coming from older versions, please consult the change log
+entry for version 1.0.0.
+
+
+Overview
+--------
+
++ We have brought back the options that were present in version 0.13.0
+ or earlier which allowed users to override colors for either---or
+ both---of Modus Operandi and Modus Vivendi. Compared to the old
+ mechanism, the new one is more robust and should work regardless of
+ whether users run byte compiled code or not. This is considered and
+ advanced, "do-it-yourself" pathway to theme customisation. It is
+ discussed at length in the manual.
+
++ The new 'modus-themes-with-colors' macro makes it possible to read
+ palette variables from the active theme and, thus, pass them to
+ arbitrary functions or variables. Again, this is part of the advanced
+ customisations that are covered in the manual.
+
++ Several of the existing customisation options provide new stylistic
+ variants, further expanding their utility. While there are some new
+ customisations altogether. Combined with the above, we provide the
+ infrastructure that allows the themes to adapt gracefully to a variety
+ of circumstances and cover a broad range of demands.
+
++ More packages are added to the already comprehensive list of supported
+ face groups.
+
++ Some of the supported faces have benefited from further, albeit
+ subtle, refinements, demonstrating our commitment to consistency as
+ well as our attention to detail.
+
++ Two reports on such "further refinements" were published on the code
+ log section of protesilaos.com: <https://protesilaos.com/codelog>.
+
++ We have more people contributing to the project (and assigning
+ copyright to the FSF---as the themes are part of Emacs) and newer
+ users reporting issues. Also, there is anecdotal evidence from
+ several sources on an increased interest to make new or existing faces
+ accessible by default (such as by copying colour combinations from the
+ themes).
+
+
+New customisation options
+-------------------------
+
++ The existing 'modus-themes-mode-line' variable now supports three new
+ borderless styles: 'borderless', 'borderless-3d', 'borderless-moody'.
+
+ - The 'borderless' value uses the same colors as the default (nil
+ value), but removes the border effect. This is done by making the
+ box property use the same color as the background, effectively
+ blending the two and creating some padding.
+
+ - The 'borderless-3d' and 'borderless-moody' approximate the '3d' and
+ 'moody' options respectively, while removing the borders. However,
+ to ensure that the inactive modelines remain visible, they apply a
+ slightly more prominent background to them than what their
+ counterparts do (same inactive background as with the default).
+
+ The complete list of options:
+
+ 1. nil (default)
+ 2. 3d
+ 3. moody
+ 4. borderless
+ 5. borderless-3d
+ 6. borderless-moody
+
++ 'modus-themes-lang-checkers' provides several styles for spell
+ checkers and code linters with regard to how they underline text. The
+ default (nil) is to use a colour-coded wavy underline, without
+ changing the foreground of the affected text. Other options include
+ the ability to set a straight underline and to control the saturation
+ of the foreground, while one also provides for a change in the
+ background of the text in question. The valid symbols are as follows
+ (read the manual for more on the matter):
+
+ 1. nil (default)
+ 2. straight-underline
+ 3. subtle-foreground
+ 4. subtle-foreground-straight-underline
+ 5. intense-foreground
+ 6. intense-foreground-straight-underline
+ 7. colored-background
+
++ The 'modus-themes-org-habit' lets users pick between three styles for
+ the 'org-habit' table: (1) nil (the default), which uses a total of
+ eight colours, (2) 'simplified' which reduces the effective colours to
+ four, while applying less saturated hues, and (3) 'traffic-light'
+ which bring the colour count to three, thus blending the "clear" and
+ "ready" states for workflows where the distinction between is not
+ useful.
+
+ Please read the manual for a more detailed description of those
+ variants.
+
+ Thanks to Gustavo Barros for suggesting the idea, providing user
+ feedback on stylistic choices, as well as sharing insights on the
+ workflow that made the 'traffic-light' style possible:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/135>.
+
++ 'modus-themes-variable-pitch-ui' when set to a non-nil value applies a
+ proportionately spaced typeface (controlled by the 'variable-pitch'
+ face) to the User Interface, specifically the mode line, header line,
+ and tab-{bar,line}.
+
++ The existing 'modus-themes-links' variable now has a colourless
+ stylistic alternative: 'underline-only'. The available styles:
+
+ 1. nil (default)
+ 2. faint
+ 3. neutral-underline
+ 4. faint-neutral-underline
+ 5. no-underline
+ 6. underline-only
+
++ The existing 'modus-themes-prompts' variable has two new grayscale
+ styles: 'subtle-gray', 'intense-gray'. Furthermore, their old
+ 'subtle' and 'intense' values have more informative aliases in the
+ form of 'subtle-accented' and 'intense-accented'. All available
+ values:
+
+ 1. nil (default)
+ 2. subtle-accented ('subtle' remains for backward-compatibility)
+ 3. intense-accented ('intense' remains for backward-compatibility)
+ 4. subtle-gray
+ 5. intense-gray
+
++ The existing 'modus-themes-headings' variable now accepts two new
+ styles: 'no-color', 'no-color-no-bold'. All stylistic variants:
+
+ 1. nil (default fallback option---covers all heading levels)
+ 2. t (default style for a single heading, when the fallback differs)
+ 3. no-bold
+ 4. line
+ 5. line-no-bold
+ 6. rainbow
+ 7. rainbow-line
+ 8. rainbow-line-no-bold
+ 9. highlight
+ 10. highlight-no-bold
+ 11. rainbow-highlight
+ 12. rainbow-highlight-no-bold
+ 13. section
+ 14. section-no-bold
+ 15. rainbow-section
+ 16. rainbow-section-no-bold
+ 17. no-color
+ 18. no-color-no-bold
+
+ Please read the manual for instructions on how to apply those
+ universally or on a per-level basis.
+
+
+Added support for packages
+--------------------------
+
++ cfrs (used by treemacs)
++ cperl-mode
++ diredc
+
++ display-fill-column-indicator-mode. Thanks to Gustavo Barros for the
+ feedback: <https://gitlab.com/protesilaos/modus-themes/-/issues/148>.
+
++ evil-snipe. Thanks to Peter Wu for the feedback:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/139>.
+
++ isl (isearch-light). Thanks to Manuel Uberti for the feedback:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/144>.
+
++ marginalia
++ org-tree-slide
++ recursion-indicator
+
++ solaire. Thanks to CsBigDataHub1 for the feedback:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/137>.
+
+
+Refinements to already supported faces
+--------------------------------------
+
++ Reviewed the 'rainbow-delimiters' faces. Everything is documented in
+ a separate report (with screenshots). The short version is that we
+ pay close attention to detail and are willing to go to great lengths
+ in pursuit of improving the overall user experience:
+ <https://protesilaos.com/codelog/2020-12-27-modus-themes-review-rainbow-delimiters/>.
+
++ Updated the dedicated colours for 'whitespace-mode'. The background
+ should now be easier to discern. Also removed any remaining
+ inconsistencies. Thanks to Toon Claes for the feedback:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/149>.
+
++ Refined the faces of regexp constructs for strings affected by certain
+ values passed to the 'modus-themes-syntax' option. This is done to
+ disambiguate the backslashes and grouping delimiters from the rest of
+ the string. The relevant values for 'modus-themes-syntax' are:
+
+ - green-strings
+ - yellow-comments-green-strings
+ - alt-syntax
+ - alt-syntax-yellow-comments
+
+ The default colour for strings is blue, while regexp faces are yellow
+ and red, whereas in those variants the strings become green, hence the
+ need to make regexp faces more distinct (blue and magenta contrast
+ better with green and also between themselves, thus matching the
+ alternative aesthetics).
+
++ Reviewed dictionary.el faces (which ships with Emacs 28):
+
+ - Made 'dictionary-reference-face' look like all other links.
+
+ - Removed all properties from 'dictionary-word-definition-face':
+ the default sets a font family, which can create inconsistencies.
+
+ - Converted 'dictionary-word-entry-face' into comment-like text.
+
++ Refined and expanded the faces of Consult.
+
+ - Made its grep commands look the same as those of all other grep
+ tools.
+
+ - Ensured that line number previews, such as for the 'consult-line'
+ command use their own style of a subtle foreground instead of
+ inheriting from the 'line-number' face. This is to avoid cases
+ where previewed numbers and actual line numbers could be conflated
+ for one another.
+
+ - Removed the foreground pertinent to 'consult-imenu-prefix', as its
+ bold weight combined with the structure of Imenu indices was deemed
+ sufficient to differentiate it from actual 'consult-imenu' targets.
+
++ Eliminated exaggerations in the use of colour for various 'which-key'
+ faces.
+
++ Removed the needless background from the 'log-view-commit-body' face.
+ This is a new face that ships with Emacs 28 (its inclusion upstream
+ was documented in the last changelog entry).
+
++ Applied a subtle background to the 'log-view-message' face, in the
+ interest of improving the usability of its interface, in particular,
+ to contribute to heightened situational awareness while invoking
+ 'log-view-toggle-entry-display' in buffers such as those produced by
+ 'vc-print-root-log'.
+
++ Introduced a neutral background for all 'outline-minor-faces' instead
+ of merely mirroring the style of 'outline-mode' headings. This is
+ because it can sometimes be hard to tell whether 'outline-minor-mode'
+ is active, provided certain fairly common configurations in the
+ 'modus-themes-headings' user option (refer to the manual for all
+ customisation options).
+
++ Tweaked 'diff-mode' headings.
+
+ - Adjusted the values of the dedicated colours for diff headings in
+ order to amplify their relative contrast.
+
+ - Assigned a bold typographic weight to the 'diff-hunk-header' face so
+ as to enforce a greater sense of structure.
+
+ - Instructed 'diff-function' to inherit 'modus-theme-diff-heading' in
+ order to eliminate exaggerations in colouration.
+
++ Removed unnecessary underline from 'selectrum-current-candidate'.
+ Thanks to Daniel Mendler for the feedback:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/132>.
+
++ Made 'counsel-outline' inherit from the underlying Org faces. Also
+ corrected the style of 'counsel-outline-default' to use the main
+ foreground colour. Thanks to Gustavo Barros for the feedback:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/134>.
+
++ Prevented headings, ultimately governed by the 'modus-themes-headings'
+ user option, from inheriting the 'default' face as that could lead to
+ unintended consequences, such as by retaining a background colour when
+ none was expected.
+
++ Refashioned all faces that specified a foreground value of 'fg-alt' to
+ inherit the 'shadow' face instead ('fg-alt' is the colour that is
+ used, for example, in code comments by default). This makes it
+ possible for users to enact change across the theme just by tweaking
+ 'shadow'.
+
++ Fixed 'ruler-mode' text scaling adjustment, to make it cope well with
+ 'text-scale-adjust' and relevant commands. Also introduced minor
+ stylistic changes to the remainder of the 'ruler-mode' faces.
+
++ Eliminated the potentially problematic form of ':foreground nil' from
+ the 'org-ellipsis' face. In such cases it is always better to either
+ specify no foreground whatsoever, or declare an unspecified value.
+
+
+Patches from the community
+--------------------------
+
+Remember that the themes are part of Emacs and, thus, contributions that
+exceed a cumulative total of ~15 lines require the assignment of
+copyright to the Free Software Foundation. Please consult the themes'
+manual on the matter.
+
++ Nicolas De Jaeghere added support for 'exwm-floating-border-color':
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/15>.
+
++ Anders Johansson added support for 'helm-fd-finish':
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/16>.
+
++ Carlo Zancanaro fixed misquoting of 'tuareg-font-lock-multistage-face':
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/17>.
+
++ Xinglu Chen expanded Notmuch support to all its remaining faces:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/18>.
+
++ Kostadin Ninev added support for Dired+:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/19>.
+
++ Nicolas De Jaeghere expanded the supported items of 'pdf-faces'. Also
+ added an entry to the manual pertaining to link hints and the
+ requisite setup:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/20>.
+
++ Nicolas De Jaeghere wrote the new 'modus-themes-with-colors' macro,
+ which is documented at length in the manual:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/21>.
+
++ Nicolas De Jaeghere set up the infrastructure that grants users the
+ ability to override palette colors; an option that was removed in the
+ transition from version 0.13.0 to 1.0.0. The relevant variables are
+ 'modus-themes-colors-operandi', 'modus-themes-colors-vivendi' (again,
+ consult the manual):
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/23>.
+
++ Nicolas De Jaeghere deleted the 'modus-themes-core.el' file and merged
+ its contents into the main 'modus-themes.el' library:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/24> and
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/25>.
+
++ Nicolas De Jaeghere made the 'compilation-info' face consistent with
+ other compilation faces in terms of their optional bold weight:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/26>.
+
+Any remaining faults that may exist, despite our best intentions to
+remove them, are those of the maintainer and will be addressed as soon
+as they are identified.
+
+FSF copyright status:
+
+| Full name | Copyright |
+|---------------------+--------------|
+| Anders Johansson | covered |
+| Carlo Zancanaro | not required |
+| Kostadin Ninev | covered |
+| Nicolas De Jaeghere | covered |
+| Xinglu Chen | not required |
+
+
+Theme-related contributions to the wider community
+--------------------------------------------------
+
++ Helped address an incomplete colour value in 'org-transclusion-block':
+ <https://github.com/nobiot/org-transclusion/issues/41>.
+
++ Contributed to the formation of the zebra striping of 'embark':
+ <https://github.com/oantolin/embark/commit/bb4ae2a666ab1f4a307edd71f77bcbb90fb25cef>.
+
++ Reviewed the faces of 'goggles':
+ <https://github.com/minad/goggles/commit/d6e584a2c9487d3df4aee818c43485e437cb87ef>.
+
++ Helped raise awareness about refactoring 'org-tree-slide-header-overlay-face':
+ <https://github.com/takaxp/org-tree-slide/issues/38>.
+
++ Reported an issue for Moody that would affect the subset of Emacs 28
+ users who enable the new 'mode-line-compact' option:
+ <https://github.com/tarsius/moody/issues/28>.
+
++ Did the same for Keycast: <https://github.com/tarsius/keycast/issues/13>.
+
++ Defined the new 'perl-non-scalar-variable' in upstream Emacs:
+ <https://debbugs.gnu.org/cgi/bugreport.cgi?bug=45840>.
+
+
+Miscellaneous
+-------------
+
++ Created a new palette subset for "graph" colours, as none of the
+ existing paradigms would suffice for cases where faithfulness to
+ colour huenesss is important. Those are currently used by
+ 'modus-themes-org-habit'.
+
++ Ensured that theme functions which need to produce an error message do
+ so by calling 'error' instead of 'user-error'.
+
++ Added a 'modus-themes-load-themes' function that users can add to
+ their init files.
+
++ Expanded the project's git repo README file with a sample
+ 'use-package' configuration.
+
++ The previous two points followed from an inquiry into the subtleties
+ between 'enable-theme' and 'load-theme'. Those are now documented at
+ length in the manual.
+
++ Added screenshots to the web page that holds the official manual.
+ Thanks to Damien Cassou for the feedback:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/147>.
+
++ Swapped the values of 'cyan-faint' and 'cyan-alt-faint' for Modus
+ Vivendi.
+
++ Tweaked 'font-lock-doc-face' and 'font-lock-type-face' variations when
+ "faint syntax" is in effect: (setq modus-themes-syntax 'faint).
+
++ Refined 'font-lock-doc-face' for when modus-themes-syntax is given a
+ value of either 'yellow-comments-green-strings' or 'green-strings'.
+ The changes are minor when treated in isolation, though they have
+ helped improve the overall consistency of the end result: the gestalt.
+
++ Reviewed select "faint" colours for both Modus Operandi and Modus
+ Vivendi. The technicalities are discussed in a complete report:
+ <https://protesilaos.com/codelog/2021-01-11-modus-themes-review-select-faint-colours/>.
+
++ Ensured that (setq modus-themes-syntax 'alt-syntax) and its "yellow
+ comments" variant are more truthful to their intended style, by
+ eliminating any exaggerations in the use of colour.
+
++ Adjusted the saturation of the green-alt value of Modus Vivendi.
+
++ Updated the manual to reflect all of the aforementioned.
+
+Thanks once again to everyone who contributed patches or reported an
+issue. This has been yet another period of intense work; work which
+helps solidify the Modus themes as (i) uncompromisingly accessible in
+accordance with the highest legibility standard, (ii) highly
+customisable in true Emacs fashion, (iii) thoroughly comprehensive in
+terms of face coverage, and (iv) meticulously designed throughout.
+#+end_src
+
+* 1.0.0
+:PROPERTIES:
+:CUSTOM_ID: h:94b5915e-1085-4859-ac9f-daf91e007741
+:END:
+
+#+begin_src text
+Modus themes version 1.0.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2020-12-05
+
+This entry documents the changes since version 0.13.0 (2020-10-08).
+They constitute a major release with backward-incompatible additions
+which are described below.
+
+As always, every colour-related modification documented herein conforms
+with the overarching accessibility objective of the themes for a minimum
+contrast ratio of 7:1 between background and foreground values in their
+given combination (conformance with the WCAG AAA standard).
+
+Expect to find examples of basic and advanced customisations in the
+comprehensive Info manual bundled with the themes, which is also
+available at: <https://protesilaos.com/emacs/modus-themes>.
+
+
+Overview of major changes
+=========================
+
+0. The option that was present in earlier releases to override the
+ colour palette has been removed. It cannot work with byte
+ compilation. We must not compromise on performance, especially in
+ light of the fairly high line count of the themes (broad face
+ coverage combined with a multitude of customisation options).
+
+1. The code base has been refactored. The two themes, Modus Operandi
+ (light) and Modus Vivendi (dark), derive from the same source.
+
+2. The refactoring makes it possible to distribute the two themes as
+ part of a single package. You can find 'modus-themes' on MELPA, with
+ other archives and core Emacs following suit soon thereafter (the
+ Modus themes are built into Emacs since their version 0.12.0).
+
+3. The 'modus-operandi-theme' and 'modus-vivendi-theme' packages in
+ MELPA and GNU ELPA are obsolete. MELPA has already deleted them and
+ now only provides 'modus-themes', while GNU ELPA shall do so soon
+ enough.
+
+ + Package providers of GNU/Linux distros, or other archives, are
+ encouraged to update their sources so that they only deliver a
+ single package that covers both themes.
+
+4. To avoid surprises, the refactored code is in the 'main' branch which
+ becomes the default henceforth. The 'master' branch, from where all
+ prior releases were built, is thus deprecated. Existing installs of
+ 'modus-operandi-theme' and/or 'modus-vivendi-theme' must manually
+ switch to the new package sources, which offer a certain guarantee
+ that they are informed of the breaking changes documented herein.
+
+ + Users of 'straight.el' must make sure that they pull from the
+ 'main' branch. This may also be the case for other such tools,
+ though I have not had the time to test them all.
+
+5. The refactoring introduces a unified customisation framework. Now
+ all user-facing variables are named 'modus-themes-*' instead of
+ 'modus-operandi-*' and 'modus-vivendi-*'. Users of both items can
+ thus cut down on duplicate code or inelegant workarounds on their
+ end. Example:
+
+ modus-operandi-bold-constructs
+ | | | | | | | ====> modus-themes-bold-constructs
+ modus-vivendi-bold-constructs
+
+6. The themes now provide common user-facing functions.
+
+ + 'modus-themes-load-operandi' and 'modus-themes-load-vivendi' can be
+ used in Lisp to load the theme they name, while disabling their
+ counterpart and running 'modus-themes-after-load-theme-hook'. The
+ hook can be used to override or further customise faces (examples
+ are furnished in the manual).
+
+ + 'modus-themes-toggle' interactively switches between Modus Operandi
+ and Modus Vivendi or opens a minibuffer prompt to select between
+ the two if none of them is active. It ultimately calls the
+ aforementioned functions to load the themes, so it also triggers
+ the hook. Bind this command to a key of your convenience (the
+ author uses F5).
+
+ + 'modus-themes-color' returns the colour value of a symbol in the
+ alists that hold the themes' palettes. The alists are
+ 'modus-themes-colors-operandi' and 'modus-themes-colors-vivendi'.
+ 'modus-themes-color' always operates on the active theme, making it
+ suitable for post-theme-load customisations (via the hook we
+ covered earlier). Its usage is documented in the manual and is
+ meant to be employed by those who are prepared to assume
+ responsibility for face-related changes they introduce on their
+ setup.
+
+ + 'modus-themes-color-alts' occupies the same niche as the one right
+ above, with the exception that it takes two arguments. The first
+ is the alist key to be used by 'modus-operandi' and the second is
+ for 'modus-vivendi'.
+
+ + 'modus-themes-wcag-formula' implements the WCAG formula to measure
+ a colour value's relative luminance. While 'modus-themes-contrast'
+ applies the formula to derive the contrast ratio between two colour
+ values in hexadecimal RGB notation. This can be used to verify the
+ accessibility of colour combinations provided by the themes or new
+ ones defined at the user level (the Modus themes conform with the
+ WCAG AAA standard which means that this kind of contrast is 7:1 or
+ higher for all applicable background+foreground combinations).
+
+
+Customisation options
+=====================
+
+This is the complete list with all the customisation options:
+
+ modus-themes-slanted-constructs (boolean)
+ modus-themes-bold-constructs (boolean)
+ modus-themes-variable-pitch-headings (boolean)
+ modus-themes-no-mixed-fonts (boolean)
+ modus-themes-headings (alist)
+ modus-themes-scale-headings (boolean)
+ modus-themes-fringes (choice)
+ modus-themes-org-blocks (choice)
+ modus-themes-prompts (choice)
+ modus-themes-mode-line (choice)
+ modus-themes-diffs (choice)
+ modus-themes-syntax (choice)
+ modus-themes-intense-hl-line (boolean)
+ modus-themes-paren-match (choice)
+ modus-themes-region (choice)
+ modus-themes-links (choice)
+ modus-themes-completions (choice)
+
+Plus those which are contingent on 'modus-themes-scale-headings':
+
+ modus-themes-scale-1
+ modus-themes-scale-2
+ modus-themes-scale-3
+ modus-themes-scale-4
+ modus-themes-scale-5
+
+Consult the manual for each of them and please verify that none of the
+older options remains in your init file.
+
+
+Customisation options that did not exist in earlier versions
+------------------------------------------------------------
+
+New entries and their possible values:
+
+1. modus-themes-syntax
+
+ ,* nil (default)
+ ,* faint
+ ,* yellow-comments
+ ,* green-strings
+ ,* yellow-comments-green-strings
+ ,* alt-syntax
+ ,* alt-syntax-yellow-comments
+
+ (supersedes options for "faint syntax" and "comments")
+
+2. modus-themes-links
+
+ ,* nil (default)
+ ,* faint
+ ,* neutral-underline
+ ,* faint-neutral-underline
+ ,* no-underline
+
+ (supersedes options for "no underlines")
+
+3. modus-themes-paren-match
+
+ ,* nil (default)
+ ,* intense
+ ,* subtle-bold
+ ,* intense-bold
+
+ (supersedes options for "intense paren match")
+
+4. modus-themes-region
+
+ ,* nil (default)
+ ,* no-extend
+ ,* bg-only
+ ,* bg-only-no-extend
+
+Furthermore, the 'modus-themes-diff' has a new option to choose from:
+the symbol 'bg-only'. It applies colour-coded backgrounds but does not
+override any syntax highlighting that may be present. This makes it
+suitable for use with a non-nil value for diff-font-lock-syntax (which
+is the default for diff-mode buffers in Emacs 27 or higher).
+
+
+Support for new faces or face groups
+====================================
+
++ consult
++ macrostep
++ make-mode
++ pdf-tools
++ popup
++ shr
++ sieve-mode
+
+(remember that the list of supported packages is already comprehensive)
+
+Thanks to:
+
++ Adam Spiers for bringing 'macrostep' to my attention.
+
++ Madhavan Krishnan for submitting the code for pdf-tools:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/14>.
+
++ Manuel Uberti for reporting the issue with popup.el:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/107>.
+
++ Again thanks to Manuel for consult:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/123>. And to
+ Daniel Mendler, its developer, for communicating with us on the status
+ of the project.
+
++ Togan Muftuoglu for reporting the issue with sieve-mode:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/121>.
+
+
+Refinements to existing faces
+=============================
+
++ The diary and holiday marks in 'M-x calendar' are displayed using a
+ slightly tinted background in order to improve their contrast.
+ Holidays are also rendered in a bold font. Thanks to Nicolas De
+ Jaeghere for reporting the issue and following it up with valuable
+ feedback: <https://gitlab.com/protesilaos/modus-themes/-/issues/127>.
+
++ Code blocks in 'markdown-mode' now have a subtle background that
+ extends to the edge of the window. Thanks to Roman Rudakov for the
+ suggestion and Hörmetjan Yiltiz for further testing:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/115>.
+
++ Inline code in 'markdown-mode' has a subtle background that covers the
+ length of the construct. Refer to issue #115 as above.
+
++ Ivy's main pattern-matching faces are slightly adjusted to work more
+ effectively when users opt for "modus-themes-completions 'moderate" or
+ "modus-themes-completions 'opinionated".
+
++ Swiper's 'swiper-isearch' command defaults to a more colourful
+ presentation that clearly disambiguates matching pattern groups
+ between themselves as well as their own active and inactive states.
+ Thanks to John Haman for reporting the problem:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/125>.
+
++ Swiper's remaining faces are tweaked to better convey the intent of
+ this tool.
+
++ The border of 'ivy-posframe' is more noticeable. Thanks to Pete
+ Kazmier: <https://gitlab.com/protesilaos/modus-themes/-/issues/126>.
+
++ The 'fringe' face no longer returns a nil background, which allows
+ 'dap-ui-controls-mode' to display things properly. Thanks to Simon
+ Pugnet: <https://gitlab.com/protesilaos/modus-themes/-/issues/106>.
+
++ Tags and priority cookies in Org mode no longer have a box property.
+ This is because of changes in upstream Org that we helped solve and
+ that are covered in the previous CHANGELOG entry (in short: Org
+ heading constructs inherit the underlying heading's properties that
+ are not part of their own specs, while they retain those that are
+ explicitly defined for them---adaptive headings). Properly solves the
+ following issues:
+
+ ,* <https://gitlab.com/protesilaos/modus-themes/-/issues/104>. Thanks
+ to user "bepolymathe".
+
+ ,* <https://gitlab.com/protesilaos/modus-themes/-/issues/95>. Thanks
+ to Roman Rudakov.
+
++ The faces of 'M-x re-builder' are less intrusive.
+
++ All the following now inherit from basic font-lock faces and thus
+ benefit from options such as 'modus-themes-syntax':
+
+ ,* geiser
+ ,* nxml-mode
+ ,* tuareg
+ ,* web-mode
+ ,* xah-elisp-mode
+
++ Diff headers have a subtle grey background that extends to the edge of
+ the window.
+
++ The faces of log-view and change-log use colour combinations that
+ better differentiate the various objects on display.
+
++ 'font-lock-type-face' uses a cyan hue instead of magenta.
+
++ 'magit-header-line-key' uses a blue foreground colour instead of red.
+
++ Doc strings in code syntax are rendered in a new dedicated colour.
+ The change is fairly subtle and should practically go unnoticed.
+
++ 'org-date' now respects the 'modus-themes-no-mixed-fonts' option.
+ Thanks to user "fleimgruber" for reporting the issue:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/124>.
+
++ 'org-property-value' uses a slightly different shade of cyan.
+
++ 'dim-autoload' will always look like a regular comment.
+
++ The 'italic' face is inhereted by all relevant faces instead of
+ hard-wiring a slant property. This offers the potential advantage of
+ specifying a distinct family (or other properties) for constructs that
+ are meant to be rendered in italics (the manual has an example in its
+ DIY sections for this scenario though it uses the 'bold' face---just
+ apply the same idea to the 'italic' face).
+
++ 'dictionary-reference-face' inherits from 'button' (as with all
+ links).
+
++ Several comment-related faces beyond the basic ones work with
+ 'modus-themes-syntax' when that has an effect on the colour of
+ comments. The faces are:
+
+ ,* git-commit-comment-file
+ ,* git-commit-comment-heading
+ ,* git-rebase-comment-hash
+ ,* git-rebase-comment-heading
+
++ 'transient-value' is more noticeable and fits better in its context.
+
++ All remaining Org metadata-related faces are refined for consistency
+ between them in an attempt to make them unobtrusive. More subtle
+ colouration is applied. Affected faces:
+
+ ,* org-drawer
+ ,* org-property-value
+ ,* org-special-keyword
+
+
+Theme-related contributions to the wider community
+==================================================
+
++ Defined the 'log-view-commit-body' for Emacs 28.1:
+ <https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-11/msg00303.html>
+ and
+ <https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-11/msg02196.html>.
+
++ Specified the version of the 'diff-error' face for Emacs 28.1:
+ <https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-11/msg01328.html>.
+
++ Added the 'org-dispatcher-highlight' face to upstream Org:
+ <https://lists.gnu.org/archive/html/emacs-orgmode/2020-10/msg00158.html>.
+
+ ,* Report with screenshots:
+ <https://protesilaos.com/codelog/2020-10-24-org-export-dispatcher-face/>.
+
++ Helped fix face of Flymake's unknown backend in inactive modelines:
+ <https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-11/msg01119.html>.
+
++ Solved bug#44198 about a user not knowning the themes are in Emacs:
+ <https://lists.gnu.org/archive/html/bug-gnu-emacs/2020-10/msg02001.html>.
+
+
+Miscellaneous
+=============
+
++ The new default 'main' branch of the Modus themes' git repo is an idea
+ that was presented by user "Emacs Contrib" in issue 112:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/112>. Raising
+ awareness about the negative impact of potentially, tacitly, or
+ explicitly offensive language is a goal worth pursuing. Plus "main"
+ is a more appropriate name for the primary branch of a project and we
+ do not lose anything by introducing this change as part of version
+ 1.0.0, which anyhow requires manual interventions in user
+ configurations.
+
++ Thanks to Manuel Uberti, Jeremy Friesen, and Gitlab user "Eugene" for
+ their feedback during the process that eventually led to the
+ development of the 'modus-themes-syntax' customisation option:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/105>.
+
++ Thanks to André Alexandre Gomes for the feedback in issue 111, which
+ led to the simplification of the manual's references to Guix:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/111>.
+
++ Thanks to Nicolas De Jaeghere for noting that BBDB is indirectly
+ supported: <https://gitlab.com/protesilaos/modus-themes/-/issues/128>.
+
+Between the refactoring of the code base and all other changes, this has
+been yet another period of hard work to deliver on the promise of themes
+that are (i) highly accessible and (ii) comprehensive in both their face
+coverage and customisation options, while always conforming with the
+highest accessibility standard for legible text.
+
+Special thanks to the MELPA maintainers for all their contributions.
+MELPA is an integral part of the wider Emacs community. Thanks, in
+particular, to Chris Rayner who has reviewed all my pull requests
+hitherto, and to Jonas Bernoulli for checking the latest one (and its
+concomitant issue) that introduced the new 'modus-themes' package.
+
+Thank you, the reader, for your attention and for understanding the
+longer term benefits of the refactoring, despite the short term friction
+it may have introduced.
+#+end_src
+
+* 0.13.0
+:PROPERTIES:
+:CUSTOM_ID: h:b529ec46-2a9f-4844-9760-4708d2ca575b
+:END:
+
+#+begin_src text
+Modus Operandi and Modus Vivendi version 0.13.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2020-10-08
+
+This entry documents the changes since version 0.12.0 (2020-08-26).
+There have been around 150 commits in the meantime, making this the
+largest release to date (though sheer volume should not be conflated
+with quality, of which there is plenty).
+
+As always, everything described herein conforms with the overarching
+accessibility objective of the themes for a minimum contrast ratio of
+7:1 between background and foreground values in their given combinations
+(conformance with the WCAG AAA standard).
+
+Overview
+========
+
+1. There is a new Info manual that documents the customisation options
+ as well as every other piece of information pertinent to the themes.
+ You will find it in the Info pages inside of Emacs. Or browse it
+ online: <https://protesilaos.com/emacs/modus-themes>.
+
+2. New customisation options grant users more power to further adapt the
+ active theme to their preferences.
+
+3. Extended coverage for even more faces and face groups, adding to the
+ already comprehensive list of directly supported ones.
+
+4. Lots of tweaks to improve the use of colour and avoid exaggerations
+ (well, "exaggerations" is relative, since the prior state was already
+ carefully designed).
+
+5. A new page hosts all pictures that demo the themes across a wide
+ range of scenaria: <https://protesilaos.com/emacs/modus-themes-pictures>.
+
+6. Similarly, the change log also has its own dedicated web page:
+ <https://protesilaos.com/emacs/modus-themes-changelog>.
+
+
+New customisation options
+=========================
+
+Note that all customisation options are documented at length in the new
+Info manual. What is offered here is not necessarily exhaustive.
+
+
+Diff styles
+-----------
+
+Symbol names ("choice" type):
+
++ modus-operandi-theme-diffs
++ modus-vivendi-theme-diffs
+
+Possible values:
+
+1. nil (default)
+2. desaturated
+2. fg-only
+
+DEPRECATED ("boolean" type):
+
++ modus-operandi-theme-subtle-diffs
++ modus-vivendi-theme-subtle-diffs
+
+This option supersedes older ones while retaining their functionality.
+
+The default remains unaltered, meaning that the diffs will use fairly
+prominent colour-coded combinations for the various elements (e.g. green
+text on an unambiguously green backdrop).
+
+A 'desatured' value will tone down the default aesthetic, giving a less
+vibrant feel.
+
+While 'fg-only' removes almost all coloured backgrounds, opting to apply
+colour only to the relevant text (this was the case with the
+now-deprecated options). There are some exceptions, like word-wise or
+"refined" diffs, which still use coloured backgrounds to convey their
+meaning.
+
+
+Modeline styles
+---------------
+
+Symbol names ("choice" type):
+
++ modus-operandi-theme-mode-line
++ modus-vivendi-theme-mode-line
+
+Possible values:
+
+1. nil (default)
+2. 3d
+3. moody
+
+DEPRECATED ("boolean" type):
+
++ modus-operandi-theme-3d-modeline
++ modus-vivendi-theme-3d-modeline
+
+The default modeline continues to be a two-dimensional rectangle with a
+border around it. Active and inactive modelines use different colour
+combinations for their main background and foreground.
+
+Option '3d' produces an effect similar to what you get in a generic
+Emacs session, where the active modeline has a pseudo three-dimensional
+effect applied to it. This option offers the same functionality as that
+of the deprecated variables.
+
+Option 'moody' is designed specifically for use with the Moody library,
+though it can also be used without it. Instead of implementing a box
+effect, it applies an overline and underline instead, while also toning
+down the inactive modeline.
+
+Thanks to Nicolas De Jaeghere for the feedback and code samples in issue
+80: <https://gitlab.com/protesilaos/modus-themes/-/issues/80>
+
+
+Headline styles
+---------------
+
+Symbol names ("alist" type):
+
++ modus-operandi-theme-headings
++ modus-vivendi-theme-headings
+
+DEPRECATED ("boolean" type):
+
++ modus-operandi-theme-rainbow-headings
++ modus-operandi-theme-section-headings
++ modus-vivendi-theme-rainbow-headings
++ modus-vivendi-theme-section-headings
+
+Possible values, which can be specified for each heading level (examples
+further below):
+
+0. nil (default fallback option---covers all heading levels)
+1. t (default style for a single heading, when the fallback differs)
+2. no-bold
+3. line
+4. line-no-bold
+5. rainbow
+6. rainbow-line
+7. rainbow-line-no-bold
+8. highlight
+9. highlight-no-bold
+10. rainbow-highlight
+11. rainbow-highlight-no-bold
+12. section
+13. section-no-bold
+14. rainbow-section
+15. rainbow-section-no-bold
+
+This supersedes and greatly expands upon what the deprecated variables
+once offered. It is now possible to (i) benefit from more stylistic
+choices, and (ii) apply them on a per-level basis.
+
+As always, the defaults remain in tact: headings are just rendered in a
+bold weight and their colours are not too saturated to offer a plain
+text impression that relies on typography to convey its meaning.
+
+The info manual explains the details. A few examples:
+
+ ;; Per-level styles (t means everything else)
+ (setq modus-operandi-theme-headings
+ '((1 . highlight)
+ (2 . line)
+ (t . rainbow-line-no-bold)))
+
+ ;; Uniform style for all levels
+ (setq modus-operandi-theme-headings
+ '((t . rainbow-line-no-bold)))
+
+ ;; Default style for level 1, while others differ
+ (setq modus-operandi-theme-headings
+ '((1 . t)
+ (2 . line)
+ (t . rainbow-line-no-bold)))
+
+Thanks to Adam Spiers for the feedback in issue 81:
+<https://gitlab.com/protesilaos/modus-themes/-/issues/81>. Also thanks
+to Nicolas De Jaeghere for helping refine relevant stylistic choices:
+<https://gitlab.com/protesilaos/modus-themes/-/issues/90>.
+
+
+No link underlines
+------------------
+
+Symbol names ("boolean" type):
+
++ modus-operandi-theme-no-link-underline
++ modus-vivendi-theme-no-link-underline
+
+Possible values:
+
+1. nil (default)
+2. t
+
+By default, the themes apply an underline effect to links, symbolic
+links, and buttons. Users can now disable this style by setting the new
+option to 't'.
+
+Thanks to Utkarsh Singh for the feedback in issue 94:
+<https://gitlab.com/protesilaos/modus-themes/-/issues/94>
+
+
+No mixed fonts
+--------------
+
+Symbol names ("boolean" type):
+
++ modus-operandi-theme-no-mixed-fonts
++ modus-vivendi-theme-no-mixed-fonts
+
+Possible values:
+
+1. nil (default)
+2. t
+
+By default, the themes configure some spacing-sensitive faces, such as
+Org tables and code blocks, to always inherit from the 'fixed-pitch'
+face (documented in the manual). This is to ensure that those
+constructs remain monospaced when users opt for something like the
+built-in 'M-x variable-pitch-mode'. Otherwise the layout would break.
+
+The obvious downside with this theme design is that users need to
+explicitly configure the font family of 'fixed-pitch' in order to apply
+their desired typeface (how to do this is also covered in the manual).
+That may be something they do not want to do. Hence this option to
+disable any kind of font mixing done by the active theme. Set it to
+'t'.
+
+
+Support for new faces or face groups
+====================================
+
++ awesome-tray
++ binder
++ cperl-mode
++ eldoc-highlight-function-argument
++ erc escaped colour sequences
++ eshell-syntax-highlighting
++ flycheck-color-mode-line
++ isearch regexp groups (Emacs version >= 28)
++ mpdel
++ objed
++ org 9.4 new faces: 'org-headline-todo' and 'org-table-header'
++ racket-mode
++ typescript-mode
+
+Thanks to:
+
++ Damien Cassou for reporting the issue with mpdel:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/99>
+
++ Dario Gjorgjevski for reporting the issue with erc:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/92>
+
++ Markus Beppler for contributing the patch for cperl-mode:
+ <https://gitlab.com/protesilaos/modus-themes/-/merge_requests/11>
+
++ User "Moesasji" for reporting the issue with objed:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/79>
+
+
+Refinements to existing faces
+=============================
+
++ calfw applies colours and styles in a way that makes it consistent
+ with the rest of the themes' metaphors.
+
++ diredfl makes more considerate use of colour. We still apply colour
+ everywhere (the whole point of this package) but make sure to avoid
+ exaggerations.
+
++ doom-modeline-battery-error face fits better with the rest of the
+ design.
+
++ elfeed search buffers use less intense colours, while still keeping
+ all elements fairly distinct. The intent is to avoid a "rainbow
+ effect" in such a dense interface.
+
++ elfeed read and unread items are more distinct.
+
++ git commit and vc log edit messages benefit from refined colour
+ combinations for their various constructs. The commit's summary is
+ now rendered in a bold weight, to better convey the idea that this is
+ a quasi heading element.
+
++ gnus heading colours are more consistent. All information remains
+ clearly distinct, but we now avoid using colours that are on opposite
+ sides of the colour spectrum. Basically to keep things distinct
+ without going over the top.
+
++ gnus read and unread items are easier to tell apart. Thanks to user
+ "Nick" for reporting the issue:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/97>.
+
++ help-argument-name has a distinct foreground colour, so that it is
+ easier to spot it in "*Help*" buffers. Its slant is also controlled
+ by the active theme's customisation option for slanted constructs (nil
+ by default---check the manual).
+
++ helpful-heading now is consistent with other heading styles. Thanks
+ to Nicolas De Jaeghere for reporting the issue:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/90>.
+
++ icomplete, ido, orderless are all tweaked to work better under various
+ circumstances.
+
++ info-menu-star uses a red colour to make it easier to select a menu
+ entry by estimating its number. This face applies to every third
+ element and is a nice little extra to have.
+
++ info quoted strings are configured to always render in 'fixed-pitch',
+ in line with the themes' design for mixed fonts (remember to check the
+ relevant customisation option).
+
++ line numbers work properly with 'text-scale-adjust'. Thanks to user
+ "jixiuf" for reporting the issue:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/98>.
+
++ line-number-current-line no longer applies a bold weight to its text.
+ This is to avoid a certain "jump effect" while moving between lines,
+ where the affected numbers grow and shrink in weight as the line
+ changes (once you see it, you will know what I mean).
+
++ line-number-major-tick and line-number-minor-tick do use a bold weight
+ because they are fixed on the scale. Their colours are also improved
+ to better complement their intended role (these faces are for Emacs 27
+ or higher).
+
++ magit-diff-file-heading-selection, magit-diff-hunk-heading-selection
+ use more appropriate colour combinations.
+
++ markdown blockquotes and org quote blocks use a different foreground,
+ which is colder than the previous one. Just to make sure that they
+ are not mistaken for inline code.
+
++ message headers use less exaggerated colour combinations. The
+ differences are fairly minor.
+
++ message-mml no longer uses a green foreground, as that could
+ potentially cause confusion with quoted text in some cases. A unique,
+ albeit less saturated, foreground is used instead.
+
++ message-separator uses a more neutral colour combination, while
+ retaining its overall uniqueness within its context (i.e. mail
+ composition).
+
++ modeline colours are refined to improve the contrast between active
+ and inactive states.
+
++ mu4e-replied-face has a new colour that accounts for colour distance
+ relative to its context. Thanks to Shreyas Ragavan for reporting the
+ issue: <https://gitlab.com/protesilaos/modus-themes/-/issues/69>.
+
++ org agenda date and structure no longer behave like headings in other
+ Org buffers. Instead, they have their own styles to better perform
+ their intended function and to avoid exaggerations.
+
++ org agenda dimmed to-do items (which have blocked sub-items) are no
+ longer assigned a subtle grey background colour. They are instead
+ rendered with a bold weight and a subtle grey foreground to minimise
+ distractions. Thanks to Roman Rudakov for reporting this in issue
+ 101: <https://gitlab.com/protesilaos/modus-themes/-/issues/101>.
+
++ org agenda clocked items are configured to extend their background to
+ the edge of the window. Otherwise they are cut off at the last text
+ character, which creates inconsistencies while using tags: a tag is
+ placed to the right so the background extends further than without
+ them. Based again on the feedback of Roman Rudakov in issue 101:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/101>.
+
++ org agenda current time no longer uses a background. A bold weight
+ and a blue foreground are applied instead. The intent is to keep
+ things clean. This is also covered by Roman Rudakov's feedback in
+ issue 101: <https://gitlab.com/protesilaos/modus-themes/-/issues/101>.
+
++ org-checkbox-statistics-done, org-checkbox-statistics-todo inherit
+ from org-done and org-todo respectively, instead of defining their own
+ properties.
+
++ org drawers and their data now use 'fixed-pitch' in the interest of
+ consistency with other metadata-like faces. Thanks (yet again!) to
+ Nicolas De Jaeghere for reporting the issue:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/91>.
+
++ org-footnote underlines will now always use the same colour, instead
+ of applying the one of other coloured constructs (e.g. when the
+ footnote is inline and part of the text is rendered as verbatim).
+
++ org-meta-line is less prominent and, thus, more consistent with other
+ metadata-related constructs.
+
++ org-roam faces are updated to match the current state of the upstream
+ project. The main colour of org-roam links is now different than that
+ of standard links in an attempt to differentiate between the two (due
+ to their unique semantics). If this is not desired, you can evaluate
+ the following:
+
+ (setq org-roam-link-use-custom-faces nil)
+
++ org-todo, org-done, as well as relevant faces such as priorities and
+ statistics are reviewed to work better with all heading combinations.
+ Though please read the next section about "adaptive headings", as such
+ workarounds will no longer be necessary for future stable releases of
+ Org.
+
++ selectrum uses different styles than before to account for its unique
+ property of overlaying matching characters on top of the current
+ line's background. We want to avoid scenaria where matches are
+ difficult to discern and the current line is not clear.
+
++ vc modeline states benefit from improved colour choices. Just minor
+ adjustments to account for the review of the base modeline colours.
+
++ vterm base colours now are variants of gray to ensure that some tools,
+ such as zsh suggestions work properly. Thanks to user "jixiuf" for
+ reporting this issue and suggesting a possible solution:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/93>.
+
+Contributions to the wider community
+====================================
+
+Sometimes the themes reveal bugs in other packages. It is of paramount
+importance that we report those to the upstream developers, try to help
+them reproduce the issue, and, where possible, support them in tracing
+the problem's root cause.
+
+Four such cases during this release:
+
+1. Adaptive Org headings. Solved upstream and documented on my website:
+ <https://protesilaos.com/codelog/2020-09-24-org-headings-adapt/>.
+ Reported and discussed on the themes' issue tracker:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/37>.
+
+2. Alignment of Org tags with proportional fonts. Ongoing thread:
+ <https://lists.gnu.org/archive/html/emacs-orgmode/2020-09/msg00415.html>.
+ Reported and discussed on the themes' issue tracker:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/85>.
+
+3. Org priority cookie has extra space. Ongoing thread:
+ <https://lists.gnu.org/archive/html/emacs-orgmode/2020-09/msg00696.html>.
+ Reported and discussed on the themes' issue tracker, with feedback
+ from Roman Rudakov:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/95>.
+
+4. Company overlay pop-up misaligns items. Reported upstream and
+ acknowledged as a known issue that occurs in certain cases:
+ <https://github.com/company-mode/company-mode/issues/1010>.
+ Discussion on the themes' issue tracker, with feedback from Iris
+ Garcia: <https://gitlab.com/protesilaos/modus-themes/-/issues/96>.
+
+
+Miscellaneous
+=============
+
++ Belatedly (by about 2 weeks) pushed tag for version 0.12.0. Thanks to
+ Alex Griffin for bringing this to my attention:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/89>
+
++ Fixed a bug with how some older customisation options were declared as
+ obsolete. Thanks to Tassilo Horn for noticing and reporting the
+ problem: <https://gitlab.com/protesilaos/modus-themes/-/issues/88>.
+
++ Fixed a misplaced optional prefix argument in the manual for how to
+ switch themes using a custom function. Thanks to Manuel Uberti for
+ catching this omission of mine and reporting it:
+ <https://gitlab.com/protesilaos/modus-themes/-/issues/84>.
+
++ Silenced the Elisp package linter for a spurious error on a single
+ eldoc face. Thanks to Steve Purcell for the guidance:
+ <https://github.com/purcell/package-lint/issues/187>.
+
++ Defined two new dedicated background colours for exceptional cases.
+ These are intended for internal use in very special circumstances.
+
++ Reword GuixSD to "Guix System" in the list of package formats
+ currently available.
+
++ Reviewed the main blue colours for both themes. While the changes are
+ practically impossible to discern upon first sight, the process was
+ far from straightforward. A complete report documents the minutia:
+ <https://protesilaos.com/codelog/2020-09-14-modus-themes-review-blues/>.
+
++ Reviewed the "active" palette subset, typically used in the modelines.
+ No report was necessary for those, as the changes were fairly simple.
+
++ Reviewed the "intense" background colour that comes into effect when
+ users opt for the customisation option for intense paren-match styles
+ (check the manual). Both the hue and the saturation have been changed
+ to better conform with the intended function of this particular entry.
+
++ Reviewed the fringe-specific accented backgrounds. Commit 7316e3320
+ contains tables that compare the relative luminance of old and new
+ values.
+
++ Improved the advice for setting fonts using 'set-face-attribute'. The
+ information is in the manual and is also available as a blog entry:
+ <https://protesilaos.com/codelog/2020-09-05-emacs-note-mixed-font-heights/>.
+
++ Rewrote an expression as "(or x y)" instead of "(if x x y)" in one
+ place. Just goes to show that tweaking the code is also part of the
+ deal.
+
++ Abstracted and simplified heading level properties by using bespoke
+ theme faces. Makes it easier to keep things consistent across the
+ various face groups.
+
++ Same principle as above for diff-related styles.
+
++ Users who prefer to do things their own way or who just wish to
+ contribute code to the Modus themes may wish to read my "Notes for
+ aspiring Emacs theme developers":
+ <https://protesilaos.com/codelog/2020-08-28-notes-emacs-theme-devs/>.
+
+This has been yet another period of intense work: reviewing faces and
+applying colours is never easy, adding new customisation options is
+always tricky, and documenting everything takes a lot of time (unless
+you do all of those on a whimsy, which hopefully is not the case here).
+
+Thanks again to everyone who helped improve the themes!
+#+end_src
+
+* 0.12.0
+:PROPERTIES:
+:CUSTOM_ID: h:9d9394c1-84b6-4c23-8936-fe4f2f43301d
+:END:
+
+#+begin_src text
+Modus Operandi and Modus Vivendi version 0.12.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2020-08-26
+
+This entry documents the set of changes since version 0.11.0
+(2020-07-31). There have been around 70 commits in the meatime, though
+the sheer number may obfuscate the fact that a lot of work has gone into
+this release.
+
+As always, every change described here conforms with the accessibility
+objective of the themes for a minimum 7:1 contrast ratio between
+background and foreground values in their given combinations
+(conformance with the WCAG AAA standard).
+
+New customisation options
+=========================
+
+1 Completion Frameworks
+-----------------------
+
+The star of the show has to be the new option that refashions the
+aesthetics of completion UIs: Helm, Icomplete, Ido, Ivy, Sallet,
+Selectrum. The 'modus-operandi-theme-completions' and
+'modus-vivendi-theme-completions' accept the following symbols:
+
++ nil (default)
++ moderate
++ opinionated
+
+Nil means that the overall presentation of the UI follows the patterns
+established by its own source code. For example, Ivy uses four distinct
+background and foreground combinations of accented colours to highlight
+the matching groups. A grey background is added to denote the implicit
+match between those groups. So we choose to respect this metaphor,
+while applying colours that conform with the accessibility goal of our
+project. Whereas Icomplete or Ido use subtle styles to present their
+results. Again, we remain faithful to their presentation.
+
+With 'moderate', we apply nuanced background and foreground combinations
+of accented colour values. This will slightly tone down Helm, Ivy,
+Sallet, Selectrum, while it will slightly adjust the looks of Icomplete
+and Ido.
+
+Whereas 'opinionated' has a more pronounced effect on the overall
+aesthetics of the UI. For the likes of Icomplete and Ido which are
+subtle by default, this option will use intense combinations of
+background and foreground colours. They are the diametric opposite of
+the nil value. Whereas Helm, Ivy, Sallet, Selectrum, will use even more
+subtle colours. Again, they are farther away than their default looks.
+
+These new options supersede the now-deprecated and more limited in scope
+variables of prior releases:
+
++ modus-operandi-theme-intense-standard-completions
++ modus-vivendi-theme-intense-standard-completions
+
+Thanks to the following people for their valuable feedback in issue 75:
+https://gitlab.com/protesilaos/modus-themes/-/issues/75
+
++ Anders Johansson
++ Manuel Uberti
++ Shreyas Ragavan
+
+2 Prompts
+---------
+
+The 'modus-operandi-theme-prompts' and modus-vivendi-theme-prompts' will
+change the overall looks of minibuffer and shell prompts ('M-x shell' as
+well as 'M-x eshell'). Their possible values are:
+
++ nil (default)
++ subtle
++ intense
+
+Nil will only use a coloured foreground for the prompts' text. Simple
+and effective.
+
+With 'subtle', the default foreground value is retained but is now
+complemented by an appropriately tinted background. The effect is more
+noticeable than the default, though not by much.
+
+While 'intense' applies a coloured background and foreground combination
+that should clearly stand out from the rest of the context.
+
+Thanks to Manuel Uberti for sharing feedback in issue 74:
+https://gitlab.com/protesilaos/modus-themes/-/issues/74
+
+3 Fringe visibility
+-------------------
+
+A new pair of symbols supersedes older variables:
+
++ modus-operandi-theme-visible-fringes ==> modus-operandi-theme-fringes
++ modus-vivendi-theme-visible-fringes ==> modus-vivendi-theme-fringes
+
+While the deprecated options were booleans, the current ones offer a
+choice between the following:
+
++ nil (default)
++ subtle
++ intense
+
+Nil means that the fringes have no distinct background of their own.
+They still exist per the settings of 'fringe-mode', but can only be
+discerned by tracking the negative space between the frame's or window's
+edge and the buffer's effective boundaries.
+
+The 'subtle' value will apply a greyscale background that is fairly
+close to the default main background (pure white/black). The fringes
+are now visible.
+
+As its name implies, 'intense' has a more pronounced effect than the
+other values. It also uses a greyscale background.
+
+Review of already supported faces and colours
+=============================================
+
+1 Magit blame styles
+--------------------
+
+The headers that Magit's blame interface produces were difficult to tell
+apart from their context. A set of carefully selected colours now makes
+sure that they are always distinct. Some subtle background values are
+used, in addition to other typographic elements.
+
+Thanks to Damien Cassou for reporting this problem and for providing
+valuable feedback that informed the final design. Refer to issue 71:
+https://gitlab.com/protesilaos/modus-themes/-/issues/71
+
+2 Paren match colours
+---------------------
+
+The face that highlights the matching delimiter when 'show-paren-mode'
+(or equivalent) is enabled uses two dedicated colours, whose names are:
+'bg-paren-match' and 'bg-paren-match-intense'. Those have been reviewed
+to make them more obvious in various contexts and to improve their
+overall consistency.
+
+A report with relative contrast ratios is available on my website:
+https://protesilaos.com/codelog/2020-08-09-modus-themes-paren-match/
+
+I benefited from valuable feedback from Shreyas Ragavan in issue 70:
+https://gitlab.com/protesilaos/modus-themes/-/issues/70
+
+3 Mu4e faces
+------------
+
+Some faces were tweaked to make it easier to distinguish replied,
+forwarded, and draft messages from other headers. The changes are
+fairly small in scope, but the effect should be that of an overall
+improvement.
+
+Thanks to Shreyas Ragavan for noticing these inconsistencies and for
+their continued participation in addressing them. See issue 69:
+https://gitlab.com/protesilaos/modus-themes/-/issues/69
+
+4 Notmuch message headings
+--------------------------
+
+A couple of inconsistencies with how notmuch would style email addresses
+and folded messages were addressed. The generic 'italic' face was also
+tweaked in the process, removing the foreground it would falsely define.
+
+Thanks to Damien Cassou for bringing these to my attention in issue 72:
+https://gitlab.com/protesilaos/modus-themes/-/issues/72
+
+5 hl-todo
+---------
+
+Let the special keywords of 'hl-todo-mode' use an optional slant, just
+like code comments do. This is to ensure that they feel part of their
+context.
+
+6 Magit general interface
+-------------------------
+
+Several faces were reviewed in the interest of colour harmony and to
+address potential inconsistencies or exaggerations. The most noticeable
+change pertains to the log views, as we now use fewer accent values,
+reducing whatever unnecessary "rainbow effect" may have existed.
+
+7 VC commit logs
+----------------
+
+The presentation of 'vc-print-log' and 'vc-print-root-log' has been
+reviewed to reduce the stark contrast between the colours it once used.
+While the elements remain distinct, the differences between them are
+more subtle, which is preferable when viewing long lists of
+similar-looking patterns.
+
+8 Powerline
+-----------
+
+The active and inactive minibuffers now use appropriate accented
+backgrounds or foregrounds for some of their elements. This makes them
+better for their intended function.
+
+Thanks to Shreyas Ragavan and tycho garen for their feedback in issue
+73, which was actually about adding support for Spaceline. It uses
+Powerline as its dependency, so we eventually had to accommodate both of
+them: https://gitlab.com/protesilaos/modus-themes/-/issues/73
+
+Shreyas also helped by adding a short note in the README which informs
+users of those two packages on how to tweak things when conducting tests
+or changing themes. See merge requests 9 and 10:
+
++ https://gitlab.com/protesilaos/modus-themes/-/merge_requests/9
++ https://gitlab.com/protesilaos/modus-themes/-/merge_requests/10
+
+9 Latex sectioning
+------------------
+
+The themes will no longer affect the height of the Latex sectioning
+faces. This is because there already exists a variable that scales them
+accordingly.
+
+Thanks to Anders Johansson for providing insights in issue 77:
+https://gitlab.com/protesilaos/modus-themes/-/issues/77
+
+10 Transient pop-up menu
+------------------------
+
+Extended support for its new colour-coded faces that follow in the
+footsteps of the 'hydra' package for visual semantics.
+
+11 Miscellaneous
+----------------
+
+The following faces were refined:
+
++ 'org-formula' inherits from 'fixed-pitch' to ensure that it does not
+ break table layouts when the user opts for a mixed-font setup (such as
+ with 'M-x variable-pitch-mode').
+
++ 'bongo-elapsed-track-part' uses a more appropriate accented
+ background.
+
++ 'symbol-overlay-default-face' is less intense than before. This is in
+ response to feedback I received from Manuel Uberti as an aside in
+ issue 75: https://gitlab.com/protesilaos/modus-themes/-/issues/75
+
++ 'rectangle-preview' uses a slightly accented background, which
+ distinguishes it from the highlighted region. This is to denote a
+ different state where the user is typing in some text.
+
++ 'diff-hl-change' now uses the more appropriate yellow colour instead
+ of blue. Yellow denotes "mixed changes" and, therefore, stands
+ between "removed" (red) and "added" (green). As it so happens, yellow
+ is a colour that derives by mixing red with green.
+
+New packages
+============
+
+The following are now explicitly supported by the themes:
+
++ org-table-sticky-header
++ pkgbuild-mode
++ semantic
++ spaceline
+
+More faces or face groups that are defined:
+
++ git-rebase (magit)
++ doom-modeline-debug-visual
++ file-name-shadow
++ the faces used by Emacs 27's 'display-line-numbers-major-tick' and
+ 'display-line-numbers-minor-tick'
++ table-cell
+
+Final notes
+===========
+
+There now exists an HTML version of the README, which will hopefully
+make things easier for users: https://protesilaos.com/emacs/modus-themes/
+
+Other changes are not user-facing. For example, using 'pcase' instead
+of 'cond' to make relevant expressions more succinct. Or defining a
+coloured underline in a more straightforward way. No need to document
+them at length.
+
+While this release introduces customisation options, it feels as though
+the themes are approaching a stable state. We know what works, we have
+a comprehensive colour palette that can meet our evolving needs, and we
+have already achieved broad package/face coverage. All while conforming
+with the overarching objective of this project for a minimum 7:1
+contrast ratio between background and foreground values in any given
+combination we specify.
+
+I wish to thank everyone who has helped me by testing things and sharing
+their thoughts. The people already mentioned herein:
+
+- Anders Johansson (https://gitlab.com/andersjohansson)
+- Damien Cassou (https://gitlab.com/DamienCassou)
+- Manuel Uberti (https://gitlab.com/muberti)
+- Shreyas Ragavan (https://gitlab.com/shrysr)
+- tycho garen (https://gitlab.com/tychoish)
+#+end_src
+
+* 0.11.0
+:PROPERTIES:
+:CUSTOM_ID: h:7a453154-3486-45a8-9249-9183ad49ff42
+:END:
+
+#+begin_src text
+Modus Operandi and Modus Vivendi version 0.11.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2020-07-31
+
+This entry records the changes since version 0.10.0 (2020-06-24). The
+present release covers close to 100 commits, some of which introduce
+far-reaching changes. It is not just the quantity that matters.
+Sometimes even a minor tweak requires lots of testing and forethought.
+This release represents another month of intense work and attention to
+detail.
+
+Palette review of "nuanced" colours
+===================================
+
+The themes contain a subset of palette variables that have a two-fold
+utility:
+
+1. Provide a subtle coloured background that can be combined with all
+ foreground colours that are intended for text/code highlighting.
+
+2. Produce variegated text in cases where complementary information
+ needs to be displayed alongside some more prominent construct
+ (e.g. Org table formulas).
+
+In early July 2020, these colours went through a comprehensive review to
+improve their intended use. The complete report is available on my
+website:
+<https://protesilaos.com/codelog/2020-07-08-modus-themes-nuanced-colours/>
+
+This formed the preparatory work that enabled several of the changes
+documented herein, most noticeable among which is the "Org blocks"
+customisation option.
+
+Customisation options
+=====================
+
+Org blocks
+----------
+
+1. The symbols 'modus-operandi-theme-distinct-org-blocks' and
+ 'modus-vivendi-theme-distinct-org-blocks' are DEPRECATED. They are
+ now REPLACED by the general-purpose 'modus-operandi-theme-org-blocks'
+ and 'modus-vivendi-theme-org-blocks' respectively.
+
+2. The aforementioned new symbols allow users to configure different
+ styles for Org blocks.
+
+ + Option 'greyscale' (which you must quote like this: 'greyscale)
+ will apply a subtle grey background to the contents of the block,
+ while it will extend its beginning and end lines to ensure that the
+ area is distinct from the rest of the buffer. This is the style
+ you would normally get with the old customisation options.
+
+ + Option 'rainbow' (again, must be quoted) will instead apply a
+ colour-coded subtle background in the main area of the block. The
+ exact colour depends on the programming language being used. You
+ would need to check the source code for how these are currently
+ mapped (search for "org-src-block-faces"). The basic idea is to
+ have different colours that make it easier for mixing the
+ input/output of multiple programming languages. Users who engage
+ in literate programming may find this particularly useful. Because
+ the block is already quite apparent, the beginning and end lines
+ are not extended to the edge of the window, to avoid exaggerations
+ that could create distractions.
+
+Variable pitch headings (proportionately-spaced headings)
+---------------------------------------------------------
+
+The symbols 'modus-operandi-theme-proportional-fonts' and
+'modus-vivendi-theme-proportional-fonts' are DEPRECATED. They are now
+REPLACED by the more appropriately-named
+'modus-operandi-theme-variable-pitch-headings' and
+'modus-vivendi-theme-variable-pitch-headings' respectively.
+
+The intended effect is exactly the same as before, namely, to let
+headings in Org and relevant modes use a proportionately-spaced font
+regardless of what the default is (typically a monospaced typeface).
+
+Remember that to configure the exact font family for the generic
+'variable-pitch' face, you can use something like this:
+
+ (set-face-attribute 'variable-pitch nil :family "FiraGO")
+
+Check the README for further details on setting and mixing fonts.
+
+Faint syntax for programming
+----------------------------
+
+Users can now enable 'modus-operandi-theme-faint-syntax' or
+'modus-vivendi-theme-faint-syntax'. The intended effect is to tone down
+all syntax highlighting in programming modes, while always respecting
+the overarching objective of these themes for a minimum contrast ratio
+of 7:1 (highest accessibility standard for colour contrast---WCAG AAA).
+
+The default is to use more saturated colours.
+
+Intense hl-line
+---------------
+
+Toggling on 'modus-operandi-theme-intense-hl-line' or
+'modus-vivendi-theme-intense-hl-line' will apply a more pronounced grey
+to the background of faces that highlight the current line. This
+affects tools such as the built-in 'hl-line-mode', which is in turn
+enabled automatically by lots of other packages, like 'elfeed' and
+'mu4e'.
+
+The default is to use a subtle grey.
+
+Intense paren-match
+-------------------
+
+Same principle as above. 'modus-operandi-theme-intense-paren-match' and
+'modus-vivendi-theme-intense-paren-match' will make the matching
+parentheses more intense than the default subtle warm background. This
+concerns modes such as that of the 'smartparens' package as well as the
+built-in 'show-paren-mode'.
+
+Refactored the use of bold
+==========================
+
+A major review of the themes now makes it possible to specify the exact
+weight of what a "bold" typeface is. This is only meaningful for cases
+where a font family has variants such as "semibold".
+
+Evaluate this, replacing "semibold" with the one your typeface supports:
+
+ (set-face-attribute 'bold nil :weight 'semibold)
+
+The default is to use a standard bold weight.
+
+Packages and face groups
+========================
+
+Refine already-supported faces
+------------------------------
+
++ The following packages now use more appropriate colour combinations:
+
+ - diary
+ - annotate
+ - transient (magit pop-up menu, though also used elsewhere)
+ - fountain
+ - calendar
+ - mu4e
+ - markdown-mode
+ - outline-minor-faces
+
++ Other changes:
+
+ - org-agenda has undergone a thoroughgoing review to improve the
+ semantics of colour for scheduled tasks, deadlines, modeline
+ filters, current date etc.
+
+ - org and outline-mode headings have been refined to look better with
+ the "rainbow headings" option that was introduced in an earlier
+ release (check the README).
+
+ - org-quote now works properly with the "Org blocks" option mentioned
+ above.
+
+ - org-checkbox-statistics uses the same foreground colour as org-todo,
+ for the sake of consistency.
+
+ - org-date now always inherits from 'fixed-pitch', to ensure proper
+ alignment of elements when a mixed fonts setup is used (tools for
+ achieving this effect are documented at length in the README). The
+ relevant patch was contributed by Matthew Stevenson.
+
+ - org-meta-line no longer looks like a comment, which helps denote its
+ special utility (e.g. when evaluating a table's formula).
+
+ - org-warning now uses a variant of red for its text, which works
+ better in the contexts this face is used (e.g. the agenda or the
+ export dispatcher).
+
+ - We now apply a slightly more accented colour combination for
+ 'secondary-selection', which is chiefly used by Org and Calendar in
+ various contexts.
+
+ - Gnus group level faces make more considerate use of colour to better
+ denote their significance.
+
+ - Cited text in message buffers has a better sequence of colours.
+
+ - Two new Helm faces are supported.
+
+ - Let 'keycast' use a different border colour when the "3D modeline"
+ option is enabled (refer to the README for that option).
+
+ - Extend 'hl-todo-keyword-faces' with the "bug" keyword.
+
+ - More intense colour for 'diff-hl-reverted-hunk-highlight'.
+
+ - Tone down the focused modeline's border colour.
+
+ - Define new bespoke faces that the themes use internally.
+
+ - Use more appropriate colours for 'header-line-highlight'.
+
+ - Apply greyscale line highlight for flycheck current line in the
+ diagnostics buffer, instead of the warmer colour combination it had
+ before.
+
+ - Tweak text colour difference between MU4E read and unread messages.
+
+Added support for new packages
+------------------------------
+
++ bongo
++ boon
++ dictionary
++ eshell-fringe-status
++ eshell-git-prompt
++ eshell-prompt-extras
++ highlight-tail
++ hl-defined
++ notmuch
++ tty-menu
+
+Miscellaneous
+=============
+
++ Expand the README with new documentation and clarify parts of the
+ existing one.
+
++ Update the Wiki page with screenshots and their descriptions (this in
+ itself is a day's worth of work):
+ https://gitlab.com/protesilaos/modus-themes/-/wikis/Screenshots
+
++ Make the source code of each theme work better with the built-in
+ 'outline-minor-mode'. Check my video if you need a demo on how I use
+ this in tandem with 'imenu':
+ https://protesilaos.com/codelog/2020-07-20-emacs-outline-imenu/
+
+Thanks to, in no particular order:
+
++ Shreyas Ragavan (https://gitlab.com/shrysr) for introducing me to the
+ idea that derived the "rainbow" Org blocks and for providing valuable
+ feedback in several issues.
+
++ Matthew Stevenson (https://gitlab.com/matth0204) for contributing the
+ aforementioned patch for the 'org-date' face.
+
++ Manuel Uberti (https://gitlab.com/muberti) for offering valuable
+ feedback in a number of issues (and special thanks for doing this for
+ several months now).
+
++ Dinko (https://gitlab.com/dinkonin) for noticing a not-so-obvious bug
+ in the initial implementation of the "rainbow Org blocks" option.
+
++ okamsn (https://gitlab.com/okamsn) for providing the necessary
+ feedback that allowed me to refactor the use of "bold", mentioned
+ above.
+
+Refer to the issue tracker (or commit log) for further details:
+https://gitlab.com/protesilaos/modus-themes/-/issues
+#+end_src
+
+* 0.10.0
+:PROPERTIES:
+:CUSTOM_ID: h:de114a53-7cbd-49aa-bf24-d1f1f0bf342e
+:END:
+
+#+begin_src text
+Modus Operandi and Modus Vivendi version 0.10.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2020-06-24
+
+This entry records the changes since version 0.9.0 (2020-06-03). The
+present release is focused on stability and internal improvements.
+
+Fixes and adjustments
+---------------------
+
+Basil L. Contovounesios, aka @basil-conto, (and also a contributor to
+core Emacs) sent several patches that do the following:
+
++ Fix top-level parentheses so that the results of
+ 'custom-theme-set-faces' and 'custom-theme-set-variables' are not
+ passed as arguments to the first 'custom-theme-set-faces'.
+
++ Fix the docstrings of the custom 'modus-theme-*' faces.
+
++ Simplify the syntax of properties assigned to each face.
+
++ Improve the way styles are inherited by Dired and Ibuffer.
+
+Basil also pointed out an inconsistency with regard to an unwanted
+underline effect for the 'doom-modeline-urgent' face in Modus Vivendi.
+It was promptly removed.
+
+From my part, I fixed issues 46 and 51 that concerned the way the
+compiler would evaluate each theme's palette. The palette is now
+defined as a constant. Further information:
+
+- https://gitlab.com/protesilaos/modus-themes/-/issues/46
+- https://gitlab.com/protesilaos/modus-themes/-/issues/51
+
+
+Improvements to existing faces
+------------------------------
+
+André Alexandre Gomes (@aadcg) provided valuable feedback and
+suggestions in issue 50 on the redesign of several 'org-mode' faces.
+
+The thread is long and contains lots of screenshots:
+https://gitlab.com/protesilaos/modus-themes/-/issues/50
+
+The changes in outline:
+
++ Org checkboxes have a subtle background which gives them a more
+ pronounced appearance while retaining their overall simplicity.
+
++ Org dates use a more saturated variant of cyan than they did before.
+ It helps distinguish them from their context. Especially true for
+ dates inside of tables.
+
++ Org agenda dates have also undergone a slight review to match the
+ above.
+
++ Org time grid now uses a more appropriate foreground colour, which has
+ been designed specifically for unfocused context.
+
++ Org todo keywords use a more semantically-correct variant of red,
+ rather than the purple one they had before.
+
++ Org statistics' cookies for pending tasks use a red variant as well
+ rather than the previous yellow one, in the interest of consistency
+ and to avoid exaggerations.
+
+
+Other internal refinements
+--------------------------
+
++ Subtle review of the Modus Vivendi palette. In short, it addresses:
+
+ - Imbalanced levels of luminance and inconsistent differences in hue
+ between them and their neighbouring colours (e.g. the greens between
+ them, and the greens next to the yellows in the context of syntax
+ highlighting). The result was that they would create an undesirable
+ emphatic 'pop out' effect when placed close to more moderate
+ colours.
+
+ - Differences in luminance and hue could lead to scenaria where two
+ colours could be conflated with each other or otherwise fail to
+ perform their intended function.
+
+ - The complete report is on my website:
+ https://protesilaos.com/codelog/2020-06-13-modus-vivendi-palette-review/
+
++ Major review of the 'diredfl' faces, in the interest of improved
+ readability and harmony between the various colours. This benefits
+ from the palette changes in Modus Vivendi, but also from a similar
+ review to Modus Operandi that was documented in version 0.9.0.
+
++ Refactor the names of dedicates colours for "marking" purposes. These
+ are used in Dired, Ibuffer, Proced, etc. Then apply them consistently
+ throughout each theme.
+
++ Make sure that 'stripes' uses the same colours as 'hl-line-mode'.
+
++ Let symlinks use a more appropriate colour in Dired and Trashed.
+
++ Refine the use of colour in 'magit-tag', 'eshell-prompt',
+ 'message-header-name', 'log-edit-header', 'change-log-function',
+ 'message-mml', 'message-header-name', 'message-separator'. These are
+ subtle (i.e. difficult) tweaks that improve the overall presentation
+ in context.
+
++ Make diff indicators not use an unnecessary background when the
+ user-facing option for "subtle diffs" is enabled (check the README for
+ the exact name of this option). This ensures consistency between the
+ indicators and the actual scope of the diffs.
+
++ Add support for the 'minibuffer-line' package and extend existing
+ support of the faces used in the built-in Emacs info pages.
+
+My thanks to Basil and André for their contributions!
+#+end_src
+
+* 0.9.0
+:PROPERTIES:
+:CUSTOM_ID: h:96ccc8b9-2d5e-4857-bf25-4e094e17bfed
+:END:
+
+#+begin_src text
+Modus Operandi and Modus Vivendi version 0.9.0
+
+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.
+
+New customisation options
+-------------------------
+
++ 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.
+
+Overview of changes
+-------------------
+
++ 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.
+
+Added support for
+-----------------
+
++ circe
++ el-search
++ eros
++ golden-ratio-scroll-screen
++ highlight-indentation
++ hyperlist
++ indium
++ journalctl-mode
++ minimap
++ nxml-mode
++ vdiff
++ yasnippet
+#+end_src
+
+* 0.8.0
+:PROPERTIES:
+:CUSTOM_ID: h:afa34aec-7079-4c45-8e16-ab4e7cc8cd6a
+:END:
+
+#+begin_src text
+Modus Operandi and Modus Vivendi version 0.8.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2020-04-28
+
+This entry records the changes since version 0.7.0 (2020-03-30). The
+present release contains a little more than a hundred commits, covering
+one month of intense work.
+
+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.
+
+All customisation options mentioned herein 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.
+
+
+Four new customisation options
+------------------------------
+
+The options in outline, with their detailed description below:
+
++ Rainbow headings
++ Section headings
++ 3D modeline
++ Subtle diffs
+
+1. "Rainbow headings" will apply more vivid colours to headings in
+ 'org-mode' and 'outline-mode'. The gradation is similar to that of a
+ rainbow's colour spectrum.
+
+ The default is to use colour values that are closer to the grey
+ scale.
+
+2. "Section headings" also apply to 'org-mode' and 'outline-mode'. They
+ will draw an overline over each heading and use a nuanced background
+ colour that is appropriate for each level. For Org, this option has
+ some additional effects, where it will render keywords and priority
+ cookies in a box and add to them a subtle background. This is to
+ make sure that everything feels consistent (to the extent possible).
+
+ The default is to not use overlines, backgrounds, boxes in any of the
+ relevant faces. This is consistent with the standard austere
+ colouration of headings: to not deviate too much from a "plain text"
+ aesthetic.
+
+NOTE: "rainbow headings" and "section headings" can work on their own or
+be combined together.
+
+3. "3D modeline" will use a faux unpressed button style for the current
+ window's modeline (like the standard looks of 'emacs -Q'). The
+ colours used for the active and inactive modelines are tweaked
+ accordingly to maximise the effect while retaining the visual
+ distinction between them.
+
+ The default is to draw the modelines in a two-dimensional style, with
+ the active one having a more noticeable border around it.
+
+4. "Subtle diffs" will use colour-coded text for line-wise differences
+ without applying any appropriately-coded background value or, where
+ necessary, by using only a subtle greyscale background. This affects
+ 'diff-mode', 'magit', 'ediff', and 'smerge-mode'. For Magit an extra
+ set of tweaks is implemented to account for the differentiation
+ between the focused and unfocused diff hunks.
+
+ Due to their unique requirements, word-wise or refined changes are
+ always drawn with a colour-coded background, though it is less
+ intense when this option is enabled.
+
+ The default is to use a colour-coded background and foreground
+ combination (e.g. light green text on a dark green backdrop) and to
+ make appropriate adjustments for refined diffs and modes of
+ interaction such as Magit's focused/unfocused diff states.
+
+
+Other major refinements
+-----------------------
+
++ Thoroughly revise the colours of 'ediff' and 'smerge-mode', so that
+ they are aligned with those of 'diff-mode' and 'magit'. This is in
+ addition to the "subtle diffs" options mentioned in the previous
+ section.
+
++ Review the faces used by Flycheck and Flymake. A wavy/curly underline
+ is now used in all terminals that support it. The underlined text is
+ drawn with a more nuanced foreground than before. The previous design
+ was exaggerating an already clear effect and could make things more
+ difficult under certain circumstances.
+
++ All language checkers, including the aforementioned linter front-ends,
+ now benefit from a new set of colours that are designed specifically
+ for this particular purpose. Makes the affected faces feel more
+ different than their context.
+
++ Use dedicated colours for escape sequences, regular expression
+ constructs, and quoted characters. The goal is to better
+ differentiate them from their surroundings.
+
++ Tweak the colours of 'hydra' to improve the distinction between its
+ various types of behaviour.
+
++ Reduce the overall luminance of the background colours used in the
+ fringes by the likes of 'flycheck', 'flymake', 'diff-hl', etc. They
+ should now not stand out more than they should, while retaining their
+ intended role.
+
++ Implement more saturated colours in Elfeed. The previous choices
+ could make it harder to differentiate the various parts of the
+ presentation.
+
++ Make better use of the customisation options for bold and slanted
+ constructs where that is allowed. If a face is not tied to the
+ semantics of these styles then it is drawn without them, unless the
+ user specifically opts for the relevant customisation options.
+
+
+Added support for packages (A-Z)
+--------------------------------
+
++ ag
++ color-rg
++ ctrlf
++ debbugs
++ eglot
++ forge
++ helpful
++ highlight-symbol
++ ibuffer
++ icomplete
++ iflipb
++ magit-imerge
++ man
++ orderless
++ page-break-lines
++ parrot
++ phi-grep
++ phi-search
++ pomidor
++ rcirc
++ spell-fu
++ switch-window
++ swoop
++ tab-bar-mode
++ tab-line-mode
++ trashed
++ tomatinho
++ tuareg
++ vimish-fold
++ visible-mark
++ vterm
++ wcheck-mode
++ winum
++ woman
+
+
+Miscellaneous changes and concluding remarks
+--------------------------------------------
+
++ Rewrote large parts of the README to make the customisation options
+ easier to discover and understand.
+
++ Updated the screen shots and their description in the relevant Wiki
+ page: https://gitlab.com/protesilaos/modus-themes/-/wikis/Screenshots
+#+end_src
+
+* 0.7.0
+:PROPERTIES:
+:CUSTOM_ID: h:353114b7-6980-4622-8057-b8cbb8361a8a
+:END:
+
+#+begin_src text
+Modus Operandi and Modus Vivendi version 0.7.0
+
+By Protesilaos Stavrou <info@protesilaos.com> on 2020-03-30
+
+This entry documents the changes since version 0.6.0 (2020-03-01). The
+present release is the largest to date containing 110 commits.
+
+All changes conform with the primary objective of this project, which is
+conformance with the WCAG AAA accessibility standard for colour
+contrast. This represents a minimum contrast ratio of 7:1 between a
+given combination of foreground and background colours.
+
+All customisation options mentioned herein are off ('nil') by default.
+The project's policy is to offer such features on an "opt-in" basis.
+Refer to the README or each theme's source code for the names of these
+user-facing symbols.
+
+Major refinements to existing face groups
+-----------------------------------------
+
++ The headline feature of this release is a refined set of colours for
+ visualising version-control-system differences ("diffs"). The new
+ colours are less intense than before and are designed to better convey
+ the meaning of the constructs they apply to. Affected face groups are
+ those of 'magit' and 'diff-mode'. A future release will assess how
+ similar packages, such as 'ediff', can benefit from this work.
+
++ The other major set of changes concerns the colours that apply to
+ fringes (see 'fringe-mode'). A new customisation option allows for a
+ distinct background for the fringes (courtesy of Anders Johansson in
+ commit 80fb704). The default uses the same colours as the main
+ buffer's background. Building on this effort, fringe indicators, such
+ as those of 'flycheck' now benefit from an entirely new set of
+ background+foreground colour combinations that are designed
+ specifically for the fringes.
+
++ A new customisation option allows users to render 'org-mode' source
+ blocks in a distinct background colour. The default is to use the
+ same background as the rest of the buffer. When this option is
+ enabled, the background colour for the beginning and end line of such
+ blocks is extended to the end of the window (using the ':extend t'
+ attribute for >= Emacs 27). Older Emacs versions already extend to
+ the end of the window.
+
++ The colour combination that shows the matching parentheses or
+ delimiters has been reviewed. The commit is fairly small and the
+ changes are immediately noticeable only to the most discerning of
+ eyes. Still, the considerations informing the review imposed a
+ rigorous method. Rather than summarise the findings, interested
+ readers are advised to refer to commit af3a327: it offers a
+ comprehensive analysis on the matter.
+
+Added support for packages (A-Z)
+--------------------------------
+
++ auctex/tex
++ bm
++ buffer-expose
++ centaur-tabs
++ cider (tentative, feedback is much appreciated)
++ csv-mode
++ dynamic-ruler
++ ebdb
++ elfeed-score
++ flyspell-correct
++ fold-this
++ freeze-it
++ frog-menu
++ git-walktree
++ helm-switch-shell
++ highlight-defined
++ highlight-escape-sequences (hes-mode)
++ highlight-numbers
++ highlight-thing
++ hl-todo
++ ioccur
++ julia
++ kaocha-runner
++ markup-faces (adoc-mode)
++ multiple-cursors
++ num3-mode
++ org-roam
++ org-superstar
++ org-treescope
++ outline-minor-mode
++ paradox
++ rainbow-identifiers
++ rg
++ ripgrep
++ sallet (tentative, feedback is much appreciated)
++ selectrum
++ sesman
++ side-notes
++ skewer-mode
++ stripes
++ symbol-overlay
++ syslog-mode
++ vc-annotate (C-x v g)
++ volatile-highlights
++ web-mode
++ yaml-mode
+
+Note about VC-annotate
+----------------------
+
+Quoting from the relevant note in the project's README:
+
+ Due to the unique way `vc-annotate' (`C-x v g') applies colours,
+ support for its background mode (`vc-annotate-background-mode') is
+ disabled at the theme level.
+
+ Normally, such a drastic measure should not belong in a theme:
+ assuming the user's preferences is bad practice. However, it has
+ been deemed necessary in the interest of preserving colour contrast
+ accessibility while still supporting a useful built-in tool.
+
+ If there actually is a way to avoid such a course of action, without
+ prejudice to the accessibility standard of this project, then please
+ report as much (or contribute as per the information in the
+ Contributing section).
+
+
+Overview of refinements to already supported packages
+-----------------------------------------------------
+
+In this section the notion of "dedicated colours" pertains to colour
+values that are reserved for special faces. They are never used for
+syntax highlighting or other common scenaria.
+
++ Define new background colours for fringe indicators (as noted in the
+ first section). Apply them to 'bm', 'diff-hl', 'git-gutter',
+ 'flycheck' fringe indicators. All such indicators are now made more
+ visible and work better with the new customisation option for
+ rendering the fringes in a distinct background.
+
++ Define dedicated colours for tab-like interfaces. Currently these
+ apply only to 'centaur-tabs'. The intention is to eventually
+ implement them to the tab modes that ship with Emacs 27, as well as
+ any other package that offers such functionality.
+
++ Define dedicated colours for actions that "mark" items. Use them in
+ 'dired', 'proced', 'gnus'. An accented background is combined with an
+ accented foreground. The intention is to make the underlying
+ construct distinct even under circumstances where the mark's
+ background changes, such as when it intersects with 'hl-line-mode' or
+ 'stripes': the accented foreground will still be recognisable as a
+ colour that differs from the main foreground. The use of a bold font
+ weight further reinforces the intended action.
+
++ Refine 'dired' faces to account for the new "mark" styles.
+ Directories are no longer rendered in a bold weight.
+
++ Tweak the colours used in the built-in 'diary' and 'calendar' for
+ better usability.
+
++ Tweak 'deadgrep' colours for consistency with packages that offer
+ similar functionality.
+
++ Tweak 'compilation-line-number' in the interest of consistency with
+ similar interfaces.
+
++ Use a more appropriate colour for 'trailing-whitespace'. It now is a
+ colour value that was designed specifically as a background.
+
++ Expand 'fountain-mode' support by covering its new heading faces. The
+ headings will be presented in larger font sizes, or using proportional
+ fonts, should the user enable the relevant theme customisation options
+ (see README or source code).
+
++ Remove bold weight from matching parentheses in 'show-paren-mode' and
+ 'smartparens'. The temporarily applied bold weight can cause
+ misalignments while using certain fonts. Also apply the new colours
+ for matching delimiters, as documented in the first section.
+
++ Refine 'outline-mode' colours to be consistent with those of Org's
+ headings.
+
++ Several usability and colour refinements for 'helm' and related
+ packages in that milieu.
+
++ Remove box property from emphasis markers in the mode line. It
+ created inconsistencies with other faces.
+
++ Refine the colours used in Magit logs, `change-log', `log-view'. They
+ are meant to be more distinct from their context, without drawing too
+ much attention to themselves.
+
++ Minor internal fixes for indentation and the like.
+
+Miscellaneous changes and concluding remarks
+--------------------------------------------
+
++ Add section in the README which documents a legal requirement for all
+ potential non-trivial code contributions: the need to assign copyright
+ to the Free Software Foundation. The Modus Themes are now distributed
+ via the official GNU ELPA repository and copyright over them is
+ assigned to the FSF.
+
++ Add CHANGELOG file which consolidates all tagged release notes such as
+ this one.
+
++ Add new screen shots to the relevant Wiki page, together with detailed
+ descriptions on what is being demonstrated:
+ https://gitlab.com/protesilaos/modus-themes/-/wikis/Screenshots
+
+Special thanks to Manuel Uberti for reporting several issues and
+offering feedback where appropriate. I was able to add support for lots
+of new packages. While a few among the already supported face groups
+underwent tweaks and refinements. The 'helm' ecosystem benefited the
+most.
+
+Thanks to Anders Johansson for the patch that introduced the
+fringes-related customisation option. It inspired me to reconsider the
+use of this particular area of the interface, which eventually led to
+the barrage of commits that refashioned the fringe indicators. A major
+win overall.
+
+Thanks to Jonathan Otsuka for fixing an error of mine on the naming of
+some symbols. My apologies for missing it: I will be more careful from
+now on.
+
+Note: both patches were small, requiring no copyright assignment.
+Larger contributions are always welcome, though make sure you read the
+section in the README with regard to assigning copyright to the Free
+Software Foundation.
+#+end_src
+
+* 0.6.0
+:PROPERTIES:
+:CUSTOM_ID: h:c8c33ff2-6f75-4642-a27e-ee6e8abc493e
+:END:
+
+#+begin_src text
+This release contains lots of refinements and additions.
+
+Let me start with an administrative point: I have completed the process
+of assigning my copy rights to the Free Software Foundation. This
+covers every contribution I make to GNU Emacs. In practice, it means
+that the Modus themes can now be included in the official ELPA archive
+and theoretically be shipped with Emacs itself. The ELPA inclusion is
+ongoing. Once it is completed, I will update the docs accordingly.
+
+The administrative change has no effect on the way this project is
+handled. I still am the developer/maintainer and will continue to
+improve things further. If you still have questions, feel free to
+contact me: https://protesilaos.com/contact
+
+Moving on to the changes since version 0.5.0 (2020-01-26).
+
+Added support for:
+
++ alert
++ apropos (built-in)
++ dap-mode
++ deft
++ dim-autoload
++ dired-git
++ enhanced-ruby-mode
++ gbd-mi.el (built-in library)
++ helm-ls-git
++ helm-xref
++ imenu-list
++ jira (org-jira)
++ js2-mode
++ jupyter
++ org-pomodoro
++ origami
++ rmail (built-in)
++ vc-print-log (built-in)
++ window-divider-mode (built-in)
++ xref (built-in)
+
+Refinements to existing faces:
+
++ A new subset of "nuanced" accent colours has been introduced. These
+are named {red,green,yellow,blue,magenta,cyan}-nuanced. Their purpose
+is to be used in contexts where lots of structured information is
+presented to the user, but each component does not need to draw too much
+attention to itself (e.g. Org's metadata). As always, their contrast
+ratio is designed to always be >= 7:1 relative to the backgrounds they
+may be combined with.
+
++ Greatly improve the support for Gnus, even though most changes are
+subtle and are made in the interest of consistency. The group levels
+now make use of the "nuanced" palette where appropriate (to denote
+levels of lower importance).
+
++ Several refinements for Org, including the use of "nuanced" colours
+for various metadata tags. The agenda headers will now be scaled
+appropriately and use a variable-pitch font if the user sets the
+relevant customisation values of the theme they are using (check the
+documentation in each theme file or the repo's README).
+
++ Lots of refinements for Helm. Some of these were introduced to align
+the overall aesthetic with equivalent metaphors in Ivy. Others are
+meant to improve the styles of the headers and make various constructs
+consistent with their variants in the Helm ecosystem but also with their
+non-Helm counterparts (such as xref file names with and without Helm,
+but also with Helm's grep).
+
++ Improve the colours of buttons in contexts such as M-x customize.
+This is especially noticeable in modus-vivendi-theme (the dark theme)
+where the buttons are a darker shade of grey rather than the original
+lighter one.
+
++ Keycast now uses styles that are more consistent with the overall
+aesthetic of the Modus themes. This means that the mode line indicators
+are blue-ish (blue is generally used for highlights in the mode line,
+but also when hovering over an item with the mouse pointer). The pseudo
+button effect (colours + 3d) has been removed in favour of a flat look,
+in line with the flatness of the mode line itself. Whereas before the
+keycast faces where designed to be consistent with the package's
+defaults.
+
+There were also a few minor refinements for:
+
++ calendar and diary
++ icomplete
++ mm-uu-extract
++ nobreak-hyphen and nobreak-space
++ org-habit
++ tooltip-mode
+
+Finally, the Commentary section of each theme has been greatly expanded.
+It now includes the user-facing customisation options and the complete
+list of supported packages.
+#+end_src
+
+* 0.5.0
+:PROPERTIES:
+:CUSTOM_ID: h:dffc2bd4-6597-4be4-88f6-b349be7ebc6e
+:END:
+
+#+begin_src text
+This release contains support for several new packages and lots of
+refinements for existing ones. A lot of work went into making the
+themes more robust by reviewing the inheritance of styles from one
+face group to another (in general, the ':inherit' property should not
+be used frivolously). Several subtle changes were made to the colour
+palette of both themes to ensure consistency, enable more possible
+combinations, and avoid potential ambiguity under certain potential
+circumstances.
+
+Overall, this release gives me confidence that the themes have reached
+a fairly stable state. What follows is an overview of the changes
+since version 0.4.0 (2020-01-02).
+
+Added support for:
+
++ equake
++ flymake
++ focus
++ fountain (fountain-mode)
++ git-lens
++ git-timemachine
++ hi-fill-column
++ highlight-blocks
++ info-colors
++ lsp-mode
++ lsp-ui
++ proced (built-in)
++ regexp-builder (built-in)
++ suggest
+
+Refinements:
+
++ The header line uses its own dedicated colours. Several changes
+ were made in 'eww', 'info', 'elfeed', 'magit', 'flycheck' to make
+ sure that any accent value that appears there conforms with the
+ overarching accessibility objective of the Modus themes (contrast
+ ratio of >= 7:1, else WCAG AAA).
++ 'ivy' no longer uses a box style for the current line, as that was
+ not always reliable. Appropriate colours are used instead.
++ 'org-mode' blocks use a foreground value that distinguishes their
+ opening and closing tags from source code comments.
++ The 'org-ellipsis' face was configured to always inherit the looks
+ of its respective heading or element, rather than have its own
+ excessive styling.
++ 'paren-match' has colours that are designed specifically for it.
+ This is done to retain their utility while making sure they are not
+ mistaken for some other type of feedback.
++ 'magit' has explicit styles for the mode line process indicators,
+ instead of inheriting from another face. The intention is to use
+ foreground values that are designed specifically for use on the mode
+ line (the minimum contrast ratio requirement).
++ 'erc' faces have been thoroughly reviewed in the interest of better
+ usability. Its mode line indicators now use appropriate colours.
++ The faces of the 'messages' library have been thoroughly reviewed.
+ This affects various email interfaces, but also 'elfeed' entry
+ metadata headings.
++ 'whitespace-mode' no longer has a newline character that stands out.
+ That kind of emphasis was not necessary, given that the symbol used
+ is a dollar sign, which is already far more visible than a mid dot.
++ 'font-lock' (generic syntax highlighting) has better colour
+ combinations for regexp grouping constructs.
++ 'rainbow-delimiters' was given its missing base error face.
++ 'git-commit' comment action uses a slightly different foreground
+ value than before to better match its context.
++ 'isearch' and 'query-replace' use colours that properly denote each
+ action's utility.
++ 'visual-regexp' has been reviewed to make the matching groups more
+ distinct from each other.
++ 'occur' and any other buffer that relies on the 'match' face can now
+ benefit from the new colour combinations, in that its results cannot
+ be confused for the active 'isearch' or 'query-replace' or even
+ their lazily highlighted results (or, indeed, of any other search
+ tool).
++ 'company' uses faces for its search feedback that are consistent
+ with other search metaphors.
++ Emacs 27's new ':extend' property is only implemented where
+ necessary (note that the latest release is version 26.3).
+#+end_src
+
+* 0.4.0
+:PROPERTIES:
+:CUSTOM_ID: h:1597e301-f9df-4aac-8ec5-b8ecf34f2930
+:END:
+
+#+begin_src text
+This is an overview of the changes since version 0.3.0 (2019-12-25).
+
+Add support for:
+
+ + ert
+ + flycheck-indicator
+ + mentor
+ + mu4e-conversation
+ + powerline-evil
+ + telephone-line
+ + vc (built-in version control)
+
+Refinements to already-supported packages:
+
+ + company-mode (several refinements)
+ + doom-modeline (major review)
+ + helm (several tweaks)
+ + hl-line-mode (use unique background)
+ + ivy (improve matching line)
+ + line-number-mode (minor tweaks)
+ + markdown-mode (comprehensive expansion)
+ + mode-line (more appropriate styles for the highlight)
+ + powerline (minor tweaks)
+ + region (use unique background)
+ + swiper (improve matching line in main window)
+ + whitespace-mode (several refinements)
+ + mu4e (tweak mu4e-modeline-face for consistency)
+
+Miscellaneous:
+
+ + Fix actual and potential problems with cursor faces that would
+ distort the use of appropriate background and foreground colours.
+ The documentation stipulates that the `cursor' face cannot be
+ inherited by other faces, due to its peculiar nature of only
+ recognising the background colour.
+ + Add support for more bold constructs in code. As with all such
+ options, it is disabled by default, expecting the user to
+ explicitly opt in.
+ + Declare additional custom faces. Only meant for internal use.
+ + Subtle refinements to "active" colour values in both Modus
+ Operandi and Modus Vivendi. These mostly concern the mode line
+ (with a few special exceptions), where emphasis has been placed on
+ the need to provide greater contrast between accent values that
+ can be used there.
+ + Minor documentation refinements.
+#+end_src
+
+* 0.3.0
+:PROPERTIES:
+:CUSTOM_ID: h:cb0ca8dc-3960-4490-b3c4-27d10cf6ed44
+:END:
+
+#+begin_src text
+Overview of changes since 0.2.0 (2019-12-18):
+
++ Add support for the following packages:
+
+ + apt-sources-list
+ + calfw
+ + counsel-css
+ + counsel-notmuch
+ + counsel-org-capture-string
+ + cov
+ + disk-usage
+ + evil-visual-mark-mode
+ + geiser
+ + keycast
+ + org-journal
+ + org-noter
+ + paren-face
+ + powerline
+ + vc
+ + xah-elisp-mode
+
++ Explicitly style the following packages (these were already covered,
+ in terms of the colours they used, but are now targeted directly):
+
+ + calendar
+ + counsel
+ + cursor
+ + package (M-x list-packages)
+
++ Minor tweaks to face groups:
+
+ + dired
+ + compile
+
++ Fixes and refinements:
+
+ + Documentation strings will now inherit the option for slanted
+ constructs (off by default -- see the README about all the user
+ options).
+ + Comment delimiters have the same styles as the body of the comment
+ to avoid inconsistencies when the option for slanted constructs is
+ enabled.
+ + The line number that is displayed in the compile log is now
+ correctly styled.
+ + Removed duplicate entries for ivy-remote and added ivy-separator.
+ + Ensure that the minibuffer prompt is always above the minimum
+ contrast ratio of 7:1, by using a more appropriate shade of cyan.
+ + Properly reference a couple of variables in Modus Vivendi.
+
++ Internal adjustments:
+
+ + Decouple the core dired faces from those of external packages.
+ + Same for org and org-recur.
+
++ Minor documentation updates.
+#+end_src
+
+* 0.2.0
+:PROPERTIES:
+:CUSTOM_ID: h:c9746d04-adf4-41b1-9b7c-6caaf17f8816
+:END:
+
+#+begin_src text
+Overview of changes since 0.1.0 (2019-12-09):
+
++ Comprehensive review of `org-mode' faces. The use of colour should
+now be more consistent with the semantics of each element. These should
+also respond better to a variety of combinations, such as when the user
+has `hl-line-mode' enabled. The agenda view is the greatest beneficiary
+of this review.
+
++ Make `mu4e' mode line faces consistent with other elements that may be
+placed on the mode line.
+
++ Make `gnus' header name/subject more distinct.
+
++ Several minor refinements to `ivy' and its extensions.
+
++ General usability refinements to `ace-window'.
+
++ Minor review of `elfeed' styles, in the interest of improving the
+contrast between the elements.
+
++ Add support for:
+ + `persp-mode' (fork of the already supported `perspective')
+ + `dashboard'
+ + `evil-mode'
+ + `evil-goggles'
+ + `ruler-mode'
+#+end_src
+
+* 0.1.0
+:PROPERTIES:
+:CUSTOM_ID: h:e14e612e-6951-4812-bc88-62c498bd5644
+:END:
+
+#+begin_src text
+First stable release of Modus Operandi and Modus Vivendi.
+#+end_src
diff --git a/elpa/modus-themes-4.3.0/README-elpa b/elpa/modus-themes-4.3.0/README-elpa
@@ -0,0 +1,33 @@
+# Modus themes for GNU Emacs
+
+IMAGES HERE: <https://protesilaos.com/emacs/modus-themes-pictures>.
+
+Highly accessible themes, conforming with the highest standard for
+colour contrast between background and foreground values (WCAG AAA).
+They also are optimised for users with red-green colour deficiency.
+
+The themes are very customisable and provide support for a very wide
+range of packages. Their manual is detailed so that new users can get
+started, while it also provides custom code for all sorts of more
+advanced customisations.
+
+Since August 2020, the original Modus themes (`modus-operandi`,
+`modus-vivendi`) are built into Emacs version 28 or higher. Emacs 28
+ships with `modus-themes` version `1.6.0`. Emacs 29 includes version
+`3.0.0`. Emacs 30 provides a newer, refactored version that
+thoroughly refashions how the themes are implemented and customized.
+Such major versions are not backward-compatible due to the limited
+resources at my disposal to support multiple versions of Emacs and of
+the themes across the years.
+
++ Package name (GNU ELPA): `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>
++ 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>
++ Backronym: My Old Display Unexpectedly Sharpened ... themes
diff --git a/elpa/modus-themes-4.3.0/README.md b/elpa/modus-themes-4.3.0/README.md
@@ -0,0 +1,33 @@
+# Modus themes for GNU Emacs
+
+IMAGES HERE: <https://protesilaos.com/emacs/modus-themes-pictures>.
+
+Highly accessible themes, conforming with the highest standard for
+colour contrast between background and foreground values (WCAG AAA).
+They also are optimised for users with red-green colour deficiency.
+
+The themes are very customisable and provide support for a very wide
+range of packages. Their manual is detailed so that new users can get
+started, while it also provides custom code for all sorts of more
+advanced customisations.
+
+Since August 2020, the original Modus themes (`modus-operandi`,
+`modus-vivendi`) are built into Emacs version 28 or higher. Emacs 28
+ships with `modus-themes` version `1.6.0`. Emacs 29 includes version
+`3.0.0`. Emacs 30 provides a newer, refactored version that
+thoroughly refashions how the themes are implemented and customized.
+Such major versions are not backward-compatible due to the limited
+resources at my disposal to support multiple versions of Emacs and of
+the themes across the years.
+
++ Package name (GNU ELPA): `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>
++ 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>
++ Backronym: My Old Display Unexpectedly Sharpened ... themes
diff --git a/elpa/modus-themes-4.3.0/dir b/elpa/modus-themes-4.3.0/dir
@@ -0,0 +1,19 @@
+This is the file .../info/dir, which contains the
+topmost node of the Info hierarchy, called (dir)Top.
+The first time you invoke Info you start off looking at this node.
+
+File: dir, Node: Top This is the top of the INFO tree
+
+ This (the Directory node) gives a menu of major topics.
+ Typing "q" exits, "H" lists all Info commands, "d" returns here,
+ "h" gives a primer for first-timers,
+ "mEmacs<Return>" visits the Emacs manual, etc.
+
+ In Emacs, you can click mouse button 2 on a menu item or cross reference
+ to select it.
+
+* Menu:
+
+Emacs misc features
+* Modus Themes: (modus-themes). Elegant, highly legible and customizable
+ themes.
diff --git a/elpa/modus-themes-4.3.0/doc/doclicense.texi b/elpa/modus-themes-4.3.0/doc/doclicense.texi
@@ -0,0 +1,505 @@
+@c The GNU Free Documentation License.
+@center Version 1.3, 3 November 2008
+
+@c This file is intended to be included within another document,
+@c hence no sectioning command or @node.
+
+@display
+Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+@uref{https://fsf.org/}
+
+Everyone is permitted to copy and distribute verbatim copies
+of this license document, but changing it is not allowed.
+@end display
+
+@enumerate 0
+@item
+PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document @dfn{free} in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of ``copyleft'', which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+@item
+APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The ``Document'', below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as ``you''. You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A ``Modified Version'' of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A ``Secondary Section'' is a named appendix or a front-matter section
+of the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The ``Invariant Sections'' are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The ``Cover Texts'' are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A ``Transparent'' copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not ``Transparent'' is called ``Opaque''.
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, La@TeX{} input
+format, SGML or XML using a publicly available
+DTD, and standard-conforming simple HTML,
+PostScript or PDF designed for human modification. Examples
+of transparent image formats include PNG, XCF and
+JPG@. Opaque formats include proprietary formats that can be
+read and edited only by proprietary word processors, SGML or
+XML for which the DTD and/or processing tools are
+not generally available, and the machine-generated HTML,
+PostScript or PDF produced by some word processors for
+output purposes only.
+
+The ``Title Page'' means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, ``Title Page'' means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The ``publisher'' means any person or entity that distributes copies
+of the Document to the public.
+
+A section ``Entitled XYZ'' means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as ``Acknowledgements'',
+``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title''
+of such a section when you modify the Document means that it remains a
+section ``Entitled XYZ'' according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+@item
+VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no other
+conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+@item
+COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to give
+them a chance to provide you with an updated version of the Document.
+
+@item
+MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+@enumerate A
+@item
+Use in the Title Page (and on the covers, if any) a title distinct
+from that of the Document, and from those of previous versions
+(which should, if there were any, be listed in the History section
+of the Document). You may use the same title as a previous version
+if the original publisher of that version gives permission.
+
+@item
+List on the Title Page, as authors, one or more persons or entities
+responsible for authorship of the modifications in the Modified
+Version, together with at least five of the principal authors of the
+Document (all of its principal authors, if it has fewer than five),
+unless they release you from this requirement.
+
+@item
+State on the Title page the name of the publisher of the
+Modified Version, as the publisher.
+
+@item
+Preserve all the copyright notices of the Document.
+
+@item
+Add an appropriate copyright notice for your modifications
+adjacent to the other copyright notices.
+
+@item
+Include, immediately after the copyright notices, a license notice
+giving the public permission to use the Modified Version under the
+terms of this License, in the form shown in the Addendum below.
+
+@item
+Preserve in that license notice the full lists of Invariant Sections
+and required Cover Texts given in the Document's license notice.
+
+@item
+Include an unaltered copy of this License.
+
+@item
+Preserve the section Entitled ``History'', Preserve its Title, and add
+to it an item stating at least the title, year, new authors, and
+publisher of the Modified Version as given on the Title Page. If
+there is no section Entitled ``History'' in the Document, create one
+stating the title, year, authors, and publisher of the Document as
+given on its Title Page, then add an item describing the Modified
+Version as stated in the previous sentence.
+
+@item
+Preserve the network location, if any, given in the Document for
+public access to a Transparent copy of the Document, and likewise
+the network locations given in the Document for previous versions
+it was based on. These may be placed in the ``History'' section.
+You may omit a network location for a work that was published at
+least four years before the Document itself, or if the original
+publisher of the version it refers to gives permission.
+
+@item
+For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve
+the Title of the section, and preserve in the section all the
+substance and tone of each of the contributor acknowledgements and/or
+dedications given therein.
+
+@item
+Preserve all the Invariant Sections of the Document,
+unaltered in their text and in their titles. Section numbers
+or the equivalent are not considered part of the section titles.
+
+@item
+Delete any section Entitled ``Endorsements''. Such a section
+may not be included in the Modified Version.
+
+@item
+Do not retitle any existing section to be Entitled ``Endorsements'' or
+to conflict in title with any Invariant Section.
+
+@item
+Preserve any Warranty Disclaimers.
+@end enumerate
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled ``Endorsements'', provided it contains
+nothing but endorsements of your Modified Version by various
+parties---for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+@item
+COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled ``History''
+in the various original documents, forming one section Entitled
+``History''; likewise combine any sections Entitled ``Acknowledgements'',
+and any sections Entitled ``Dedications''. You must delete all
+sections Entitled ``Endorsements.''
+
+@item
+COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other documents
+released under this License, and replace the individual copies of this
+License in the various documents with a single copy that is included in
+the collection, provided that you follow the rules of this License for
+verbatim copying of each of the documents in all other respects.
+
+You may extract a single document from such a collection, and distribute
+it individually under this License, provided you insert a copy of this
+License into the extracted document, and follow this License in all
+other respects regarding verbatim copying of that document.
+
+@item
+AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an ``aggregate'' if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+@item
+TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled ``Acknowledgements'',
+``Dedications'', or ``History'', the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+@item
+TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+@item
+FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions
+of the GNU Free Documentation License from time to time. Such new
+versions will be similar in spirit to the present version, but may
+differ in detail to address new problems or concerns. See
+@uref{https://www.gnu.org/licenses/}.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License ``or any later version'' applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+@item
+RELICENSING
+
+``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the
+site means any set of copyrightable works thus published on the MMC
+site.
+
+``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+``Incorporate'' means to publish or republish a Document, in whole or
+in part, as part of another Document.
+
+An MMC is ``eligible for relicensing'' if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole
+or in part into the MMC, (1) had no cover texts or invariant sections,
+and (2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+@end enumerate
+
+@page
+@heading ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+@smallexample
+@group
+ Copyright (C) @var{year} @var{your name}.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+@end group
+@end smallexample
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the ``with@dots{}Texts.''@: line with this:
+
+@smallexample
+@group
+ with the Invariant Sections being @var{list their titles}, with
+ the Front-Cover Texts being @var{list}, and with the Back-Cover Texts
+ being @var{list}.
+@end group
+@end smallexample
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+
+@c Local Variables:
+@c ispell-local-pdict: "ispell-dict"
+@c End:
diff --git a/elpa/modus-themes-4.3.0/doc/modus-themes.info b/elpa/modus-themes-4.3.0/doc/modus-themes.info
@@ -0,0 +1,6278 @@
+This is modus-themes.info, produced by makeinfo version 7.0.3 from
+modus-themes.texi.
+
+Copyright (C) 2020-2023 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover Texts
+ being “A GNU Manual,” and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ “GNU Free Documentation License.”
+
+ (a) The FSF’s Back-Cover Text is: “You have the freedom to copy and
+ modify this GNU manual.”
+
+INFO-DIR-SECTION Emacs misc features
+START-INFO-DIR-ENTRY
+* Modus Themes: (modus-themes). Elegant, highly legible and customizable themes.
+END-INFO-DIR-ENTRY
+
+
+File: modus-themes.info, Node: Top, Next: Overview, Up: (dir)
+
+Modus themes for GNU Emacs
+**************************
+
+Copyright (C) 2020-2023 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover Texts
+ being “A GNU Manual,” and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ “GNU Free Documentation License.”
+
+ (a) The FSF’s Back-Cover Text is: “You have the freedom to copy and
+ modify this GNU manual.”
+
+ This manual, written by Protesilaos Stavrou, describes the
+customization options for the Modus themes, and provides every other
+piece of information pertinent to them.
+
+ The documentation furnished herein corresponds to stable version
+4.3.0, released on 2023-09-19. 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 4.4.0-dev.
+
+ • Package name (GNU ELPA): ‘modus-themes’
+ • Official manual: <https://protesilaos.com/emacs/modus-themes>
+ • Change log: <https://protesilaos.com/emacs/modus-themes-changelog>
+ • Color palette: <https://protesilaos.com/emacs/modus-themes-colors>
+ • Sample pictures:
+ <https://protesilaos.com/emacs/modus-themes-pictures>
+ • 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>
+ • Backronym: My Old Display Unexpectedly Sharpened ... themes
+
+* Menu:
+
+* Overview::
+* Installation::
+* Enable and load::
+* Customization options::
+* Advanced customization::
+* Face coverage::
+* Notes on individual packages::
+* Frequently Asked Questions::
+* Contributing::
+* Acknowledgements::
+* GNU Free Documentation License::
+* Indices::
+
+— The Detailed Node Listing —
+
+Overview
+
+* How do the themes look like::
+* Learn about the latest changes::
+
+Installation
+
+* Install manually from source::
+* Install from the archives::
+* Install on GNU/Linux::
+* Dealing with byte compilation errors::
+
+Install on GNU/Linux
+
+* Debian 11 Bullseye::
+* GNU Guix::
+
+Enable and load
+
+* The require-theme for built-in Emacs themes::
+* Sample configuration with and without use-package::
+* Differences between loading and enabling::
+
+Customization options
+
+* Custom reload theme:: Toggle auto-reload of the theme when setting custom variables
+* Disable other themes:: Determine whether loading a Modus themes disables all others
+* Bold constructs:: Toggle bold constructs in code
+* Italic constructs:: Toggle italic font constructs in code
+* Mixed fonts:: Toggle mixing of font families
+* Command prompts:: Control the style of command prompts
+* Completion UIs:: Choose among several styles for completion UIs
+* Org mode blocks:: Choose among plain, gray, or tinted backgrounds
+* Heading styles:: Choose among several styles, also per heading level
+* UI typeface:: Toggle the use of variable-pitch across the User Interface
+* Palette overrides:: Refashion color values and/or semantic color mappings
+
+Advanced customization
+
+* Palette override presets::
+* Stylistic variants using palette overrides::
+* More accurate colors in terminal emulators::
+* Range of color with terminal emulators::
+* Preview theme colors::
+* Per-theme customization settings::
+* Get a single color from the palette::
+* Use theme colors in code with modus-themes-with-colors::
+* Do not extend the region background::
+* Add padding to mode line::
+* Remap face with local value::
+* Font configurations for Org and others::
+* Configure bold and italic faces::
+* Custom Org todo keyword and priority faces::
+* Custom Org emphasis faces::
+* Update Org block delimiter fontification::
+* Measure color contrast::
+* Load theme depending on time of day::
+* Backdrop for pdf-tools::
+* Toggle themes without reloading them::
+* A theme-agnostic hook for theme loading::
+* Use more spacious margins or padding in Emacs frames::
+* Custom hl-todo colors::
+* Add support for solaire-mode::
+
+Stylistic variants using palette overrides
+
+* Make the mode line borderless::
+* Make the active mode line colorful::
+* Make the tab bar more or less colorful::
+* Make the fringe invisible or another color::
+* Make links use subtle or no underlines::
+* Make prompts more or less colorful::
+* Make completion matches more or less colorful::
+* Make comments yellow and strings green::
+* Make code syntax use the old alt-syntax style::
+* Make use of alternative styles for code syntax::
+* Make matching parenthesis more or less intense::
+* Make box buttons more or less gray::
+* Make TODO and DONE more or less intense::
+* Make headings more or less colorful::
+* Make Org agenda more or less colorful::
+* Make inline code in prose use alternative styles::
+* Make mail citations and headers more or less colorful::
+* Make the region preserve text colors, plus other styles: Make the region preserve text colors plus other styles.
+* Make mouse highlights more or less colorful::
+* Make language underlines less colorful::
+* Make line numbers use alternative styles::
+* Make diffs use only a foreground::
+* Make deuteranopia diffs red and blue instead of yellow and blue::
+* Make the themes look like what the maintainer uses::
+
+Face coverage
+
+* Supported packages:: Full list of covered face groups
+* Indirectly covered packages::
+
+Notes on individual packages
+
+* Note on calendar.el weekday and weekend colors: Note on calendarel weekday and weekend colors.
+* Note on git-gutter in Doom Emacs::
+* Note on php-mode multiline comments::
+* Note on underlines in compilation buffers::
+* Note on inline Latex in Org buffers::
+* Note on dimmer.el: Note on dimmerel.
+* Note on display-fill-column-indicator-mode::
+* Note on highlight-parentheses.el: Note on highlight-parenthesesel.
+* Note on mmm-mode.el background colors: Note on mmm-modeel background colors.
+* Note for prism::
+* Note on company-mode overlay pop-up::
+* Note on ERC escaped color sequences::
+* Note on powerline or spaceline::
+* Note on SHR colors::
+* Note on SHR fonts::
+* Note on Ement colors and fonts::
+* Note on pdf-tools link hints::
+* Note on the Notmuch logo::
+* Note on goto-address-mode faces::
+
+Frequently Asked Questions
+
+* Is the contrast ratio about adjacent colors?::
+* What does it mean to avoid exaggerations?::
+* Why are colors mostly variants of blue, magenta, cyan?: Why are colors mostly variants of blue magenta cyan?.
+* What is the best setup for legibility?::
+* Are these color schemes?::
+* Port the Modus themes to other platforms?::
+
+Contributing
+
+* Sources of the themes::
+* Issues you can help with::
+* Patches require copyright assignment to the FSF::
+
+Indices
+
+* Function index::
+* Variable index::
+* Concept index::
+
+
+
+File: modus-themes.info, Node: Overview, Next: Installation, Prev: Top, Up: Top
+
+1 Overview
+**********
+
+The Modus themes are designed for accessible readability. They conform
+with the highest standard for color contrast between combinations of
+background and foreground values. For small sized text, this
+corresponds to the WCAG AAA standard, which specifies a minimum rate of
+distance in relative luminance of 7:1.
+
+ The Modus themes consist of eight themes, divided into four
+subgroups.
+
+Main themes
+ ‘modus-operandi’ is the project’s main light theme, while
+ ‘modus-vivendi’ is its dark counterpart. These two themes are part
+ of the project since its inception. They are designed to cover a
+ broad range of needs and are, in the opinion of the author, the
+ reference for what a highly legible “default” theme should look
+ like.
+
+Tinted themes
+ ‘modus-operandi-tinted’ and ‘modus-vivendi-tinted’ are variants of
+ the two main themes. They slightly tone down the intensity of the
+ background and provide a bit more color variety.
+ ‘modus-operandi-tinted’ has a set of base tones that are shades of
+ light ochre (earthly colors), while ‘modus-vivendi-tinted’ gives a
+ night sky impression.
+
+Deuteranopia themes
+ ‘modus-operandi-deuteranopia’ and its companion
+ ‘modus-vivendi-deuteranopia’ are optimized for users with red-green
+ color deficiency. This means that they do not use red and green
+ hues for color-coding purposes, such as for diff removed and added
+ lines. Instead, they implement colors that are discernible by
+ users with deueteranopia or deuteranomaly (mostly yellow and blue
+ hues).
+
+Tritanopia themes
+ ‘modus-operandi-tritanopia’ and its counterpart
+ ‘modus-vivendi-tritanopia’ are optimized for users with blue-yellow
+ color deficiency. The idea is the same as with the deuteranopia
+ variants: color coding relies only on hues that are accessible to
+ people with tritanopia or tritanomaly, namely, shades of red and
+ cyan.
+
+ To ensure that users have a consistently accessible experience, the
+themes strive to achieve as close to full face coverage as possible,
+while still targeting a curated list of well-maintained packages (*note
+Face coverage::).
+
+ The overarching objective of this project is to always offer
+accessible color combinations. There shall never be a compromise on
+this principle. If there arises an inescapable trade-off between
+usability and stylistic considerations, we will always opt for the
+former.
+
+ Starting with version 0.12.0 and onwards, the themes are built into
+GNU Emacs.
+
+* Menu:
+
+* How do the themes look like::
+* Learn about the latest changes::
+
+
+File: modus-themes.info, Node: How do the themes look like, Next: Learn about the latest changes, Up: Overview
+
+1.1 How do the themes look like
+===============================
+
+Check the web page with the screen shots
+(https://protesilaos.com/emacs/modus-themes-pictures/). Note that the
+themes are highly customizable (*note Customization options::).
+
+
+File: modus-themes.info, Node: Learn about the latest changes, Prev: How do the themes look like, Up: Overview
+
+1.2 Learn about the latest changes
+==================================
+
+Please refer to the web page with the change log
+(https://protesilaos.com/emacs/modus-themes-changelog). It is
+comprehensive and covers everything that goes into every tagged release
+of the themes.
+
+
+File: modus-themes.info, Node: Installation, Next: Enable and load, Prev: Overview, Up: Top
+
+2 Installation
+**************
+
+The Modus themes are distributed with Emacs starting with version 28.1.
+On older versions of Emacs, they can be installed using Emacs’ package
+manager or manually from their code repository. There also exist
+packages for distributions of GNU/Linux.
+
+ Emacs 28 ships with ‘modus-themes’ version ‘1.6.0’. Emacs 29
+includes version ‘3.0.0’. Emacs 30 provides a newer, refactored version
+that thoroughly refashions how the themes are implemented and
+customized. Such major versions are not backward-compatible due to the
+limited resources at the maintainer’s disposal to support multiple
+versions of Emacs and of the themes across the years.
+
+* Menu:
+
+* Install manually from source::
+* Install from the archives::
+* Install on GNU/Linux::
+* Dealing with byte compilation errors::
+
+
+File: modus-themes.info, Node: Install manually from source, Next: Install from the archives, Up: Installation
+
+2.1 Install manually from source
+================================
+
+In the following example, we are assuming that your Emacs files are
+stored in ‘~/.emacs.d’ and that you want to place the Modus themes in
+‘~/.emacs.d/modus-themes’.
+
+ 1. Get the source and store it in the desired path by running the
+ following in the command line shell:
+
+ $ git clone https://gitlab.com/protesilaos/modus-themes.git ~/.emacs.d/modus-themes
+
+ 1. Add that path to your known Elisp libraries’ list, by placing this
+ snippet of Emacs Lisp in your init file (e.g. ‘init.el’):
+
+ (add-to-list 'load-path "~/.emacs.d/modus-themes")
+
+ The themes are now ready to be used: *note Enable and load::.
+
+
+File: modus-themes.info, Node: Install from the archives, Next: Install on GNU/Linux, Prev: Install manually from source, Up: Installation
+
+2.2 Install from the archives
+=============================
+
+The ‘modus-themes’ package is available from the GNU ELPA archive, which
+is configured by default.
+
+ Prior to querying any package archive, make sure to update the index,
+with ‘M-x package-refresh-contents’. Then all you need to do is type
+‘M-x package-install’ and specify the ‘modus-themes’.
+
+ Once installed, the themes are ready to be used: *note Enable and
+load::.
+
+
+File: modus-themes.info, Node: Install on GNU/Linux, Next: Dealing with byte compilation errors, Prev: Install from the archives, Up: Installation
+
+2.3 Install on GNU/Linux
+========================
+
+The themes are also available from the archives of some distributions of
+GNU/Linux. These should correspond to a tagged release rather than
+building directly from the latest Git commit. It all depends on the
+distro’s packaging policies.
+
+* Menu:
+
+* Debian 11 Bullseye::
+* GNU Guix::
+
+
+File: modus-themes.info, Node: Debian 11 Bullseye, Next: GNU Guix, Up: Install on GNU/Linux
+
+2.3.1 Debian 11 Bullseye
+------------------------
+
+The themes are part of Debian 11 Bullseye. Get them with:
+
+ sudo apt install elpa-modus-themes
+
+ They are now ready to be used: *note Enable and load::.
+
+ NOTE that Debian’s package is severely out-of-date as of this writing
+2022-07-24 09:57 +0300.
+
+
+File: modus-themes.info, Node: GNU Guix, Prev: Debian 11 Bullseye, Up: Install on GNU/Linux
+
+2.3.2 GNU Guix
+--------------
+
+Users of Guix can get the themes with this command:
+
+ guix package -i emacs-modus-themes
+
+ They are now ready to be used: *note Enable and load::.
+
+
+File: modus-themes.info, Node: Dealing with byte compilation errors, Prev: Install on GNU/Linux, Up: Installation
+
+2.4 Dealing with byte compilation errors
+========================================
+
+From time to time, we receive bug reports pertaining to errors with byte
+compilation. These seldom have to do with faulty code in the themes: it
+might be a shortcoming of ‘package.el’, some regression in the current
+development target of Emacs, a misconfiguration in an otherwise exotic
+setup, and the like.
+
+ The common solution with a stable version of Emacs is to:
+
+ 1. Delete the ‘modus-themes’ package.
+ 2. Close the current Emacs session.
+ 3. Install the ‘modus-themes’ again.
+
+ For those building Emacs directly from source, the solution may
+involve reverting to an earlier commit in emacs.git.
+
+ At any rate, if you encounter such an issue please report it: we will
+either fix the bug on our end if it is truly ours, or help forward it to
+the relevant upstream maintainer. Whatever you do, please understand
+that a build failure does not mean we are necessarily doing something
+wrong.
+
+ *note Issues you can help with::.
+
+
+File: modus-themes.info, Node: Enable and load, Next: Customization options, Prev: Installation, Up: Top
+
+3 Enable and load
+*****************
+
+NOTE that Emacs can load multiple themes, which typically produces
+undesirable results and undoes the work of the designer. Use the
+‘disable-theme’ command if you are trying other themes beside the Modus
+collection (*note Option for disabling other themes while loading Modus:
+Disable other themes.).
+
+ Users of the built-in themes cannot ‘require’ the package as usual
+because there is no package to speak of. Instead, things are simpler as
+built-in themes are considered safe. All one needs is to load the theme
+of their preference by adding either form to their init file:
+
+ (load-theme 'modus-operandi) ; Light theme
+ (load-theme 'modus-vivendi) ; Dark theme
+
+ Remember that the Modus themes are six themes (*note Overview::).
+Adapt the above snippet accordingly.
+
+ Users of packaged variants of the themes must add a few more lines to
+ensure that everything works as intended. First, one has to require the
+main library before loading one of the themes:
+
+ (require 'modus-themes)
+
+ One can activate a theme with something like the following
+expression, replacing ‘modus-operandi’ with their preferred Modus theme:
+
+ (load-theme 'modus-operandi :no-confirm)
+
+ Changes to the available customization options must always be
+evaluated before loading a theme (*note Customization Options:
+Customization options.). Reload a theme for new changes to take effect.
+
+ This is how a basic setup could look like (*note The require-theme
+for built-in Emacs themes: The require-theme for built-in Emacs
+themes.):
+
+ ;;; For the built-in themes which cannot use `require'.
+ (require-theme 'modus-themes)
+
+ ;; Add all your customizations prior to loading the themes.
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+ ;; Load the theme of your choice.
+ (load-theme 'modus-operandi)
+
+ ;; Optionally define a key to switch between Modus themes. Also check
+ ;; the user option `modus-themes-to-toggle'.
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle)
+
+
+
+ ;;; For packaged versions which must use `require'.
+
+ (require 'modus-themes)
+
+ ;; Add all your customizations prior to loading the themes
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+ ;; Load the theme of your choice.
+ (load-theme 'modus-operandi :no-confirm)
+
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle)
+
+ *note Sample configuration with and without use-package::.
+
+* Menu:
+
+* The require-theme for built-in Emacs themes::
+* Sample configuration with and without use-package::
+* Differences between loading and enabling::
+
+
+File: modus-themes.info, Node: The require-theme for built-in Emacs themes, Next: Sample configuration with and without use-package, Up: Enable and load
+
+3.1 The ‘require-theme’ for built-in Emacs themes
+=================================================
+
+The version of the Modus themes that is included in Emacs CANNOT use the
+standard ‘require’. This is because the built-in themes are not
+included in the ‘load-path’ (not my decision). The ‘require-theme’
+function must be used in this case as a replacement. For example:
+
+ (require-theme 'modus-themes)
+
+ ;; All customizations here
+ (setq modus-themes-bold-constructs t
+ modus-themes-italic-constructs t)
+
+ ;; Maybe define some palette overrides, such as by using our presets
+ (setq modus-themes-common-palette-overrides
+ modus-themes-preset-overrides-intense)
+
+ ;; Load the theme of choice (built-in themes are always "safe" so they
+ ;; do not need the `no-require' argument of `load-theme').
+ (load-theme 'modus-operandi)
+
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle)
+
+
+File: modus-themes.info, Node: Sample configuration with and without use-package, Next: Differences between loading and enabling, Prev: The require-theme for built-in Emacs themes, Up: Enable and load
+
+3.2 Sample configuration with and without use-package
+=====================================================
+
+What follows is a variant of what we demonstrate in the previous section
+(*note Enable and load::).
+
+ It is common for Emacs users to rely on ‘use-package’ for declaring
+package configurations in their setup. We use this as an example:
+
+ ;;; For the built-in themes which cannot use `require'.
+ (use-package emacs
+ :config
+ (require-theme 'modus-themes) ; `require-theme' is ONLY for the built-in Modus themes
+
+ ;; Add all your customizations prior to loading the themes
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+ ;; Maybe define some palette overrides, such as by using our presets
+ (setq modus-themes-common-palette-overrides
+ modus-themes-preset-overrides-intense)
+
+ ;; Load the theme of your choice.
+ (load-theme 'modus-operandi)
+
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle))
+
+
+
+ ;;; For packaged versions which must use `require'.
+ (use-package modus-themes
+ :ensure t
+ :config
+ ;; Add all your customizations prior to loading the themes
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+ ;; Maybe define some palette overrides, such as by using our presets
+ (setq modus-themes-common-palette-overrides
+ modus-themes-preset-overrides-intense)
+
+ ;; Load the theme of your choice.
+ (load-theme 'modus-operandi)
+
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle))
+
+ The same without ‘use-package’:
+
+ (require 'modus-themes) ; OR for the built-in themes: (require-theme 'modus-themes)
+
+ ;; Add all your customizations prior to loading the themes
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+ ;; Maybe define some palette overrides, such as by using our presets
+ (setq modus-themes-common-palette-overrides
+ modus-themes-preset-overrides-intense)
+
+ ;; Load the theme of your choice:
+ (load-theme 'modus-operandi :no-confirm)
+
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle)
+
+ *note Differences between loading and enabling::.
+
+ Note: make sure not to customize the variable
+‘custom-theme-load-path’ or ‘custom-theme-directory’ after the themes’
+package declaration. That will lead to failures in loading the files.
+If either or both of those variables need to be changed, their values
+should be defined before the package declaration of the themes.
+
+ *note Make the themes look like what the maintainer uses::
+
+
+File: modus-themes.info, Node: Differences between loading and enabling, Prev: Sample configuration with and without use-package, Up: Enable and load
+
+3.3 Differences between loading and enabling
+============================================
+
+The reason we recommend ‘load-theme’ instead of the other option of
+‘enable-theme’ is that the former does a kind of “reset” on the face
+specs. It quite literally loads (or reloads) the theme. Whereas the
+‘enable-theme’ function simply puts an already loaded theme to the top
+of the list of enabled items, re-using whatever state was last loaded.
+
+ As such, ‘load-theme’ reads all customizations that may happen during
+any given Emacs session: even after the initial setup of a theme.
+Examples are calls to ‘custom-set-faces’, as well as new values assigned
+to the options the Modus themes provide (*note Customization Options:
+Customization options.).
+
+ Our tests show that ‘enable-theme’ does not read such variables anew,
+so it might appear to the unsuspecting user that the themes are somehow
+broken whenever they try to assign a new value to a customization option
+or some face.
+
+ This “reset” that ‘load-theme’ brings about does, however, come at
+the cost of being somewhat slower than ‘enable-theme’. Users who have a
+stable setup and who seldom update their variables during a given Emacs
+session, are better off using something like this:
+
+ (require 'modus-themes)
+
+ ;; Activate your desired themes here
+ (load-theme 'modus-operandi t t)
+ (load-theme 'modus-vivendi t t)
+
+ ;; Enable the preferred one
+ (enable-theme 'modus-operandi)
+
+ *note Toggle themes without reloading them::.
+
+ *note Sample configuration with and without use-package::.
+
+ With the above granted, other sections of the manual discuss how to
+configure custom faces, where ‘load-theme’ is expected, though
+‘enable-theme’ could still apply in stable setups:
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+
+File: modus-themes.info, Node: Customization options, Next: Advanced customization, Prev: Enable and load, Up: Top
+
+4 Customization options
+***********************
+
+The Modus themes are highly configurable, though they should work well
+without any further tweaks. We provide a variety of user options. The
+following code block provides an overview. In addition to those
+variables, the themes support a comprehensive system of overrides: it
+can be used to make thoroughgoing changes to the looks of the themes
+(*note Option for palette overrides: Palette overrides.). We document
+everything at length in the pages of this manual and also provide
+ready-to-use code samples.
+
+ Remember that all customization options must be evaluated before
+loading a theme (*note Enable and load::). If the theme is already
+active, it must be reloaded for changes to take effect.
+
+ ;; In all of the following, WEIGHT is a symbol such as `semibold',
+ ;; `light', `bold', or anything mentioned in `modus-themes-weights'.
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil
+ modus-themes-mixed-fonts t
+ modus-themes-variable-pitch-ui nil
+ modus-themes-custom-auto-reload t
+ modus-themes-disable-other-themes t
+
+ ;; Options for `modus-themes-prompts' are either nil (the
+ ;; default), or a list of properties that may include any of those
+ ;; symbols: `italic', `WEIGHT'
+ modus-themes-prompts '(italic bold)
+
+ ;; The `modus-themes-completions' is an alist that reads two
+ ;; keys: `matches', `selection'. Each accepts a nil value (or
+ ;; empty list) or a list of properties that can include any of
+ ;; the following (for WEIGHT read further below):
+ ;;
+ ;; `matches' :: `underline', `italic', `WEIGHT'
+ ;; `selection' :: `underline', `italic', `WEIGHT'
+ modus-themes-completions
+ '((matches . (extrabold))
+ (selection . (semibold italic text-also)))
+
+ modus-themes-org-blocks 'gray-background ; {nil,'gray-background,'tinted-background}
+
+ ;; The `modus-themes-headings' is an alist: read the manual's
+ ;; node about it or its doc string. Basically, it supports
+ ;; per-level configurations for the optional use of
+ ;; `variable-pitch' typography, a height value as a multiple of
+ ;; the base font size (e.g. 1.5), and a `WEIGHT'.
+ modus-themes-headings
+ '((1 . (variable-pitch 1.5))
+ (2 . (1.3))
+ (agenda-date . (1.3))
+ (agenda-structure . (variable-pitch light 1.8))
+ (t . (1.1))))
+
+ ;; Remember that more (MUCH MORE) can be done with overrides, which we
+ ;; document extensively in this manual.
+
+* Menu:
+
+* Custom reload theme:: Toggle auto-reload of the theme when setting custom variables
+* Disable other themes:: Determine whether loading a Modus themes disables all others
+* Bold constructs:: Toggle bold constructs in code
+* Italic constructs:: Toggle italic font constructs in code
+* Mixed fonts:: Toggle mixing of font families
+* Command prompts:: Control the style of command prompts
+* Completion UIs:: Choose among several styles for completion UIs
+* Org mode blocks:: Choose among plain, gray, or tinted backgrounds
+* Heading styles:: Choose among several styles, also per heading level
+* UI typeface:: Toggle the use of variable-pitch across the User Interface
+* Palette overrides:: Refashion color values and/or semantic color mappings
+
+
+File: modus-themes.info, Node: Custom reload theme, Next: Disable other themes, Up: Customization options
+
+4.1 Option for reloading the theme on custom change
+===================================================
+
+Brief: Toggle reloading of the active theme when an option is changed
+through the Custom UI.
+
+ Symbol: ‘modus-themes-custom-auto-reload’ (‘boolean’ type)
+
+ Possible values:
+
+ 1. ‘nil’
+ 2. ‘t’ (default)
+
+ All theme user options take effect when a theme is loaded. Any
+subsequent changes require the theme to be reloaded.
+
+ When this variable has a non-‘nil’ value, any change made via the
+Custom UI or related functions such as ‘customize-set-variable’ and
+‘setopt’ (Emacs 29), will trigger a reload automatically.
+
+ With a ‘nil’ value, changes to user options have no further
+consequences: the user must manually reload the theme (*note Enable and
+load::).
+
+
+File: modus-themes.info, Node: Disable other themes, Next: Bold constructs, Prev: Custom reload theme, Up: Customization options
+
+4.2 Option for disabling other themes while loading Modus
+=========================================================
+
+Brief: Disable all other themes when loading a Modus theme.
+
+ Symbol: ‘modus-themes-disable-other-themes’ (‘boolean’ type)
+
+ Possible values:
+
+ 1. ‘nil’
+ 2. ‘t’ (default)
+
+ When the value is non-‘nil’, the commands ‘modus-themes-toggle’ and
+‘modus-themes-select’, as well as the ‘modus-themes-load-theme’
+function, will disable all other themes while loading the specified
+Modus theme. This is done to ensure that Emacs does not blend two or
+more themes: such blends lead to awkward results that undermine the work
+of the designer.
+
+ When the value is ‘nil’, the aforementioned commands and function
+will only disable other themes within the Modus collection.
+
+ This option is provided because Emacs themes are not necessarily
+limited to colors/faces: they can consist of an arbitrary set of
+customizations. Users who use such customization bundles must set this
+variable to a ‘nil’ value.
+
+
+File: modus-themes.info, Node: Bold constructs, Next: Italic constructs, Prev: Disable other themes, Up: Customization options
+
+4.3 Option for more bold constructs
+===================================
+
+Brief: Use bold for code syntax highlighting and related.
+
+ Symbol: ‘modus-themes-bold-constructs’ (‘boolean’ type)
+
+ Possible values:
+
+ 1. ‘nil’ (default)
+ 2. ‘t’
+
+ The default is to use a bold typographic weight only when it is
+required.
+
+ With a non-‘nil’ value (‘t’) display several syntactic constructs in
+bold weight. This concerns keywords and other important aspects of code
+syntax. It also affects certain mode line indicators and command
+prompts.
+
+ Advanced users may also want to configure the exact attributes of the
+‘bold’ face.
+
+ *note Configure bold and italic faces::.
+
+
+File: modus-themes.info, Node: Italic constructs, Next: Mixed fonts, Prev: Bold constructs, Up: Customization options
+
+4.4 Option for more italic constructs
+=====================================
+
+Brief: Use italics for code syntax highlighting and related.
+
+ Symbol: ‘modus-themes-italic-constructs’ (‘boolean’ type)
+
+ Possible values:
+
+ 1. ‘nil’ (default)
+ 2. ‘t’
+
+ The default is to not use slanted text forms (italics) unless it is
+absolutely necessary.
+
+ With a non-‘nil’ value (‘t’) choose to render more faces in italics.
+This typically affects documentation strings and code comments.
+
+ Advanced users may also want to configure the exact attributes of the
+‘italic’ face.
+
+ *note Configure bold and italic faces::.
+
+
+File: modus-themes.info, Node: Mixed fonts, Next: Command prompts, Prev: Italic constructs, Up: Customization options
+
+4.5 Option for font mixing
+==========================
+
+Brief: Toggle the use of monospaced fonts for spacing-sensitive
+constructs (affects font families).
+
+ Symbol: ‘modus-themes-mixed-fonts’ (‘boolean’ type)
+
+ Possible values:
+
+ 1. ‘nil’ (default)
+ 2. ‘t’
+
+ When set to non-‘nil’ (‘t’), configure some spacing-sensitive faces
+like Org tables and code blocks to always inherit from the ‘fixed-pitch’
+face. This is to ensure that certain constructs like code blocks and
+tables remain monospaced even when users opt for a mode that remaps
+typeface families, such as the built-in ‘M-x variable-pitch-mode’.
+Otherwise the layout can appear broken, due to how spacing is done.
+
+ For a consistent experience, user may need to specify the font family
+of the ‘fixed-pitch’ face.
+
+ *note Font configurations for Org and others::.
+
+
+File: modus-themes.info, Node: Command prompts, Next: Completion UIs, Prev: Mixed fonts, Up: Customization options
+
+4.6 Option for command prompt styles
+====================================
+
+Brief: Control the style of command prompts (e.g. minibuffer, shell,
+IRC clients).
+
+ Symbol: ‘modus-themes-prompts’ (‘choice’ type, list of properties)
+
+ Possible values are expressed as a list of properties (default is
+‘nil’ or an empty list). The list can include any of the following
+symbols:
+
+ • ‘italic’
+ • ‘italic’
+ • A font weight, which must be supported by the underlying typeface:
+ • ‘thin’
+ • ‘ultralight’
+ • ‘extralight’
+ • ‘light’
+ • ‘semilight’
+ • ‘regular’
+ • ‘medium’
+ • ‘semibold’
+ • ‘bold’
+ • ‘heavy’
+ • ‘extrabold’
+ • ‘ultrabold’
+
+ The default (a ‘nil’ value or an empty list) means to only use a
+subtle colored foreground color.
+
+ The ‘italic’ property adds a slant to the font’s forms (italic or
+oblique forms, depending on the typeface).
+
+ The symbol of a font weight attribute such as ‘light’, ‘semibold’, et
+cetera, adds the given weight to links. Valid symbols are defined in
+the variable ‘modus-themes-weights’. The absence of a weight means that
+the one of the underlying text will be used.
+
+ Combinations of any of those properties are expressed as a list, like
+in these examples:
+
+ (bold italic)
+ (italic semibold)
+
+ The order in which the properties are set is not significant.
+
+ In user configuration files the form may look like this:
+
+ (setq modus-themes-prompts '(extrabold italic))
+
+ *note Make prompts more or less colorful::.
+
+
+File: modus-themes.info, Node: Completion UIs, Next: Org mode blocks, Prev: Command prompts, Up: Customization options
+
+4.7 Option for completion framework aesthetics
+==============================================
+
+Brief: Set the overall style of completion framework interfaces.
+
+ Symbol: ‘modus-themes-completions’ (‘alist’ type properties)
+
+ This affects Company, Corfu, Flx, Icomplete/Fido, Ido, Ivy,
+Orderless, Vertico, and the standard ‘*Completions*’ buffer. The value
+is an alist of expressions, each of which takes the form of ‘(KEY .
+LIST-OF-PROPERTIES)’. ‘KEY’ is a symbol, while ‘PROPERTIES’ is a list.
+Here is a sample, followed by a description of the particularities:
+
+ (setq modus-themes-completions
+ '((matches . (extrabold underline))
+ (selection . (semibold italic))))
+
+ The ‘matches’ key refers to the highlighted characters that
+correspond to the user’s input. When its properties are ‘nil’ or an
+empty list, matching characters in the user interface will have a bold
+weight and a colored foreground. The list of properties may include any
+of the following symbols regardless of the order they may appear in:
+
+ • ‘underline’ to draw a line below the characters;
+
+ • ‘italic’ to use a slanted font (italic or oblique forms);
+
+ • The symbol of a font weight attribute such as ‘light’, ‘semibold’,
+ et cetera. Valid symbols are defined in the variable
+ ‘modus-themes-weights’. The absence of a weight means that bold
+ will be used.
+
+ The ‘selection’ key applies to the current line or currently matched
+candidate, depending on the specifics of the user interface. When its
+properties are ‘nil’ or an empty list, it has a subtle gray background,
+a bold weight, and the base foreground value for the text. The list of
+properties it accepts is as follows (order is not significant):
+
+ • ‘underline’ to draw a line below the characters;
+
+ • ‘italic’ to use a slanted font (italic or oblique forms);
+
+ • The symbol of a font weight attribute such as ‘light’, ‘semibold’,
+ et cetera. Valid symbols are defined in the variable
+ ‘modus-themes-weights’. The absence of a weight means that bold
+ will be used.
+
+ Apart from specifying each key separately, a catch-all list is
+accepted. This is only useful when the desired aesthetic is the same
+across all keys that are not explicitly referenced. For example, this:
+
+ (setq modus-themes-completions
+ '((t . (extrabold underline))))
+
+ Is the same as:
+
+ (setq modus-themes-completions
+ '((matches . (extrabold underline))
+ (selection . (extrabold underline))))
+
+ *note Make completion matches more or less colorful::.
+
+
+File: modus-themes.info, Node: Org mode blocks, Next: Heading styles, Prev: Completion UIs, Up: Customization options
+
+4.8 Option for org-mode block styles
+====================================
+
+Brief: Set the overall style of Org code blocks, quotes, and the like.
+
+ Symbol: ‘modus-themes-org-blocks’ (‘choice’ type)
+
+ Possible values:
+
+ 1. ‘nil’ (default)
+ 2. ‘gray-background’
+ 3. ‘tinted-background’
+
+ Option ‘nil’ (the default) means that the block has no background of
+its own: it uses the one that applies to the rest of the buffer. In
+this case, the delimiter lines have a gray color for their text, making
+them look exactly like all other Org properties.
+
+ Option ‘gray-background’ applies a subtle gray background to the
+block’s contents. It also affects the begin and end lines of the block
+as they get another shade of gray as their background, which
+differentiates them from the contents of the block. All background
+colors extend to the edge of the window, giving the area a rectangular,
+“blocky” presentation. If the begin/end lines do not extend in this
+way, check the value of the Org user option
+‘org-fontify-whole-block-delimiter-line’.
+
+ Option ‘tinted-background’ uses a colored background for the contents
+of the block. The exact color value will depend on the programming
+language and is controlled by the variable ‘org-src-block-faces’ (refer
+to the theme’s source code for the current association list). For this
+to take effect, the Org buffer needs to be restarted with
+‘org-mode-restart’.
+
+ Code blocks use their major mode’s fontification (syntax
+highlighting) only when the variable ‘org-src-fontify-natively’ is
+non-‘nil’. While quote/verse blocks require setting
+‘org-fontify-quote-and-verse-blocks’ to a non-‘nil’ value.
+
+ *note Update Org block delimiter fontification::.
+
+
+File: modus-themes.info, Node: Heading styles, Next: UI typeface, Prev: Org mode blocks, Up: Customization options
+
+4.9 Option for the headings’ overall style
+==========================================
+
+Brief: Heading styles with optional list of values per heading level.
+
+ Symbol: ‘modus-themes-headings’ (‘alist’ type, multiple properties)
+
+ This is an alist that accepts a ‘(KEY . LIST-OF-VALUES)’ combination.
+The ‘KEY’ is either a number, representing the heading’s level (0
+through 8) or ‘t’, which pertains to the fallback style. The named keys
+‘agenda-date’ and ‘agenda-structure’ apply to the Org agenda.
+
+ Level 0 is a special heading: it is used for what counts as a
+document title or equivalent, such as the ‘#+title’ construct we find in
+Org files. Levels 1-8 are regular headings.
+
+ The ‘LIST-OF-VALUES’ covers symbols that refer to properties, as
+described below. Here is a complete sample with various stylistic
+combinations, followed by a presentation of all available properties:
+
+ (setq modus-themes-headings
+ '((1 . (variable-pitch 1.5))
+ (2 . (1.3))
+ (agenda-date . (1.3))
+ (agenda-structure . (variable-pitch light 1.8))
+ (t . (1.1))))
+
+ Properties:
+
+ • A font weight, which must be supported by the underlying typeface:
+ • ‘thin’
+ • ‘ultralight’
+ • ‘extralight’
+ • ‘light’
+ • ‘semilight’
+ • ‘regular’
+ • ‘medium’
+ • ‘semibold’
+ • ‘bold’ (default)
+ • ‘heavy’
+ • ‘extrabold’
+ • ‘ultrabold’
+ • A floating point as a height multiple of the default or a cons cell
+ in the form of ‘(height . FLOAT)’.
+
+ By default (a ‘nil’ value for this variable), all headings have a
+bold typographic weight and use a desaturated text color.
+
+ A ‘variable-pitch’ property changes the font family of the heading to
+that of the ‘variable-pitch’ face (normally a proportionately spaced
+typeface).
+
+ The symbol of a weight attribute adjusts the font of the heading
+accordingly, such as ‘light’, ‘semibold’, etc. Valid symbols are
+defined in the variable ‘modus-themes-weights’. The absence of a weight
+means that bold will be used by virtue of inheriting the ‘bold’ face.
+
+ *note Configure bold and italic faces::.
+
+ A number, expressed as a floating point (e.g. 1.5), adjusts the
+height of the heading to that many times the base font size. The
+default height is the same as 1.0, though it need not be explicitly
+stated. Instead of a floating point, an acceptable value can be in the
+form of a cons cell like ‘(height . FLOAT)’ or ‘(height FLOAT)’, where
+FLOAT is the given number.
+
+ Combinations of any of those properties are expressed as a list, like
+in these examples:
+
+ (semibold)
+ (variable-pitch semibold 1.3)
+ (variable-pitch semibold (height 1.3)) ; same as above
+ (variable-pitch semibold (height . 1.3)) ; same as above
+
+ The order in which the properties are set is not significant.
+
+ In user configuration files the form may look like this:
+
+ (setq modus-themes-headings
+ '((1 . (variable-pitch 1.5))
+ (2 . (1.3))
+ (agenda-date . (1.3))
+ (agenda-structure . (variable-pitch light 1.8))
+ (t . (1.1))))
+
+ When defining the styles per heading level, it is possible to pass a
+non-‘nil’ value (‘t’) instead of a list of properties. This will retain
+the original aesthetic for that level. For example:
+
+ (setq modus-themes-headings
+ '((1 . t) ; keep the default style
+ (2 . (semibold 1.2))
+ (t . (rainbow)))) ; style for all other headings
+
+ (setq modus-themes-headings
+ '((1 . (variable-pitch 1.5))
+ (2 . (semibold))
+ (t . t))) ; default style for all other levels
+
+ Note that the text color of headings, of their background, and
+overline can all be set via the overrides. It is possible to have any
+color combination for any heading level (something that could not be
+done in older versions of the themes).
+
+ *note Option for palette overrides: Palette overrides.
+
+ *note Make headings more or less colorful::.
+
+
+File: modus-themes.info, Node: UI typeface, Next: Palette overrides, Prev: Heading styles, Up: Customization options
+
+4.10 Option for variable-pitch font in UI elements
+==================================================
+
+Brief: Toggle the use of proportionately spaced (‘variable-pitch’) fonts
+in the User Interface.
+
+ Symbol: ‘modus-themes-variable-pitch-ui’ (‘boolean’ type)
+
+ Possible values:
+
+ 1. ‘nil’ (default)
+ 2. ‘t’
+
+ This option concerns User Interface elements that are under the
+direct control of Emacs. In particular: the mode line, header line, tab
+bar, and tab line.
+
+ The default is to use the same font as the rest of Emacs, which
+usually is a monospaced family.
+
+ With a non-‘nil’ value (‘t’) apply a proportionately spaced typeface.
+This is done by assigning the ‘variable-pitch’ face to the relevant
+items.
+
+ *note Font configurations for Org and others::.
+
+
+File: modus-themes.info, Node: Palette overrides, Prev: UI typeface, Up: Customization options
+
+4.11 Option for palette overrides
+=================================
+
+This section describes palette overrides in detail. For a simpler
+alternative, use the presets we provide (*note Palette override
+presets::).
+
+ Each Modus theme specifies a color palette that declares named color
+values and semantic color mappings:
+
+ • Named colors consist of a symbol and a string that specifies a
+ hexadecimal RGB value. For example: ‘(blue-warmer "#354fcf")’.
+
+ • The semantic color mappings associate an abstract construct with a
+ given named color from the palette, like ‘(heading-2
+ yellow-faint)’. Both elements of the list are symbols, though the
+ ‘cadr’ (value) can be a string that specifies a color, such as
+ ‘(heading-2 "#354fcf")’.
+
+ Both of those subsets can be overridden, thus refashioning the theme.
+Overrides are either shared, by being stored in the user option
+‘modus-themes-common-palette-overrides’, or they are specific to the
+theme they name. In the latter case, the naming scheme of each palette
+variable is ‘THEME-NAME-palette-overrides’, thus yielding:
+
+ • ‘modus-operandi-palette-overrides’
+
+ • ‘modus-operandi-deuteranopia-palette-overrides’
+
+ • ‘modus-operandi-tinted-palette-overrides’
+
+ • ‘modus-operandi-tritanopia-palette-overrides’
+
+ • ‘modus-vivendi-palette-overrides’
+
+ • ‘modus-vivendi-deuteranopia-palette-overrides’
+
+ • ‘modus-vivendi-tinted-palette-overrides’
+
+ • ‘modus-vivendi-tritanopia-palette-overrides’
+
+ Theme-specific overrides take precedence over the shared ones. It is
+strongly advised that shared overrides do NOT alter color values, as
+those will not be appropriate for both dark and light themes. Common
+overrides are best limited to the semantic color mappings as those use
+the color value that corresponds to the active theme (e.g. make the
+cursor ‘blue-warmer’ in all themes, whatever the value of ‘blue-warmer’
+is in each theme).
+
+ The value of any overrides’ variable must mirror a theme’s palette.
+Palette variables are named after their theme as ‘THEME-NAME-palette’.
+For example, the ‘modus-operandi-palette’ is like this:
+
+ (defconst modus-operandi-palette
+ '(
+ ;;; Basic values
+
+ (bg-main "#ffffff")
+ (bg-dim "#f0f0f0")
+ (fg-main "#000000")
+
+ ;; ...
+
+ (red "#a60000")
+ (red-warmer "#972500")
+ (red-cooler "#a0132f")
+ (red-faint "#7f0000")
+ (red-intense "#d00000")
+
+ ;; ...
+
+ ;;;; Mappings
+
+ ;; ...
+
+ (cursor fg-main)
+ (builtin magenta-warmer)
+ (comment fg-dim)
+ (constant blue-cooler)
+ (docstring green-faint)
+ (fnname magenta)
+ (keyword magenta-cooler)
+
+ ;; ...
+ ))
+
+ The ‘modus-operandi-palette-overrides’ targets the entries that need
+to be changed. For example, to make the main foreground color a dark
+gray instead of pure black, use a shade of red for comments, and apply a
+cyan hue to keywords:
+
+ (setq modus-operandi-palette-overrides
+ '((fg-main "#333333")
+ (comment red-faint)
+ (keyword cyan-cooler)))
+
+ Changes take effect upon theme reload (*note Custom reload theme::).
+Overrides are removed by setting their variable to a ‘nil’ value.
+
+ The common accented foregrounds in each palette follow a predictable
+naming scheme: ‘HUE{,-warmer,-cooler,-faint,-intense}’. ‘HUE’ is one of
+the six basic colors: red, green, blue, yellow, magenta, cyan.
+
+ Named colors that are meant to be used as backgrounds contain ‘bg’ in
+their name, such as ‘bg-red-intense’. While special purpose foregrounds
+that are meant to be combined with such backgrounds, contain ‘fg’ in
+their name, such as ‘fg-removed’ which complements ‘bg-removed’.
+
+ Named colors can be previewed, such as with the command
+‘modus-themes-list-colors’ (*note Preview theme colors::).
+
+ For a video tutorial that users of all skill levels can approach,
+watch:
+<https://protesilaos.com/codelog/2022-12-17-modus-themes-v4-demo/>.
+
+
+File: modus-themes.info, Node: Advanced customization, Next: Face coverage, Prev: Customization options, Up: Top
+
+5 Advanced customization
+************************
+
+Unlike the predefined customization options which follow a clear pattern
+of allowing the user to quickly specify their preference, the themes
+also provide a more flexible, albeit difficult, mechanism to control
+things with precision (*note Customization Options: Customization
+options.).
+
+ This section is of interest only to users who are prepared to
+maintain their own local tweaks and who are willing to deal with any
+possible incompatibilities between versioned releases of the themes. As
+such, they are labeled as “do-it-yourself” or “DIY”.
+
+* Menu:
+
+* Palette override presets::
+* Stylistic variants using palette overrides::
+* More accurate colors in terminal emulators::
+* Range of color with terminal emulators::
+* Preview theme colors::
+* Per-theme customization settings::
+* Get a single color from the palette::
+* Use theme colors in code with modus-themes-with-colors::
+* Do not extend the region background::
+* Add padding to mode line::
+* Remap face with local value::
+* Font configurations for Org and others::
+* Configure bold and italic faces::
+* Custom Org todo keyword and priority faces::
+* Custom Org emphasis faces::
+* Update Org block delimiter fontification::
+* Measure color contrast::
+* Load theme depending on time of day::
+* Backdrop for pdf-tools::
+* Toggle themes without reloading them::
+* A theme-agnostic hook for theme loading::
+* Use more spacious margins or padding in Emacs frames::
+* Custom hl-todo colors::
+* Add support for solaire-mode::
+
+
+File: modus-themes.info, Node: Palette override presets, Next: Stylistic variants using palette overrides, Up: Advanced customization
+
+5.1 Palette override presets
+============================
+
+This section shows how to refashion the themes by opting in to the
+stylistic presets we provide. Those presets override the default color
+mappings to amplify, tone down, or refashion the overall coloration of
+the themes.
+
+ To make almost all aspects of the themes less intense, use this:
+
+ ;; Always remember to reload the theme for changes to take effect!
+ (setq modus-themes-common-palette-overrides modus-themes-preset-overrides-faint)
+
+ With ‘modus-themes-preset-overrides-faint’ the grays are toned down,
+gray backgrounds are removed from some contexts, and almost all accent
+colors are desaturated. It makes the themes less attention-grabbing.
+
+ On the opposite end of the stylistic spectrum, we have this
+
+ ;; Always remember to reload the theme for changes to take effect!
+ (setq modus-themes-common-palette-overrides modus-themes-preset-overrides-intense)
+
+ The ‘modus-themes-preset-overrides-intense’ makes many background
+colors accented instead of gray and increases coloration in a number of
+places. Colors stand out more and are made easier to spot.
+
+ For some stylistic variation try the “cooler” and “warmer” presets:
+
+ ;; This:
+ (setq modus-themes-common-palette-overrides modus-themes-preset-overrides-cooler)
+
+ ;; Or:
+ (setq modus-themes-common-palette-overrides modus-themes-preset-overrides-warmer)
+
+ Note that the user is not limited to those presets. The system of
+overrides we provide makes it possible to tweak the value of each
+individual named color and to change how values are assigned to semantic
+color mappings (*note Option for palette overrides: Palette overrides.).
+Subsequent sections provide examples (*note Stylistic variants using
+palette overrides::).
+
+ It is also possible to use those presets as a basis and, for example,
+add to them code from the subsequent sections of this manual. This is
+the general idea (extra space for didactic purposes):
+
+ (setq modus-themes-common-palette-overrides
+ `(
+ ;; From the section "Make the mode line borderless"
+ (border-mode-line-active unspecified)
+ (border-mode-line-inactive unspecified)
+
+ ;; From the section "Make matching parenthesis more or less intense"
+ (bg-paren-match bg-magenta-intense)
+ (underline-paren-match fg-main)
+
+ ;; And expand the preset here. Note that the ,@ works because
+ ;; we use the backtick for this list, instead of a straight
+ ;; quote.
+ ,@modus-themes-preset-overrides-intense))
+
+
+File: modus-themes.info, Node: Stylistic variants using palette overrides, Next: More accurate colors in terminal emulators, Prev: Palette override presets, Up: Advanced customization
+
+5.2 Stylistic variants using palette overrides
+==============================================
+
+This section contains practical examples of overriding the palette of
+the themes (*note Option for palette overrides: Palette overrides.).
+Users can copy the code to their init file, evaluate it, and then
+re-load the theme for changes to take effect. To apply overrides at
+startup simply define them before the call that loads the theme.
+Remember that we also provide presets that are easier to apply (*note
+Palette override presets::).
+
+* Menu:
+
+* Make the mode line borderless::
+* Make the active mode line colorful::
+* Make the tab bar more or less colorful::
+* Make the fringe invisible or another color::
+* Make links use subtle or no underlines::
+* Make prompts more or less colorful::
+* Make completion matches more or less colorful::
+* Make comments yellow and strings green::
+* Make code syntax use the old alt-syntax style::
+* Make use of alternative styles for code syntax::
+* Make matching parenthesis more or less intense::
+* Make box buttons more or less gray::
+* Make TODO and DONE more or less intense::
+* Make headings more or less colorful::
+* Make Org agenda more or less colorful::
+* Make inline code in prose use alternative styles::
+* Make mail citations and headers more or less colorful::
+* Make the region preserve text colors, plus other styles: Make the region preserve text colors plus other styles.
+* Make mouse highlights more or less colorful::
+* Make language underlines less colorful::
+* Make line numbers use alternative styles::
+* Make diffs use only a foreground::
+* Make deuteranopia diffs red and blue instead of yellow and blue::
+* Make the themes look like what the maintainer uses::
+
+
+File: modus-themes.info, Node: Make the mode line borderless, Next: Make the active mode line colorful, Up: Stylistic variants using palette overrides
+
+5.2.1 Make the mode line borderless
+-----------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+To hide the border around the active and inactive mode lines, we need to
+set their color to that of the underlying background.
+
+ *note Make the active mode line colorful::.
+
+ *note Add padding to mode line::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Remove the border
+ (setq modus-themes-common-palette-overrides
+ '((border-mode-line-active unspecified)
+ (border-mode-line-inactive unspecified)))
+
+ ;; Keep the border but make it the same color as the background of the
+ ;; mode line (thus appearing borderless). The difference with the
+ ;; above is that this version is a bit thicker because the border are
+ ;; still there.
+ (setq modus-themes-common-palette-overrides
+ '((border-mode-line-active bg-mode-line-active)
+ (border-mode-line-inactive bg-mode-line-inactive)))
+
+
+File: modus-themes.info, Node: Make the active mode line colorful, Next: Make the tab bar more or less colorful, Prev: Make the mode line borderless, Up: Stylistic variants using palette overrides
+
+5.2.2 Make the active mode line colorful
+----------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show some snippets that apply different stylistic variants. Of
+course, it is possible to use theme-specific overrides to, say, have a
+blue mode line for ‘modus-operandi’ and a red one for ‘modus-vivendi’.
+
+ *note Make the mode line borderless::.
+
+ *note Add padding to mode line::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Blue background, neutral foreground, intense blue border
+ (setq modus-themes-common-palette-overrides
+ '((bg-mode-line-active bg-blue-intense)
+ (fg-mode-line-active fg-main)
+ (border-mode-line-active blue-intense)))
+
+ ;; Subtle blue background, neutral foreground, intense blue border
+ (setq modus-themes-common-palette-overrides
+ '((bg-mode-line-active bg-blue-subtle)
+ (fg-mode-line-active fg-main)
+ (border-mode-line-active blue-intense)))
+
+ ;; Subtle red background, red foreground, invisible border
+ (setq modus-themes-common-palette-overrides
+ '((bg-mode-line-active bg-red-subtle)
+ (fg-mode-line-active red-warmer)
+ (border-mode-line-active bg-red-subtle)))
+
+
+File: modus-themes.info, Node: Make the tab bar more or less colorful, Next: Make the fringe invisible or another color, Prev: Make the active mode line colorful, Up: Stylistic variants using palette overrides
+
+5.2.3 Make the tab bar more or less colorful
+--------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show how to affect the colors of the built-in ‘tab-bar-mode’ and
+‘tab-line-mode’.
+
+ For consistent theme-wide results, consider changing the mode line,
+fringes, and line numbers. These are shown in other sections of this
+manual.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Make the `tab-bar-mode' mode subtle while keepings its original
+ ;; gray aesthetic.
+ (setq modus-themes-common-palette-overrides
+ '((bg-tab-bar bg-main)
+ (bg-tab-current bg-active)
+ (bg-tab-other bg-dim)))
+
+ ;; Like the above, but the current tab has a colorful background and
+ ;; the inactive tabs have a slightly more noticeable gray background.
+ (setq modus-themes-common-palette-overrides
+ '((bg-tab-bar bg-main)
+ (bg-tab-current bg-cyan-intense)
+ (bg-tab-other bg-inactive)))
+
+ ;; Make the tabs colorful, using a monochromatic pattern (e.g. shades
+ ;; of cyan).
+ (setq modus-themes-common-palette-overrides
+ '((bg-tab-bar bg-cyan-nuanced)
+ (bg-tab-current bg-cyan-intense)
+ (bg-tab-other bg-cyan-subtle)))
+
+ ;; Like the above, but with a dichromatic pattern (cyan and magenta).
+ (setq modus-themes-common-palette-overrides
+ '((bg-tab-bar bg-cyan-nuanced)
+ (bg-tab-current bg-magenta-intense)
+ (bg-tab-other bg-cyan-subtle)))
+
+
+File: modus-themes.info, Node: Make the fringe invisible or another color, Next: Make links use subtle or no underlines, Prev: Make the tab bar more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.4 Make the fringe invisible or another color
+------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show how to make the fringe invisible or how to assign to it a
+different color. The “fringe” is a small area to the right and left
+side of the Emacs window which shows indicators such as for truncation
+or continuation lines.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Make the fringe invisible
+ (setq modus-themes-common-palette-overrides
+ '((fringe unspecified)))
+
+ ;; Make the fringe more intense
+ (setq modus-themes-common-palette-overrides
+ '((fringe bg-active)))
+
+ ;; Make the fringe colorful, but nuanced
+ (setq modus-themes-common-palette-overrides
+ '((fringe bg-blue-nuanced)))
+
+
+File: modus-themes.info, Node: Make links use subtle or no underlines, Next: Make prompts more or less colorful, Prev: Make the fringe invisible or another color, Up: Stylistic variants using palette overrides
+
+5.2.5 Make links use subtle or no underlines
+--------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this example, we showcase the special use of the ‘unspecified’ symbol
+that underline mappings can read correctly.
+
+ ;; Subtle underlines
+ (setq modus-themes-common-palette-overrides
+ '((underline-link border)
+ (underline-link-visited border)
+ (underline-link-symbolic border)))
+
+ ;; No underlines
+ (setq modus-themes-common-palette-overrides
+ '((underline-link unspecified)
+ (underline-link-visited unspecified)
+ (underline-link-symbolic unspecified)))
+
+
+File: modus-themes.info, Node: Make prompts more or less colorful, Next: Make completion matches more or less colorful, Prev: Make links use subtle or no underlines, Up: Stylistic variants using palette overrides
+
+5.2.6 Make prompts more or less colorful
+----------------------------------------
+
+This section contains practical examples of overriding the palette of
+the themes (*note Option for palette overrides: Palette overrides.). In
+the following code block we show how to add or remove color from
+prompts.
+
+ *note Option for command prompt styles: Command prompts.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Keep the background unspecified (like the default), but use a faint
+ ;; foreground color.
+ (setq modus-themes-common-palette-overrides
+ '((fg-prompt cyan-faint)
+ (bg-prompt unspecified)))
+
+ ;; Add a nuanced background to prompts that complements their foreground.
+ (setq modus-themes-common-palette-overrides
+ '((fg-prompt cyan)
+ (bg-prompt bg-cyan-nuanced)))
+
+ ;; Add a yellow background and adjust the foreground accordingly.
+ (setq modus-themes-common-palette-overrides
+ '((fg-prompt fg-main)
+ (bg-prompt bg-yellow-subtle))) ; try to replace "subtle" with "intense"
+
+
+File: modus-themes.info, Node: Make completion matches more or less colorful, Next: Make comments yellow and strings green, Prev: Make prompts more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.7 Make completion matches more or less colorful
+---------------------------------------------------
+
+This section contains practical examples of overriding the palette of
+the themes (*note Option for palette overrides: Palette overrides.).
+Here we demonstrate how to activate background coloration for completion
+matches. We show three different degrees of intensity.
+
+ *note Option for completion framework aesthetics: Completion UIs.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Add a nuanced background color to completion matches, while keeping
+ ;; their foreground intact (foregrounds do not need to be specified in
+ ;; this case, but we do it for didactic purposes).
+ (setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 blue)
+ (fg-completion-match-1 magenta-warmer)
+ (fg-completion-match-2 cyan)
+ (fg-completion-match-3 red)
+ (bg-completion-match-0 bg-blue-nuanced)
+ (bg-completion-match-1 bg-magenta-nuanced)
+ (bg-completion-match-2 bg-cyan-nuanced)
+ (bg-completion-match-3 bg-red-nuanced)))
+
+ ;; Add intense background colors to completion matches and adjust the
+ ;; foregrounds accordingly.
+ (setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 fg-main)
+ (fg-completion-match-1 fg-main)
+ (fg-completion-match-2 fg-main)
+ (fg-completion-match-3 fg-main)
+ (bg-completion-match-0 bg-blue-intense)
+ (bg-completion-match-1 bg-yellow-intense)
+ (bg-completion-match-2 bg-cyan-intense)
+ (bg-completion-match-3 bg-red-intense)))
+
+ ;; Like the above, but with subtle backgrounds.
+ (setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 fg-main)
+ (fg-completion-match-1 fg-main)
+ (fg-completion-match-2 fg-main)
+ (fg-completion-match-3 fg-main)
+ (bg-completion-match-0 bg-blue-subtle)
+ (bg-completion-match-1 bg-yellow-subtle)
+ (bg-completion-match-2 bg-cyan-subtle)
+ (bg-completion-match-3 bg-red-subtle)))
+
+ Adding to the above, it is possible to, say, reduce the number of
+colors to two:
+
+ ;; No backgrounds (like the default) and just use two colors.
+ (setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 blue)
+ (fg-completion-match-1 yellow)
+ (fg-completion-match-2 blue)
+ (fg-completion-match-3 yellow)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)))
+
+ ;; Again, a two-color style but this time with backgrounds
+ (setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 blue)
+ (fg-completion-match-1 yellow)
+ (fg-completion-match-2 blue)
+ (fg-completion-match-3 yellow)
+ (bg-completion-match-0 bg-blue-nuanced)
+ (bg-completion-match-1 bg-yellow-nuanced)
+ (bg-completion-match-2 bg-blue-nuanced)
+ (bg-completion-match-3 bg-yellow-nuanced)))
+
+ The user can mix and match to their liking.
+
+
+File: modus-themes.info, Node: Make comments yellow and strings green, Next: Make code syntax use the old alt-syntax style, Prev: Make completion matches more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.8 Make comments yellow and strings green
+--------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In previous versions of the themes, we provided an option for yellow-ish
+comments and green-ish strings. For some users, those were still not
+good enough, as the exact values were hardcoded. Here we show how to
+reproduce the effect, but also how to tweak it to one’s liking.
+
+ *note Make code syntax use the old alt-syntax style::.
+
+ *note Make use of alternative styles for code syntax::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Yellow comments and green strings like older versions of the Modus
+ ;; themes
+ (setq modus-themes-common-palette-overrides
+ '((comment yellow-cooler)
+ (string green-cooler)))
+
+ ;; Faint yellow comments and a different shade of green for strings
+ (setq modus-themes-common-palette-overrides
+ '((comment yellow-faint)
+ (string green-warmer)))
+
+ ;; Green comments and yellow strings, because now the user has the
+ ;; freedom to do it
+ (setq modus-themes-common-palette-overrides
+ '((comment green)
+ (string yellow-cooler)))
+
+
+File: modus-themes.info, Node: Make code syntax use the old alt-syntax style, Next: Make use of alternative styles for code syntax, Prev: Make comments yellow and strings green, Up: Stylistic variants using palette overrides
+
+5.2.9 Make code syntax use the old alt-syntax style
+---------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this section we show how to reproduce what previous versions of the
+Modus themes provided as a stylistic alternative for code syntax. The
+upside of using overrides for this purpose is that we can tweak the
+style to our liking, but first let’s start with its recreation:
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; The old "alt-syntax"
+ (setq modus-themes-common-palette-overrides
+ '((builtin magenta)
+ (comment fg-dim)
+ (constant magenta-cooler)
+ (docstring magenta-faint)
+ (docmarkup green-faint)
+ (fnname magenta-warmer)
+ (keyword cyan)
+ (preprocessor cyan-cooler)
+ (string red-cooler)
+ (type magenta-cooler)
+ (variable blue-warmer)
+ (rx-construct magenta-warmer)
+ (rx-backslash blue-cooler)))
+
+ The “alt-syntax” could optionally use green strings and yellow
+comments (*note Make comments yellow and strings green::):
+
+ ;; Same as above, but with yellow comments and green strings
+ (setq modus-themes-common-palette-overrides
+ '((builtin magenta)
+ (comment yellow-faint)
+ (constant magenta-cooler)
+ (docstring green-faint)
+ (docmarkup magenta-faint)
+ (fnname magenta-warmer)
+ (keyword cyan)
+ (preprocessor cyan-cooler)
+ (string green-cooler)
+ (type magenta-cooler)
+ (variable blue-warmer)
+ (rx-construct magenta-warmer)
+ (rx-backslash blue-cooler)))
+
+ The standard “alt-syntax” has red strings. As such, it is
+interesting to experiment with faintly red colored comments:
+
+ ;; Like the old "alt-syntax" but with faint red comments
+ (setq modus-themes-common-palette-overrides
+ '((builtin magenta)
+ (comment red-faint)
+ (constant magenta-cooler)
+ (docstring magenta-faint)
+ (docmarkup green-faint)
+ (fnname magenta-warmer)
+ (keyword cyan)
+ (preprocessor cyan-cooler)
+ (string red-cooler)
+ (type magenta-cooler)
+ (variable blue-warmer)
+ (rx-construct magenta-warmer)
+ (rx-backslash blue-cooler)))
+
+ The user can always mix and match styles to their liking.
+
+ *note Make use of alternative styles for code syntax::.
+
+
+File: modus-themes.info, Node: Make use of alternative styles for code syntax, Next: Make matching parenthesis more or less intense, Prev: Make code syntax use the old alt-syntax style, Up: Stylistic variants using palette overrides
+
+5.2.10 Make use of alternative styles for code syntax
+-----------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+The idea here is to change how named colors are mapped to code syntax.
+Each of the following snippets give the ‘modus-themes’ a different feel
+while editing code.
+
+ Note that my ‘modus-themes’ and ‘ef-themes’ do not use the same
+palettes, so some things are different. If you copy from the latter to
+the former, double-check that the entries exist in the given Modus theme
+palette.
+
+ *note Make comments yellow and strings green::.
+
+ *note Make code syntax use the old alt-syntax style::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Mimic `ef-night' theme (from my `ef-themes') for code syntax
+ ;; highlighting, while still using the Modus colors (and other
+ ;; mappings).
+ (setq modus-themes-common-palette-overrides
+ '((builtin green-cooler)
+ (comment yellow-faint)
+ (constant magenta-cooler)
+ (fnname cyan-cooler)
+ (keyword blue-warmer)
+ (preprocessor red-warmer)
+ (docstring cyan-faint)
+ (string blue-cooler)
+ (type magenta-cooler)
+ (variable cyan)))
+
+ ;; Mimic `ef-summer' theme (from my `ef-themes') for code syntax
+ ;; highlighting, while still using the Modus colors (and other
+ ;; mappings).
+ (setq modus-themes-common-palette-overrides
+ '((builtin magenta)
+ (comment yellow-faint)
+ (constant red-cooler)
+ (fnname magenta-warmer)
+ (keyword magenta-cooler)
+ (preprocessor green-warmer)
+ (docstring cyan-faint)
+ (string yellow-warmer)
+ (type cyan-warmer)
+ (variable blue-warmer)))
+
+ ;; Mimic `ef-bio' theme (from my `ef-themes') for code syntax
+ ;; highlighting, while still using the Modus colors (and other
+ ;; mappings).
+ (setq modus-themes-common-palette-overrides
+ '((builtin green)
+ (comment yellow-faint)
+ (constant blue)
+ (fnname green-warmer)
+ (keyword green-cooler)
+ (preprocessor green)
+ (docstring green-faint)
+ (string magenta-cooler)
+ (type cyan-warmer)
+ (variable blue-warmer)))
+
+ ;; Mimic `ef-trio-light' theme (from my `ef-themes') for code syntax
+ ;; highlighting, while still using the Modus colors (and other
+ ;; mappings).
+ (setq modus-themes-common-palette-overrides
+ '((builtin magenta-cooler)
+ (comment yellow-faint)
+ (constant magenta-warmer)
+ (fnname blue-warmer)
+ (keyword magenta)
+ (preprocessor red-cooler)
+ (docstring magenta-faint)
+ (string green-cooler)
+ (type cyan-cooler)
+ (variable cyan-warmer)))
+
+
+File: modus-themes.info, Node: Make matching parenthesis more or less intense, Next: Make box buttons more or less gray, Prev: Make use of alternative styles for code syntax, Up: Stylistic variants using palette overrides
+
+5.2.11 Make matching parenthesis more or less intense
+-----------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this code block we show how to change the background of matching
+delimiters when ‘show-paren-mode’ is enabled. We also demonstrate how
+to enable underlines for those highlights.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Change the background to a shade of magenta
+ (setq modus-themes-common-palette-overrides
+ '((bg-paren-match bg-magenta-intense)))
+
+ ;; Enable underlines by applying a color to them
+ (setq modus-themes-common-palette-overrides
+ '((bg-paren-match bg-magenta-intense)
+ (underline-paren-match fg-main)))
+
+
+File: modus-themes.info, Node: Make box buttons more or less gray, Next: Make TODO and DONE more or less intense, Prev: Make matching parenthesis more or less intense, Up: Stylistic variants using palette overrides
+
+5.2.12 Make box buttons more or less gray
+-----------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+By default, the boxed buttons that appear in ‘M-x customize’ and related
+are distinct shades of gray. The following set of overrides removes the
+gray from the active buttons and amplifies it for the inactive ones.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ (setq modus-themes-common-palette-overrides
+ '((bg-button-active bg-main)
+ (fg-button-active fg-main)
+ (bg-button-inactive bg-inactive)
+ (fg-button-inactive "gray50")))
+
+
+File: modus-themes.info, Node: Make TODO and DONE more or less intense, Next: Make headings more or less colorful, Prev: Make box buttons more or less gray, Up: Stylistic variants using palette overrides
+
+5.2.13 Make TODO and DONE more or less intense
+----------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show how to affect just the ‘TODO’ and ‘DONE’ keywords that we
+encounter in Org buffers. The idea is to make those pop out more or to
+subdue them.
+
+ *note Make headings more or less colorful::.
+
+ *note Make inline code in prose use alternative styles::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Increase intensity
+ (setq modus-themes-common-palette-overrides
+ '((prose-done green-intense)
+ (prose-todo red-intense)))
+
+ ;; Tone down intensity
+ (setq modus-themes-common-palette-overrides
+ '((prose-done green-faint) ; OR replace `green-faint' with `olive'
+ (prose-todo red-faint))) ; OR replace `red-faint' with `rust'
+
+ ;; Keep TODO at its default (so no override for it), but make DONE
+ ;; gray.
+ (setq modus-themes-common-palette-overrides
+ '((prose-done fg-dim)))
+
+
+File: modus-themes.info, Node: Make headings more or less colorful, Next: Make Org agenda more or less colorful, Prev: Make TODO and DONE more or less intense, Up: Stylistic variants using palette overrides
+
+5.2.14 Make headings more or less colorful
+------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show how to alter the looks of headings, such as in Org mode.
+Using overrides here offers far more flexibility than what we could
+achieve with previous versions of the themes: the user can mix and match
+styles at will.
+
+ *note Make TODO and DONE more intense: Make TODO and DONE more or
+less intense.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Apply more colorful foreground to some headings (headings 0-8).
+ ;; Level 0 is for Org #+title and related.
+ (setq modus-themes-common-palette-overrides
+ '((fg-heading-1 blue-warmer)
+ (fg-heading-2 yellow-cooler)
+ (fg-heading-3 cyan-cooler)))
+
+ ;; Like the above, but with gradient colors
+ (setq modus-themes-common-palette-overrides
+ '((fg-heading-1 blue)
+ (fg-heading-2 cyan)
+ (fg-heading-3 green)))
+
+ ;; Add color to level 1 heading, but use the main foreground for
+ ;; others
+ (setq modus-themes-common-palette-overrides
+ '((fg-heading-1 blue)
+ (fg-heading-2 fg-main)
+ (fg-heading-3 fg-main)))
+
+ ;; Apply colorful foreground, background, and overline (headings 0-8)
+ (setq modus-themes-common-palette-overrides
+ '((fg-heading-1 blue-warmer)
+ (bg-heading-1 bg-blue-nuanced)
+ (overline-heading-1 blue)))
+
+ ;; Apply gray scale foreground, background, and overline (headings 0-8)
+ (setq modus-themes-common-palette-overrides
+ '((fg-heading-1 fg-main)
+ (bg-heading-1 bg-dim)
+ (overline-heading-1 border)))
+
+
+File: modus-themes.info, Node: Make Org agenda more or less colorful, Next: Make inline code in prose use alternative styles, Prev: Make headings more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.15 Make Org agenda more or less colorful
+--------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we provide three distinct code blocks. The first adds alternative
+and more varied colors to the Org agenda (and related). The second uses
+faint coloration. The third makes the agenda use various shades of
+blue. Mix and match at will, while also combining these styles with
+what we show in the other chapters with practical stylistic variants.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Make the Org agenda use alternative and varied colors.
+ (setq modus-themes-common-palette-overrides
+ '((date-common cyan) ; default value (for timestamps and more)
+ (date-deadline red-warmer)
+ (date-event magenta-warmer)
+ (date-holiday blue) ; for M-x calendar
+ (date-now yellow-warmer)
+ (date-scheduled magenta-cooler)
+ (date-weekday cyan-cooler)
+ (date-weekend blue-faint)))
+
+ An example with faint coloration:
+
+ ;; Make the Org agenda use faint colors.
+ (setq modus-themes-common-palette-overrides
+ '((date-common cyan-faint) ; for timestamps and more
+ (date-deadline red-faint)
+ (date-event fg-alt) ; default
+ (date-holiday magenta) ; default (for M-x calendar)
+ (date-now fg-main) ; default
+ (date-scheduled yellow-faint)
+ (date-weekday fg-dim)
+ (date-weekend fg-dim)))
+
+ A third example that makes the agenda more blue:
+
+ ;; Make the Org agenda use more blue instead of yellow and red.
+ (setq modus-themes-common-palette-overrides
+ '((date-common cyan) ; default value (for timestamps and more)
+ (date-deadline blue-cooler)
+ (date-event blue-faint)
+ (date-holiday blue) ; for M-x calendar
+ (date-now blue-faint)
+ (date-scheduled blue)
+ (date-weekday fg-main)
+ (date-weekend fg-dim)))
+
+ Yet another example that also affects ‘DONE’ and ‘TODO’ keywords:
+
+ ;; Change dates to a set of more subtle combinations. Deadlines are a
+ ;; shade of magenta, scheduled dates are a shade of green that
+ ;; complements that of the deadlines, weekday headings use the main
+ ;; foreground color while weekends are a shade of gray. The DONE
+ ;; keyword is a faint blue-gray while TODO is yellow.
+ (setq modus-themes-common-palette-overrides
+ '((date-deadline magenta-warmer)
+ (date-scheduled green-cooler)
+ (date-weekday fg-main)
+ (date-event fg-dim)
+ (date-now blue)
+ (prose-done fg-alt)
+ (prose-todo yellow)))
+
+
+File: modus-themes.info, Node: Make inline code in prose use alternative styles, Next: Make mail citations and headers more or less colorful, Prev: Make Org agenda more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.16 Make inline code in prose use alternative styles
+-------------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In the following code block we show how to affect constructs such as
+Org’s verbatim, code, and macro entries. We also provide mappings for
+tables, property drawers, tags, and code block delimiters, though we do
+not show every possible permutation.
+
+ *note Make TODO and DONE more or less intense::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; These are all the mappings at their default values for didactic
+ ;; purposes
+ (setq modus-themes-common-palette-overrides
+ '((prose-block fg-dim)
+ (prose-code green-cooler)
+ (prose-done green)
+ (prose-macro magenta-cooler)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-tag magenta-faint)
+ (prose-todo red)
+ (prose-verbatim magenta-warmer)))
+
+ ;; Make code block delimiters use a shade of red, tone down verbatim,
+ ;; code, and macro, and amplify the style of property drawers
+ (setq modus-themes-common-palette-overrides
+ '((prose-block red-faint)
+ (prose-code fg-dim)
+ (prose-macro magenta-faint)
+ (prose-metadata cyan)
+ (prose-metadata-value green-warmer)
+ (prose-verbatim fg-dim)))
+
+ ;; Like the above but with more color variety for the inline code
+ ;; elements
+ (setq modus-themes-common-palette-overrides
+ '((prose-block red-faint)
+ (prose-code blue-cooler)
+ (prose-macro yellow-warmer)
+ (prose-metadata cyan)
+ (prose-metadata-value green-warmer)
+ (prose-verbatim red-warmer)))
+
+
+File: modus-themes.info, Node: Make mail citations and headers more or less colorful, Next: Make the region preserve text colors plus other styles, Prev: Make inline code in prose use alternative styles, Up: Stylistic variants using palette overrides
+
+5.2.17 Make mail citations and headers more or less colorful
+------------------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this section we show how to change the coloration of email message
+headers and citations. Before we show the code, this is the anatomy of
+a message:
+
+ From: Protesilaos <info@protesilaos.com>
+ To: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+ Subject: Test subject
+ --- Headers above this line; message and citations below ---
+ This is some sample text
+
+ > > Older quote
+ > Newer quote
+
+ We thus have the following:
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Reduce the intensity of mail citations and headers
+ (setq modus-themes-common-palette-overrides
+ '((mail-cite-0 cyan-faint)
+ (mail-cite-1 yellow-faint)
+ (mail-cite-2 green-faint)
+ (mail-cite-3 red-faint)
+ (mail-part olive)
+ (mail-recipient indigo)
+ (mail-subject maroon)
+ (mail-other slate)))
+
+ ;; Make mail citations more intense; adjust the headers accordingly
+ (setq modus-themes-common-palette-overrides
+ '((mail-cite-0 blue)
+ (mail-cite-1 yellow)
+ (mail-cite-2 green)
+ (mail-cite-3 magenta)
+ (mail-part magenta-cooler)
+ (mail-recipient cyan)
+ (mail-subject red-warmer)
+ (mail-other cyan-cooler)))
+
+ ;; Make all citations faint and neutral; make most headers green but
+ ;; use red for the subject lie so that it stands out
+ (setq modus-themes-common-palette-overrides
+ '((mail-cite-0 fg-dim)
+ (mail-cite-1 fg-alt)
+ (mail-cite-2 fg-dim)
+ (mail-cite-3 fg-alt)
+ (mail-part yellow-cooler)
+ (mail-recipient green-cooler)
+ (mail-subject red-cooler)
+ (mail-other green)))
+
+
+File: modus-themes.info, Node: Make the region preserve text colors plus other styles, Next: Make mouse highlights more or less colorful, Prev: Make mail citations and headers more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.18 Make the region preserve text colors, plus other styles
+--------------------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show how to make the region respect the underlying text colors
+or how to make the background more/less intense while combining it with
+an appropriate foreground value.
+
+ *note Do not extend the region background::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; A background with no specific foreground (use foreground of
+ ;; underlying text)
+ (setq modus-themes-common-palette-overrides
+ '((bg-region bg-ochre) ; try to replace `bg-ochre' with `bg-lavender', `bg-sage'
+ (fg-region unspecified)))
+
+ ;; Subtle gray with a prominent blue foreground
+ (setq modus-themes-common-palette-overrides
+ '((bg-region bg-dim)
+ (fg-region blue-cooler)))
+
+ ;; Intense magenta background combined with the main foreground
+ (setq modus-themes-common-palette-overrides
+ '((bg-region bg-magenta-intense)
+ (fg-region fg-main)))
+
+
+File: modus-themes.info, Node: Make mouse highlights more or less colorful, Next: Make language underlines less colorful, Prev: Make the region preserve text colors plus other styles, Up: Stylistic variants using palette overrides
+
+5.2.19 Make mouse highlights more or less colorful
+--------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In the following code block we show how to affect the semantic color
+mapping that covers mouse hover effects and related highlights:
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Make the background an intense yellow
+ (setq modus-themes-common-palette-overrides
+ '((bg-hover bg-yellow-intense)))
+
+ ;; Make the background subtle green
+ (setq modus-themes-common-palette-overrides
+ '((bg-hover bg-green-subtle)))
+
+
+File: modus-themes.info, Node: Make language underlines less colorful, Next: Make line numbers use alternative styles, Prev: Make mouse highlights more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.20 Make language underlines less colorful
+---------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show how to affect the color of the underlines that are used by
+code linters and prose spell checkers.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Make the underlines less intense
+ (setq modus-themes-common-palette-overrides
+ '((underline-err red-faint)
+ (underline-warning yellow-faint)
+ (underline-note cyan-faint)))
+
+ ;; Change the color-coding of the underlines
+ (setq modus-themes-common-palette-overrides
+ '((underline-err yellow-intense)
+ (underline-warning magenta-intense)
+ (underline-note green-intense)))
+
+
+File: modus-themes.info, Node: Make line numbers use alternative styles, Next: Make diffs use only a foreground, Prev: Make language underlines less colorful, Up: Stylistic variants using palette overrides
+
+5.2.21 Make line numbers use alternative styles
+-----------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this section we show how to affect the ‘display-line-numbers-mode’.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Make line numbers less intense
+ (setq modus-themes-common-palette-overrides
+ '((fg-line-number-inactive "gray50")
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive unspecified)
+ (bg-line-number-active unspecified)))
+
+ ;; Like the above, but use a shade of red for the current line number
+ (setq modus-themes-common-palette-overrides
+ '((fg-line-number-inactive "gray50")
+ (fg-line-number-active red-cooler)
+ (bg-line-number-inactive unspecified)
+ (bg-line-number-active unspecified)))
+
+ ;; Make all numbers more intense, use a more pronounce gray
+ ;; background, and make the current line have a colored background
+ (setq modus-themes-common-palette-overrides
+ '((fg-line-number-inactive fg-main)
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive bg-inactive)
+ (bg-line-number-active bg-cyan-intense)))
+
+
+File: modus-themes.info, Node: Make diffs use only a foreground, Next: Make deuteranopia diffs red and blue instead of yellow and blue, Prev: Make line numbers use alternative styles, Up: Stylistic variants using palette overrides
+
+5.2.22 Make diffs use only a foreground
+---------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this section we show how to change diff buffers (e.g. in ‘magit’) to
+only use color-coded text without any added background. What we
+basically do is to disable the applicable backgrounds and then intensify
+the foregrounds. Since the deuteranopia-optimized themes do not use the
+red-green color coding, we make an extra set of adjustments for them by
+overriding their palettes directly instead of just using the “common”
+overrides.
+
+ ;; Diffs with only foreground colors. Word-wise ("refined") diffs
+ ;; have a gray background to draw attention to themselves.
+ (setq modus-themes-common-palette-overrides
+ '((bg-added unspecified)
+ (bg-added-faint unspecified)
+ (bg-added-refine bg-inactive)
+ (fg-added green)
+ (fg-added-intense green-intense)
+
+ (bg-changed unspecified)
+ (bg-changed-faint unspecified)
+ (bg-changed-refine bg-inactive)
+ (fg-changed yellow)
+ (fg-changed-intense yellow-intense)
+
+ (bg-removed unspecified)
+ (bg-removed-faint unspecified)
+ (bg-removed-refine bg-inactive)
+ (fg-removed red)
+ (fg-removed-intense red-intense)
+
+ (bg-diff-context unspecified)))
+
+ ;; Because deuteranopia cannot use the typical red-yellow-green
+ ;; combination, we need to arrange for a yellow-purple-blue sequence.
+ ;; Notice that the above covers the "common" overrides, so we do not
+ ;; need to reproduce the whole list of them.
+ (setq modus-operandi-deuteranopia-palette-overrides
+ '((fg-added blue)
+ (fg-added-intense blue-intense)
+
+ (fg-changed magenta-cooler)
+ (fg-changed-intense magenta-intense)
+
+ (fg-removed yellow-warmer)
+ (fg-removed-intense yellow-intense)))
+
+ (setq modus-vivendi-deuteranopia-palette-overrides
+ '((fg-added blue)
+ (fg-added-intense blue-intense)
+
+ (fg-changed magenta-cooler)
+ (fg-changed-intense magenta-intense)
+
+ (fg-removed yellow)
+ (fg-removed-intense yellow-intense)))
+
+
+File: modus-themes.info, Node: Make deuteranopia diffs red and blue instead of yellow and blue, Next: Make the themes look like what the maintainer uses, Prev: Make diffs use only a foreground, Up: Stylistic variants using palette overrides
+
+5.2.23 Make deuteranopia diffs red and blue instead of yellow and blue
+----------------------------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this section we show how to implement a red+blue color coding for
+diffs in the themes ‘modus-operandi-deuteranopia’ and
+‘modus-vivendi-deuteranopia’. As those themes are optimized for users
+with red-green color deficiency, they do not use the typical red+green
+color coding for diffs, defaulting instead to yellow+blue which are
+discernible. Users with deuteranomaly or, generally, those who like a
+different aesthetic, can use the following to make diffs use the
+red+yellow+blue color coding for removed, changed, and added lines
+respectively. This is achieved by overriding the “changed” and
+“removed” entries to use the colors of regular ‘modus-operandi’ and
+‘modus-vivendi’.
+
+ (setq modus-operandi-deuteranopia-palette-overrides
+ '((bg-changed "#ffdfa9")
+ (bg-changed-faint "#ffefbf")
+ (bg-changed-refine "#fac090")
+ (bg-changed-fringe "#d7c20a")
+ (fg-changed "#553d00")
+ (fg-changed-intense "#655000")
+
+ (bg-removed "#ffd8d5")
+ (bg-removed-faint "#ffe9e9")
+ (bg-removed-refine "#f3b5af")
+ (bg-removed-fringe "#d84a4f")
+ (fg-removed "#8f1313")
+ (fg-removed-intense "#aa2222")))
+
+ (setq modus-vivendi-deuteranopia-palette-overrides
+ '((bg-changed "#363300")
+ (bg-changed-faint "#2a1f00")
+ (bg-changed-refine "#4a4a00")
+ (bg-changed-fringe "#8a7a00")
+ (fg-changed "#efef80")
+ (fg-changed-intense "#c0b05f")
+
+ (bg-removed "#4f1119")
+ (bg-removed-faint "#380a0f")
+ (bg-removed-refine "#781a1f")
+ (bg-removed-fringe "#b81a1f")
+ (fg-removed "#ffbfbf")
+ (fg-removed-intense "#ff9095")))
+
+
+File: modus-themes.info, Node: Make the themes look like what the maintainer uses, Prev: Make deuteranopia diffs red and blue instead of yellow and blue, Up: Stylistic variants using palette overrides
+
+5.2.24 Make the themes look like what the maintainer uses
+---------------------------------------------------------
+
+Based on what we have learnt from the previous sections of this manual,
+here is what Protesilaos uses:
+
+ ;; Always reload the theme for changes to take effect!
+
+ (setq modus-themes-custom-auto-reload nil
+ modus-themes-to-toggle '(modus-operandi modus-vivendi)
+ modus-themes-mixed-fonts t
+ modus-themes-variable-pitch-ui nil
+ modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil
+ modus-themes-org-blocks nil
+ modus-themes-completions '((t . (extrabold)))
+ modus-themes-prompts nil
+ modus-themes-headings
+ '((agenda-structure . (variable-pitch light 2.2))
+ (agenda-date . (variable-pitch regular 1.3))
+ (t . (regular 1.15))))
+
+ (setq modus-themes-common-palette-overrides
+ '((cursor magenta-cooler)
+ ;; Make the fringe invisible.
+ (fringe unspecified)
+ ;; Make line numbers less intense and add a shade of cyan
+ ;; for the current line number.
+ (fg-line-number-inactive "gray50")
+ (fg-line-number-active cyan-cooler)
+ (bg-line-number-inactive unspecified)
+ (bg-line-number-active unspecified)
+ ;; Make the current line of `hl-line-mode' a fine shade of
+ ;; gray (though also see my `lin' package).
+ (bg-hl-line bg-dim)
+ ;; Make the region have a cyan-green background with no
+ ;; specific foreground (use foreground of underlying text).
+ ;; "bg-sage" refers to Salvia officinalis, else the common
+ ;; sage.
+ (bg-region bg-sage)
+ (fg-region unspecified)
+ ;; Make matching parentheses a shade of magenta. It
+ ;; complements the region nicely.
+ (bg-paren-match bg-magenta-intense)
+ ;; Make email citations faint and neutral, reducing the
+ ;; default four colors to two; make mail headers cyan-blue.
+ (mail-cite-0 fg-dim)
+ (mail-cite-1 blue-faint)
+ (mail-cite-2 fg-dim)
+ (mail-cite-3 blue-faint)
+ (mail-part cyan-warmer)
+ (mail-recipient blue-warmer)
+ (mail-subject magenta-cooler)
+ (mail-other cyan-warmer)
+ ;; Change dates to a set of more subtle combinations.
+ (date-deadline magenta-cooler)
+ (date-scheduled magenta)
+ (date-weekday fg-main)
+ (date-event fg-dim)
+ (date-now blue-faint)
+ ;; Make tags (Org) less colorful and tables look the same as
+ ;; the default foreground.
+ (prose-done cyan-cooler)
+ (prose-tag fg-dim)
+ (prose-table fg-main)
+ ;; Make headings less colorful (though I never use deeply
+ ;; nested headings).
+ (fg-heading-2 blue-faint)
+ (fg-heading-3 magenta-faint)
+ (fg-heading-4 blue-faint)
+ (fg-heading-5 magenta-faint)
+ (fg-heading-6 blue-faint)
+ (fg-heading-7 magenta-faint)
+ (fg-heading-8 blue-faint)
+ ;; Make the active mode line a fine shade of lavender
+ ;; (purple) and tone down the gray of the inactive mode
+ ;; lines.
+ (bg-mode-line-active bg-lavender)
+ (border-mode-line-active bg-lavender)
+
+ (bg-mode-line-inactive bg-dim)
+ (border-mode-line-inactive bg-inactive)
+ ;; Make the prompts a shade of magenta, to fit in nicely with
+ ;; the overall blue-cyan-purple style of the other overrides.
+ ;; Add a nuanced background as well.
+ (bg-prompt bg-magenta-nuanced)
+ (fg-prompt magenta-cooler)
+ ;; Tweak some more constructs for stylistic constistency.
+ (name blue-warmer)
+ (identifier magenta-faint)
+ (keybind magenta-cooler)
+ (accent-0 magenta-cooler)
+ (accent-1 cyan-cooler)
+ (accent-2 blue-warmer)
+ (accent-3 red-cooler)))
+
+ ;; Make the active mode line have a pseudo 3D effect (this assumes
+ ;; you are using the default mode line and not an extra package).
+ (custom-set-faces
+ '(mode-line ((t :box (:style released-button)))))
+
+
+File: modus-themes.info, Node: More accurate colors in terminal emulators, Next: Range of color with terminal emulators, Prev: Stylistic variants using palette overrides, Up: Advanced customization
+
+5.3 More accurate colors in terminal emulators
+==============================================
+
+[ This is based on partial information. Please help verify and/or
+expand these findings. ]
+
+ The graphical version of Emacs can reproduce color values accurately.
+Whereas things get more tricky when Emacs is used in a terminal
+emulator, because the terminals’ own capabilities determine the number
+of colors that may be displayed: the Modus themes don’t look as good in
+that case.
+
+ There is, however, a way to instruct supported terminal emulators to
+use more accurate colors. In a shell prompt type ‘toe -a | grep direct’
+to get a list of relevant terminfo entries. There should be items such
+as ‘xterm-direct’, ‘alacritty-direct’, ‘kitty-direct’. Once you find
+the one that corresponds to your terminal, call Emacs with an
+environment variable like ‘TERM=xterm-direct’. Example that can be
+adapted to shell aliases:
+
+ TERM=xterm-direct emacsclient -nw
+
+ Another example that can be bound to a key:
+
+ TERM=xterm-direct uxterm -e emacsclient -nw
+
+
+File: modus-themes.info, Node: Range of color with terminal emulators, Next: Preview theme colors, Prev: More accurate colors in terminal emulators, Up: Advanced customization
+
+5.4 Range of color with terminal emulators
+==========================================
+
+[ This is based on partial information. Please help verify and/or
+expand these findings. ]
+
+ When Emacs runs in a non-windowed session its color reproduction
+capacity is framed or determined by the underlying terminal emulator
+(*note More accurate colors in terminal emulators::). Emacs cannot
+produce a color that lies outside the range of what the terminal’s color
+palette renders possible.
+
+ This is immediately noticeable when the terminal’s first 16 codes do
+not include a pure black value for the ‘termcol0’ entry and a pure white
+for ‘termcol15’. Emacs cannot set the correct background (white for
+‘modus-operandi’; black for ‘modus-vivendi’) or foreground (inverse of
+the background). It thus falls back to the closest approximation, which
+seldom is appropriate for the purposes of the Modus themes.
+
+ In such a case, the user is expected to update their terminal’s color
+palette such as by adapting these resources (*note Preview theme
+colors::):
+
+ ! Theme: modus-operandi
+ ! Description: XTerm port of modus-operandi (Modus themes for GNU Emacs)
+ ! Author: Protesilaos Stavrou, <https://protesilaos.com>
+ xterm*background: #ffffff
+ xterm*foreground: #000000
+ xterm*color0: #000000
+ xterm*color1: #a60000
+ xterm*color2: #005e00
+ xterm*color3: #813e00
+ xterm*color4: #0031a9
+ xterm*color5: #721045
+ xterm*color6: #00538b
+ xterm*color7: #bfbfbf
+ xterm*color8: #595959
+ xterm*color9: #972500
+ xterm*color10: #315b00
+ xterm*color11: #70480f
+ xterm*color12: #2544bb
+ xterm*color13: #5317ac
+ xterm*color14: #005a5f
+ xterm*color15: #ffffff
+
+ ! Theme: modus-vivendi
+ ! Description: XTerm port of modus-vivendi (Modus themes for GNU Emacs)
+ ! Author: Protesilaos Stavrou, <https://protesilaos.com>
+ xterm*background: #000000
+ xterm*foreground: #ffffff
+ xterm*color0: #000000
+ xterm*color1: #ff8059
+ xterm*color2: #44bc44
+ xterm*color3: #d0bc00
+ xterm*color4: #2fafff
+ xterm*color5: #feacd0
+ xterm*color6: #00d3d0
+ xterm*color7: #bfbfbf
+ xterm*color8: #595959
+ xterm*color9: #ef8b50
+ xterm*color10: #70b900
+ xterm*color11: #c0c530
+ xterm*color12: #79a8ff
+ xterm*color13: #b6a0ff
+ xterm*color14: #6ae4b9
+ xterm*color15: #ffffff
+
+
+File: modus-themes.info, Node: Preview theme colors, Next: Per-theme customization settings, Prev: Range of color with terminal emulators, Up: Advanced customization
+
+5.5 Preview theme colors
+========================
+
+The command ‘modus-themes-list-colors’ uses minibuffer completion to
+select an item from the Modus themes and then produces a buffer with
+previews of its color palette entries. The buffer has a naming scheme
+that reflects the given choice, like ‘modus-operandi-list-colors’ for
+the ‘modus-operandi’ theme.
+
+ The command ‘modus-themes-list-colors-current’ skips the minibuffer
+selection process and just produces a preview for the current Modus
+theme.
+
+ When called with a prefix argument (‘C-u’ with the default key
+bindings), these commands will show a preview of the palette’s semantic
+color mappings instead of the named colors. In this context, “named
+colors” are entries that associate a symbol to a string color value,
+such as ‘(blue-warmer "#354fcf")’. Whereas “semantic color mappings”
+associate a named color to a symbol, like ‘(string blue-warmer)’, thus
+making the theme render all string constructs in the ‘blue-warmer’ color
+value (*note Option for palette overrides: Palette overrides.).
+
+ Aliases for those commands are ‘modus-themes-preview-colors’ and
+‘modus-themes-preview-colors-current’.
+
+ Each row shows a foreground and background coloration using the
+underlying value it references. For example a line with ‘#a60000’ (a
+shade of red) will show red text followed by a stripe with that same
+color as a backdrop.
+
+ The name of the buffer describes the given Modus theme and what the
+contents are, such as ‘*modus-operandi-list-colors*’ for named colors
+and ‘=*modus-operandi-list-mappings*’ for the semantic color mappings.
+
+
+File: modus-themes.info, Node: Per-theme customization settings, Next: Get a single color from the palette, Prev: Preview theme colors, Up: Advanced customization
+
+5.6 Per-theme customization settings
+====================================
+
+If you prefer to maintain different customization options between the
+two themes, it is best you write your own functions that first set those
+options and then load the relevant theme. The following code does
+exactly that by simply differentiating the two themes on the choice of
+bold constructs in code syntax (enabled for one, disabled for the
+other).
+
+ (defun my-demo-modus-operandi ()
+ (interactive)
+ (setq modus-themes-bold-constructs t) ; ENABLE bold
+ (modus-themes-load-theme 'modus-operandi))
+
+ (defun my-demo-modus-vivendi ()
+ (interactive)
+ (setq modus-themes-bold-constructs nil) ; DISABLE bold
+ (modus-themes-load-theme 'modus-vivendi))
+
+ (defun my-demo-modus-themes-toggle ()
+ (if (eq (car custom-enabled-themes) 'modus-operandi)
+ (my-demo-modus-vivendi)
+ (my-demo-modus-operandi)))
+
+ Then assign ‘my-demo-modus-themes-toggle’ to a key instead of the
+equivalent the themes provide.
+
+ For a more elaborate design, it is better to inspect the source code
+of ‘modus-themes-toggle’ and relevant functions.
+
+
+File: modus-themes.info, Node: Get a single color from the palette, Next: Use theme colors in code with modus-themes-with-colors, Prev: Per-theme customization settings, Up: Advanced customization
+
+5.7 Get a single color from the palette
+=======================================
+
+*note Use theme colors in code with modus-themes-with-colors::.
+
+ The fuction ‘modus-themes-get-color-value’ can be called from Lisp to
+return the value of a color from the active Modus theme palette. It
+takea a ‘COLOR’ argument and an optional ‘OVERRIDES’.
+
+ ‘COLOR’ is a symbol that represents a named color entry in the
+palette.
+
+ *note Preview theme colors::.
+
+ If the value is the name of another color entry in the palette (so a
+mapping), this function recurs until it finds the underlying color
+value.
+
+ With an optional ‘OVERRIDES’ argument as a non-‘nil’ value, it
+accounts for palette overrides. Else it reads only the default palette.
+
+ *note Option for palette overrides: Palette overrides.
+
+ With optional ‘THEME’ as a symbol among ‘modus-themes-items’ (alias
+‘modus-themes-collection’), use the palette of that item. Else use the
+current Modus theme.
+
+ If ‘COLOR’ is not present in the palette, this function returns the
+‘unspecified’ symbol, which is safe when used as a face attribute’s
+value.
+
+ An example with ‘modus-operandi’ to show how this function behaves
+with/without overrides and when recursive mappings are introduced.
+
+ ;; 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 modus-themes-common-palette-overrides
+ '((cursor red)
+ (fg-mode-line-active cursor)
+ (border-mode-line-active fg-mode-line-active)))
+
+ ;; Ignore the overrides and get the original value.
+ (modus-themes-get-color-value 'border-mode-line-active)
+ ;; => "#5a5a5a"
+
+ ;; Read from the overrides and deal with any recursion to find the
+ ;; underlying value.
+ (modus-themes-get-color-value 'border-mode-line-active :overrides)
+ ;; => "#a60000"
+
+
+File: modus-themes.info, Node: Use theme colors in code with modus-themes-with-colors, Next: Do not extend the region background, Prev: Get a single color from the palette, Up: Advanced customization
+
+5.8 Use theme colors in code with modus-themes-with-colors
+==========================================================
+
+*note Get a single color from the palette::.
+
+ Note that users most probably do not need the following. Just rely
+on the comprehensive overrides we provide (*note Option for palette
+overrides: Palette overrides.).
+
+ Advanced users may want to apply colors from the palette of the
+active Modus theme in their custom code. The ‘modus-themes-with-colors’
+macro supplies those to any form called inside of it. For example:
+
+ (modus-themes-with-colors
+ (list blue-warmer magenta-cooler fg-added warning variable fg-heading-4))
+ ;; => ("#354fcf" "#531ab6" "#005000" "#884900" "#005e8b" "#721045")
+
+ The above return value is for ‘modus-operandi’ when that is the
+active theme. Switching to another theme and evaluating this code anew
+will give us the relevant results for that theme (remember that since
+version 4, the Modus themes consist of six items (*note Overview::)).
+The same with ‘modus-vivendi’ as the active theme:
+
+ (modus-themes-with-colors
+ (list blue-warmer magenta-cooler fg-added warning variable fg-heading-4))
+ ;; => ("#79a8ff" "#b6a0ff" "#a0e0a0" "#fec43f" "#00d3d0" "#feacd0")
+
+ The ‘modus-themes-with-colors’ has access to the whole palette of the
+active theme, meaning that it can instantiate both (i) named colors like
+‘blue-warmer’ and (ii) semantic color mappings like ‘warning’. We
+provide commands to inspect those (*note Preview theme colors::).
+
+ Others sections in this manual show how to use the aforementioned
+macro (*note Advanced customization::).
+
+ Because the ‘modus-themes-with-colors’ will most likely be used to
+customize faces, note that any function that calls it must be run at
+startup after the theme loads. The same function must also be assigned
+to the ‘modus-themes-after-load-theme-hook’ for its effects to persist
+and be updated when switching between Modus themes (e.g. to update the
+exact value of ‘blue-warmer’ when toggling between ‘modus-operandi’ to
+‘modus-vivendi’.
+
+
+File: modus-themes.info, Node: Do not extend the region background, Next: Add padding to mode line, Prev: Use theme colors in code with modus-themes-with-colors, Up: Advanced customization
+
+5.9 Do not extend the region background
+=======================================
+
+By the default, the background of the ‘region’ face extends from the end
+of the line to the edge of the window. To limit it to the end of the
+line, we need to override the face’s ‘:extend’ attribute. Adding this
+to the Emacs configuration file will suffice:
+
+ ;; Do not extend `region' background past the end of the line.
+ (custom-set-faces
+ '(region ((t :extend nil))))
+
+ *note Make the region preserve text colors, plus other styles: Make
+the region preserve text colors plus other styles.
+
+
+File: modus-themes.info, Node: Add padding to mode line, Next: Remap face with local value, Prev: Do not extend the region background, Up: Advanced customization
+
+5.10 Add padding to mode line
+=============================
+
+Emacs faces do not have a concept of “padding” for the space between the
+text and its box boundaries. We can approximate the effect by adding a
+‘:box’ attribute, making its border several pixels thick, and using the
+mode line’s background color for it. This way the thick border will not
+stand out and will appear as a continuation of the mode line.
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+ (defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Add "padding" to the mode lines
+ `(mode-line ((,c :box (:line-width 10 :color ,bg-mode-line-active))))
+ `(mode-line-inactive ((,c :box (:line-width 10 :color ,bg-mode-line-inactive)))))))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+
+ The above has the effect of removing the border around the mode
+lines. In older versions of the themes, we provided the option for a
+padded mode line which could also have borders around it. Those were
+not real border, however, but an underline and an overline. Adjusting
+the above:
+
+ (defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Add "padding" to the mode lines
+ `(mode-line ((,c :underline ,border-mode-line-active
+ :overline ,border-mode-line-active
+ :box (:line-width 10 :color ,bg-mode-line-active))))
+ `(mode-line-inactive ((,c :underline ,border-mode-line-inactive
+ :overline ,border-mode-line-inactive
+ :box (:line-width 10 :color ,bg-mode-line-inactive)))))))
+
+ ;; ESSENTIAL to make the underline move to the bottom of the box:
+ (setq x-underline-at-descent-line t)
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+
+ The reason we no longer provide this option is because it depends on
+a non-‘nil’ value for ‘x-underline-at-descent-line’. That variable
+affects ALL underlines, including those of links. The effect is
+intrusive and looks awkard in prose.
+
+ As such, the Modus themes no longer provide that option but instead
+offer this piece of documentation to make the user fully aware of the
+state of affairs.
+
+
+File: modus-themes.info, Node: Remap face with local value, Next: Font configurations for Org and others, Prev: Add padding to mode line, Up: Advanced customization
+
+5.11 Remap face with local value
+================================
+
+There are cases where we need to change the buffer-local attributes of a
+face. This might be because we have our own minor mode that re-uses a
+face for a particular purpose, such as a line selection tool that
+activates ‘hl-line-mode’, but we wish to keep it distinct from other
+buffers. This is where ‘face-remap-add-relative’ can be applied and may
+be combined with ‘modus-themes-with-colors’ to deliver consistent
+results.
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+ In this example we will write a simple interactive function that
+adjusts the background color of the ‘region’ face. This is the sample
+code:
+
+ (defvar my-rainbow-region-colors
+ (modus-themes-with-colors
+ `((red . ,bg-red-subtle)
+ (green . ,bg-green-subtle)
+ (yellow . ,bg-yellow-subtle)
+ (blue . ,bg-blue-subtle)
+ (magenta . ,bg-magenta-subtle)
+ (cyan . ,bg-cyan-subtle)))
+ "Sample list of color values for `my-rainbow-region'.")
+
+ (defun my-rainbow-region (color)
+ "Remap buffer-local attribute of `region' using COLOR."
+ (interactive
+ (list
+ (completing-read "Pick a color: " my-rainbow-region-colors)))
+ (face-remap-add-relative
+ 'region
+ `( :background ,(alist-get (intern color) my-rainbow-region-colors)
+ :foreground ,(face-attribute 'default :foreground))))
+
+ When ‘my-rainbow-region’ is called interactively, it prompts for a
+color to use. The list of candidates is drawn from the car of each
+association in ‘my-rainbow-region-colors’ (so “red”, “green”, etc.).
+
+ To extend this principle, we may write wrapper functions that pass a
+color directly. Those can be useful in tandem with hooks. Consider
+this example:
+
+ (defun my-rainbow-region-magenta ()
+ (my-rainbow-region 'magenta))
+
+ (add-hook 'diff-mode-hook #'my-rainbow-region-magenta)
+
+ Whenever we enter a ‘diff-mode’ buffer, we now get a magenta-colored
+region.
+
+ Perhaps you may wish to generalize those findings in to a set of
+functions that also accept an arbitrary face. We shall leave the
+experimentation up to you.
+
+
+File: modus-themes.info, Node: Font configurations for Org and others, Next: Configure bold and italic faces, Prev: Remap face with local value, Up: Advanced customization
+
+5.12 Font configurations for Org and others
+===========================================
+
+The themes are designed to optionally cope well with mixed font
+configurations. This mostly concerns ‘org-mode’ and ‘markdown-mode’,
+though expect to find it elsewhere like in ‘Info-mode’.
+
+ *note Option for font mixing: Mixed fonts.
+
+ In practice it means that the user can safely opt for a more
+prose-friendly proportionately spaced typeface as their default, while
+spacing-sensitive elements like tables and inline code always use a
+monospaced font, by inheriting from the ‘fixed-pitch’ face.
+
+ Users can try the built-in ‘M-x variable-pitch-mode’ to see the
+effect in action.
+
+ To make everything use your desired font families, you need to
+configure the ‘variable-pitch’ (proportional spacing) and ‘fixed-pitch’
+(monospaced) faces respectively. It may also be convenient to set your
+main typeface by configuring the ‘default’ face the same way.
+
+ [ The ‘fontaine’ package on GNU ELPA (by Protesilaos) is designed to
+handle this case. ]
+
+ Put something like this in your initialization file (also consider
+reading the doc string of ‘set-face-attribute’):
+
+ ;; Main typeface
+ (set-face-attribute 'default nil :family "DejaVu Sans Mono" :height 110)
+
+ ;; Proportionately spaced typeface
+ (set-face-attribute 'variable-pitch nil :family "DejaVu Serif" :height 1.0)
+
+ ;; Monospaced typeface
+ (set-face-attribute 'fixed-pitch nil :family "DejaVu Sans Mono" :height 1.5)
+
+ Or employ the ‘face-attribute’ function to read an existing value,
+such as if you want to make ‘fixed-pitch’ use the font family of the
+‘default’ face:
+
+ (set-face-attribute 'fixed-pitch nil :family (face-attribute 'default :family))
+
+ The next section shows how to make those work in a more elaborate
+setup that is robust to changes between the Modus themes.
+
+ *note Configure bold and italic faces::.
+
+ Note the differences in the ‘:height’ property. The ‘default’ face
+must specify an absolute value, which is the point size × 10. So if you
+want to use a font at point size ‘11’, you set the height to ‘110’.(1)
+Whereas every other face must either not specify a height or have a
+value that is relative to the default, represented as a floating point.
+If you use an integer, then that means an absolute height. This is of
+paramount importance: it ensures that all fonts can scale gracefully
+when using something like the ‘text-scale-adjust’ command which only
+operates on the base font size (i.e. the ‘default’ face’s absolute
+height).
+
+ *note Note for EWW and Elfeed fonts: Note on SHR fonts.
+
+ ---------- Footnotes ----------
+
+ (1) ‘:height’ values do not need to be rounded to multiples of ten:
+the likes of ‘115’ are perfectly valid—some typefaces will change to
+account for those finer increments.
+
+
+File: modus-themes.info, Node: Configure bold and italic faces, Next: Custom Org todo keyword and priority faces, Prev: Font configurations for Org and others, Up: Advanced customization
+
+5.13 Configure bold and italic faces
+====================================
+
+The Modus themes do not hardcode a ‘:weight’ or ‘:slant’ attribute in
+the thousands of faces they cover. Instead, they configure the generic
+faces called ‘bold’ and ‘italic’ to use the appropriate styles and then
+instruct all relevant faces that require emphasis to inherit from them.
+
+ This practically means that users can change the particularities of
+what it means for a construct to be bold/italic, by tweaking the ‘bold’
+and ‘italic’ faces. Cases where that can be useful include:
+
+ • The default typeface does not have a variant with slanted glyphs
+ (e.g. Fira Mono/Code as of this writing on 2021-07-07), so the
+ user wants to add another family for the italics, such as Hack.
+
+ • The typeface of choice provides a multitude of weights and the user
+ prefers the light one by default. To prevent the bold weight from
+ being too heavy compared to the light one, they opt to make ‘bold’
+ use a semibold weight.
+
+ • The typeface distinguishes between oblique and italic forms by
+ providing different font variants (the former are just slanted
+ versions of the upright forms, while the latter have distinguishing
+ features as well). In this case, the user wants to specify the
+ font that applies to the ‘italic’ face.
+
+ To achieve those effects, one must first be sure that the fonts they
+use have support for those features. It then is a matter of following
+the instructions for all typeface tweaks.
+
+ *note Font configurations for Org and others::.
+
+ In this example, we set the default font family to Fira Code, while
+we choose to render italics in the Hack typeface (obviously you need to
+pick fonts that work well together):
+
+ (set-face-attribute 'default nil :family "Fira Code" :height 110)
+ (set-face-attribute 'italic nil :family "Hack")
+
+ And here we play with different weights, using Source Code Pro:
+
+ (set-face-attribute 'default nil :family "Source Code Pro" :height 110 :weight 'light)
+ (set-face-attribute 'bold nil :weight 'semibold)
+
+ To reset the font family, one can use this:
+
+ (set-face-attribute 'italic nil :family 'unspecified)
+
+ To ensure that the effects persist after switching between the Modus
+themes (such as with ‘M-x modus-themes-toggle’), the user needs to write
+their configurations to a function and pass it to the
+‘modus-themes-after-load-theme-hook’. This is necessary because themes
+set the styles of faces upon activation, overriding prior values where
+conflicts occur between the previous and the current states (otherwise
+changing themes would not be possible).
+
+ *note A theme-agnostic hook for theme loading::.
+
+ This is a minimal setup to preserve font configurations across theme
+load phases. For a more permanent setup, it is better to rely on the
+‘custom-set-faces’ function: ‘set-face-attribute’ works just fine,
+though it probably is better suited for quick previews or for smaller
+scale operations (‘custom-set-faces’ follows the format used in the
+source code of the themes, which can make it easier to redefine faces in
+bulk).
+
+ ;; our generic function
+ (defun my-modes-themes-bold-italic-faces ()
+ (set-face-attribute 'default nil :family "Source Code Pro" :height 110)
+ (set-face-attribute 'bold nil :weight 'semibold))
+
+ ;; or use this if you configure a lot of face and attributes and
+ ;; especially if you plan to use `modus-themes-with-colors', as shown
+ ;; elsewhere in the manual
+ (defun my-modes-themes-bold-italic-faces ()
+ (custom-set-faces
+ '(default ((t :family "Source Code Pro" :height 110)))
+ '(bold ((t :weight semibold)))))
+
+ ;; and here is the hook
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modes-themes-bold-italic-faces)
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+
+File: modus-themes.info, Node: Custom Org todo keyword and priority faces, Next: Custom Org emphasis faces, Prev: Configure bold and italic faces, Up: Advanced customization
+
+5.14 Custom Org todo keyword and priority faces
+===============================================
+
+Users of ‘org-mode’ have the option to configure various keywords and
+priority cookies to better match their workflow. User options are
+‘org-todo-keyword-faces’ and ‘org-priority-faces’.
+
+ As those are meant to be custom faces, it is futile to have the
+themes guess what each user wants to use, which keywords to target, and
+so on. Instead, we can provide guidelines on how to customize things to
+one’s liking with the intent of retaining the overall aesthetic of the
+themes.
+
+ Please bear in mind that the end result of those is not controlled by
+the active Modus theme but by how Org maps faces to its constructs.
+Editing those while ‘org-mode’ is active requires re-initialization of
+the mode with ‘M-x org-mode-restart’ for changes to take effect.
+
+ Let us assume you wish to visually differentiate your keywords. You
+have something like this:
+
+ (setq org-todo-keywords
+ '((sequence "TODO(t)" "|" "DONE(D)" "CANCEL(C)")
+ (sequence "MEET(m)" "|" "MET(M)")
+ (sequence "STUDY(s)" "|" "STUDIED(S)")
+ (sequence "WRITE(w)" "|" "WROTE(W)")))
+
+ You could then use a variant of the following to inherit from a face
+that uses the styles you want and also to preserve the attributes
+applied by the ‘org-todo’ face (in case there is a difference between
+the two):
+
+ (setq org-todo-keyword-faces
+ '(("MEET" . (:inherit (bold org-todo)))
+ ("STUDY" . (:inherit (warning org-todo)))
+ ("WRITE" . (:inherit (shadow org-todo)))))
+
+ This will refashion the keywords you specify, while letting the other
+items in ‘org-todo-keywords’ use their original styles, which are
+defined in the ‘org-todo’ and ‘org-done’ faces.
+
+ If you want back the defaults, try specifying just the ‘org-todo’
+face:
+
+ (setq org-todo-keyword-faces
+ '(("MEET" . org-todo)
+ ("STUDY" . org-todo)
+ ("WRITE" . org-todo)))
+
+ Or set ‘org-todo-keyword-faces’ to ‘nil’.
+
+ When you inherit from multiple faces, you need to do it the way it is
+shown further above. The order is significant: the first entry is
+applied on top of the second, overriding any attributes that are
+explicitly set for both of them: any attribute that is not specified is
+not overridden, so, for example, if ‘org-todo’ has a background and a
+foreground, while ‘font-lock-type-face’ only has a foreground, the
+merged face will include the background of the former and the foreground
+of the latter. If you do not want to blend multiple faces, you only
+specify one by name without parentheses or an ‘:inherit’ keyword. A
+pattern of ‘keyword . face’ will suffice.
+
+ Both approaches can be used simultaneously, as illustrated in this
+configuration of the priority cookies:
+
+ (setq org-priority-faces
+ '((?A . (:inherit (bold org-priority)))
+ (?B . org-priority)
+ (?C . (:inherit (shadow org-priority)))))
+
+ To find all the faces that are loaded in your current Emacs session,
+use ‘M-x list-faces-display’. Try ‘M-x describe-variable’ as well and
+then specify the name of each of those Org variables demonstrated above.
+Their documentation strings will offer you further guidance.
+
+ Recall that the themes let you retrieve a color from their palette.
+Do it if you plan to control face attributes.
+
+ *note Check color combinations: Measure color contrast.
+
+
+File: modus-themes.info, Node: Custom Org emphasis faces, Next: Update Org block delimiter fontification, Prev: Custom Org todo keyword and priority faces, Up: Advanced customization
+
+5.15 Custom Org emphasis faces
+==============================
+
+Org provides the user option ‘org-emphasis-alist’ which associates a
+character with a face, list of faces, or face attributes. The default
+specification of that variable looks like this:
+
+ (setq org-emphasis-alist
+ '(("*" bold)
+ ("/" italic)
+ ("_" underline)
+ ("=" org-verbatim verbatim)
+ ("~" org-code verbatim)
+ ("+" (:strike-through t))))
+
+ With the exception of ‘org-verbatim’ and ‘org-code’ faces, everything
+else uses the corresponding type of emphasis: a bold typographic weight,
+or italicised, underlined, and struck through text.
+
+ The best way for users to add some extra attributes, such as a
+foreground color, is to define their own faces and assign them to the
+given emphasis marker/character.
+
+ This is a custom face that extends the standard ‘bold’ face with a
+red foreground value (so it colorises the text in addition to the bold
+weight):
+
+ (defface my-org-emphasis-bold
+ '((default :inherit bold)
+ (((class color) (min-colors 88) (background light))
+ :foreground "#a60000")
+ (((class color) (min-colors 88) (background dark))
+ :foreground "#ff8059"))
+ "My bold emphasis for Org.")
+
+ This face definition reads as follows:
+
+ • Always inherit the ‘bold’ face (*note Configure bold and italic
+ faces::).
+ • For versions of Emacs that support at least 88 colors (graphical
+ Emacs, for example) and use a light background, apply the ‘#a60000’
+ value.
+ • For the same kind of Emacs that has a dark background use the
+ ‘#ff8059’ color instead.
+
+ Same principle for how to extend ‘italic’ and ‘underline’ with, for
+example, green and yellow hues, respectively:
+
+ (defface my-org-emphasis-italic
+ '((default :inherit italic)
+ (((class color) (min-colors 88) (background light))
+ :foreground "#005e00")
+ (((class color) (min-colors 88) (background dark))
+ :foreground "#44bc44"))
+ "My italic emphasis for Org.")
+
+ (defface my-org-emphasis-underline
+ '((default :inherit underline)
+ (((class color) (min-colors 88) (background light))
+ :foreground "#813e00")
+ (((class color) (min-colors 88) (background dark))
+ :foreground "#d0bc00"))
+ "My underline emphasis for Org.")
+
+ In the case of a strike-through effect, we have no generic face to
+inherit from, so we can write it as follows to also change the
+foreground to a more subtle gray:
+
+ (defface my-org-emphasis-strike-through
+ '((default :strike-through t)
+ (((class color) (min-colors 88) (background light))
+ :foreground "#505050")
+ (((class color) (min-colors 88) (background dark))
+ :foreground "#a8a8a8"))
+ "My strike-through emphasis for Org.")
+
+ Or we can just change the color of the line that strikes through the
+text to, for example, a shade of red:
+
+ (defface my-org-emphasis-strike-through
+ '((((class color) (min-colors 88) (background light))
+ :strike-through "#972500")
+ (((class color) (min-colors 88) (background dark))
+ :strike-through "#ef8b50"))
+ "My strike-through emphasis for Org.")
+
+ It is possible to combine those effects:
+
+ (defface my-org-emphasis-strike-through
+ '((((class color) (min-colors 88) (background light))
+ :strike-through "#972500" :foreground "#505050")
+ (((class color) (min-colors 88) (background dark))
+ :strike-through "#ef8b50" :foreground "#a8a8a8"))
+ "My strike-through emphasis for Org.")
+
+ One may inspect the variables ‘modus-themes-operandi-colors’ and
+‘modus-themes-vivendi-colors’ for possible color values. Or call the
+command ‘modus-themes-list-colors’ to show a buffer that previews each
+entry in the palette.
+
+ *note Visualize the active Modus theme’s palette: Preview theme
+colors.
+
+ Once we have defined the faces we need, we must update the
+‘org-emphasis-alist’. Given that ‘org-verbatim’ and ‘org-code’ are
+already styled by the themes, it probably is best not to edit them:
+
+ (setq org-emphasis-alist
+ '(("*" my-org-emphasis-bold)
+ ("/" my-org-emphasis-italic)
+ ("_" my-org-emphasis-underline)
+ ("=" org-verbatim verbatim)
+ ("~" org-code verbatim)
+ ("+" my-org-emphasis-strike-through)))
+
+ That’s it! For changes to take effect in already visited Org files,
+invoke ‘M-x org-mode-restart’.
+
+
+File: modus-themes.info, Node: Update Org block delimiter fontification, Next: Measure color contrast, Prev: Custom Org emphasis faces, Up: Advanced customization
+
+5.16 Update Org block delimiter fontification
+=============================================
+
+As noted in the section about ‘modus-themes-org-blocks’, Org contains a
+variable that determines whether the block’s begin and end lines are
+extended to the edge of the window (*note Option for org-mode block
+styles: Org mode blocks.). The variable is
+‘org-fontify-whole-block-delimiter-line’.
+
+ Users who change the style of Org blocks from time to time may prefer
+to automatically update delimiter line fontification, such as with the
+following setup:
+
+ (defun my-modus-themes-org-fontify-block-delimiter-lines ()
+ "Match `org-fontify-whole-block-delimiter-line' to theme style.
+ Run this function at the post theme load phase, such as with the
+ `modus-themes-after-load-theme-hook'."
+ (if (eq modus-themes-org-blocks 'gray-background)
+ (setq org-fontify-whole-block-delimiter-line t)
+ (setq org-fontify-whole-block-delimiter-line nil)))
+
+ (add-hook 'modus-themes-after-load-theme-hook
+ #'my-modus-themes-org-fontify-block-delimiter-lines)
+
+ Then ‘M-x org-mode-restart’ for changes to take effect, though manual
+intervention can be circumvented by tweaking the function thus:
+
+ (defun my-modus-themes-org-fontify-block-delimiter-lines ()
+ "Match `org-fontify-whole-block-delimiter-line' to theme style.
+ Run this function at the post theme load phase, such as with the
+ `modus-themes-after-load-theme-hook'."
+ (if (eq modus-themes-org-blocks 'gray-background)
+ (setq org-fontify-whole-block-delimiter-line t)
+ (setq org-fontify-whole-block-delimiter-line nil))
+ (when (derived-mode-p 'org-mode)
+ (font-lock-flush)))
+
+
+File: modus-themes.info, Node: Measure color contrast, Next: Load theme depending on time of day, Prev: Update Org block delimiter fontification, Up: Advanced customization
+
+5.17 Measure color contrast
+===========================
+
+The themes provide the functions ‘modus-themes-wcag-formula’ and
+‘modus-themes-contrast’. The former is a direct implementation of the
+WCAG formula: <https://www.w3.org/TR/WCAG20-TECHS/G18.html>. It
+calculates the relative luminance of a color value that is expressed in
+hexadecimal RGB notation. While the latter function is just a
+convenient wrapper for comparing the relative luminance between two
+colors.
+
+ In practice, one needs to work only with ‘modus-themes-contrast’. It
+accepts two color values and returns their contrast ratio. Values range
+from 1 to 21 (lowest to highest). The themes are designed to always be
+equal or higher than 7 for each combination of background and foreground
+that they use (this is the WCAG AAA standard—the most demanding of its
+kind).
+
+ A couple of examples (rounded numbers):
+
+ ;; Pure white with pure green
+ (modus-themes-contrast "#ffffff" "#00ff00")
+ ;; => 1.37
+ ;; That is an outright inaccessible combo
+
+ ;; Pure black with pure green
+ (modus-themes-contrast "#000000" "#00ff00")
+ ;; => 15.3
+ ;; That is a highly accessible combo
+
+ It does not matter which color value comes first. The ratio is
+always the same.
+
+ If one does not wish to read all the decimal points, it is possible
+to try something like this:
+
+ (format "%0.2f" (modus-themes-contrast "#000000" "#00ff00"))
+
+ While it is fine to perform such calculations on a case-by-case
+basis, it is preferable to implement formulas and tables for more
+demanding tasks. Such instruments are provided by ‘org-mode’ or
+‘orgtbl-mode’, both of which are built into Emacs. Below is such a
+table that derives the contrast ratio of all colors in the first column
+(pure red, green, blue) relative to the color specified in the first row
+of the second column (pure white) and rounds the results:
+
+ | | #ffffff |
+ |---------+---------|
+ | #ff0000 | 4.00 |
+ | #00ff00 | 1.37 |
+ | #0000ff | 8.59 |
+ #+tblfm: $2='(modus-themes-contrast $1 @1$2);%0.2f
+
+ To measure color contrast one needs to start from a known value.
+This typically is the background. The Modus themes define an expanded
+palette in large part because certain colors are only meant to be used
+in combination with some others. Consult the source code for the
+minutia and relevant commentary.
+
+ Such knowledge may prove valuable while attempting to customize the
+theme’s color palette.
+
+
+File: modus-themes.info, Node: Load theme depending on time of day, Next: Backdrop for pdf-tools, Prev: Measure color contrast, Up: Advanced customization
+
+5.18 Load theme depending on time of day
+========================================
+
+While we do provide ‘modus-themes-toggle’ to manually switch between the
+themes, users may also set up their system to perform such a task
+automatically at sunrise and sunset.
+
+ This can be accomplished by specifying the coordinates of one’s
+location using the built-in ‘solar.el’ and then configuring the
+‘circadian’ package:
+
+ (use-package solar ; built-in
+ :config
+ (setq calendar-latitude 35.17
+ calendar-longitude 33.36))
+
+ (use-package circadian ; you need to install this
+ :ensure t
+ :after solar
+ :config
+ (setq circadian-themes '((:sunrise . modus-operandi)
+ (:sunset . modus-vivendi)))
+ (circadian-setup))
+
+
+File: modus-themes.info, Node: Backdrop for pdf-tools, Next: Toggle themes without reloading them, Prev: Load theme depending on time of day, Up: Advanced customization
+
+5.19 Backdrop for pdf-tools
+===========================
+
+Most PDF files use a white background for their page, making it
+impossible to discern the file’s boundaries in the buffer while using
+the Modus Operandi theme. To introduce a distinction between the
+buffer’s backdrop and the PDF page’s background, the former must be
+rendered as some shade of gray. Ideally, ‘pdf-tools’ would provide a
+face that the themes could support directly, though this does not seem
+to be the case for the time being. We must thus employ the face
+remapping technique that is documented elsewhere in this document to
+change the buffer-local value of the ‘default’ face.
+
+ *note Remap face with local value::.
+
+ To remap the buffer’s backdrop, we start with a function like this
+one:
+
+ (defun my-pdf-tools-backdrop ()
+ (modus-themes-with-colors
+ (face-remap-add-relative
+ 'default
+ `(:background ,bg-dim))))
+
+ (add-hook 'pdf-tools-enabled-hook #'my-pdf-tools-backdrop)
+
+ The idea is to assign that function to a hook that gets called when
+‘pdf-tools’ renders the document: ‘pdf-tools-enabled-hook’. This is
+enough when you only use one theme. However it has the downside of
+setting the background color value only at render time. In other words,
+the face remapping function does not get evaluated anew whenever the
+theme changes, such as upon invoking ‘M-x modus-themes-toggle’.
+
+ To have our face remapping adapt gracefully while switching between
+the Modus themes, we need to also account for the current theme and
+control the activation of ‘pdf-view-midnight-minor-mode’. To which end
+we arrive at something like the following, which builds on the above
+example:
+
+ (defun my-pdf-tools-backdrop ()
+ (modus-themes-with-colors
+ (face-remap-add-relative
+ 'default
+ `(:background ,bg-dim))))
+
+ (defun my-pdf-tools-midnight-mode-toggle ()
+ (when (derived-mode-p 'pdf-view-mode)
+ (if (eq (car custom-enabled-themes) 'modus-vivendi)
+ (pdf-view-midnight-minor-mode 1)
+ (pdf-view-midnight-minor-mode -1))
+ (my-pdf-tools-backdrop)))
+
+ (defun my-pdf-tools-themes-toggle ()
+ (mapc
+ (lambda (buf)
+ (with-current-buffer buf
+ (my-pdf-tools-midnight-mode-toggle)))
+ (buffer-list)))
+
+ (add-hook 'pdf-tools-enabled-hook #'my-pdf-tools-midnight-mode-toggle)
+ (add-hook 'modus-themes-after-load-theme-hook #'my-pdf-tools-themes-toggle)
+
+ With those in place, PDFs have a distinct backdrop for their page,
+while buffers with major-mode as ‘pdf-view-mode’ automatically switches
+to dark mode when ‘modus-themes-toggle’ is called.
+
+
+File: modus-themes.info, Node: Toggle themes without reloading them, Next: A theme-agnostic hook for theme loading, Prev: Backdrop for pdf-tools, Up: Advanced customization
+
+5.20 Toggle themes without reloading them
+=========================================
+
+Users who have a stable setup and who only ever need to toggle between
+the themes without triggering a full reload, are better off defining
+their own command which calls ‘enable-theme’ instead of ‘load-theme’:
+
+ (defun my-modus-themes-toggle ()
+ "Toggle between `modus-operandi' and `modus-vivendi' themes.
+ This uses `enable-theme' instead of the standard method of
+ `load-theme'. The technicalities are covered in the Modus themes
+ manual."
+ (interactive)
+ (pcase (modus-themes--current-theme)
+ ('modus-operandi (progn (enable-theme 'modus-vivendi)
+ (disable-theme 'modus-operandi)))
+ ('modus-vivendi (progn (enable-theme 'modus-operandi)
+ (disable-theme 'modus-vivendi)))
+ (_ (error "No Modus theme is loaded; evaluate `modus-themes-load-themes' first"))))
+
+ *note Differences between loading and enabling::.
+
+ Recall that ‘modus-themes-toggle’ uses ‘load-theme’.
+
+
+File: modus-themes.info, Node: A theme-agnostic hook for theme loading, Next: Use more spacious margins or padding in Emacs frames, Prev: Toggle themes without reloading them, Up: Advanced customization
+
+5.21 A theme-agnostic hook for theme loading
+============================================
+
+The themes are designed with the intent to be useful to Emacs users of
+varying skill levels, from beginners to experts. This means that we try
+to make things easier by not expecting anyone reading this document to
+be proficient in Emacs Lisp or programming in general.
+
+ Such a case is with the use of ‘modus-themes-after-load-theme-hook’,
+which runs after the ‘modus-themes-load-theme’ function (used by the
+command ‘modus-themes-toggle’). We recommend using that hook for
+advanced customizations, because (1) we know for sure that it is
+available once the themes are loaded, and (2) anyone consulting this
+manual, especially the sections on enabling and loading the themes, will
+be in a good position to benefit from that hook.
+
+ Advanced users who have a need to switch between the Modus themes and
+other items will find that such a hook does not meet their requirements:
+it only works with the Modus themes and only with the aforementioned
+functions.
+
+ A theme-agnostic setup can be configured thus:
+
+ (defvar after-enable-theme-hook nil
+ "Normal hook run after enabling a theme.")
+
+ (defun run-after-enable-theme-hook (&rest _args)
+ "Run `after-enable-theme-hook'."
+ (run-hooks 'after-enable-theme-hook))
+
+ (advice-add 'enable-theme :after #'run-after-enable-theme-hook)
+
+ This creates the ‘after-enable-theme-hook’ and makes it run after
+each call to ‘enable-theme’, which means that it will work for all
+themes and also has the benefit that it does not depend on functions
+such as ‘modus-themes-toggle’ and the others mentioned above.
+‘enable-theme’ is called internally by ‘load-theme’, so the hook works
+everywhere.
+
+ The downside of the theme-agnostic hook is that any functions added
+to it will likely not be able to benefit from macro calls that read the
+active theme, such as ‘modus-themes-with-colors’. Not all Emacs themes
+have the same capabilities.
+
+ In this document, we cover ‘modus-themes-after-load-theme-hook’
+though the user can replace it with ‘after-enable-theme-hook’ should
+they need to (provided they understand the implications).
+
+
+File: modus-themes.info, Node: Use more spacious margins or padding in Emacs frames, Next: Custom hl-todo colors, Prev: A theme-agnostic hook for theme loading, Up: Advanced customization
+
+5.22 Use more spacious margins or padding in Emacs frames
+=========================================================
+
+[ UPDATE 2023-06-25: Instead of following these instructions, you can
+simply install my ‘spacious-padding’ package from GNU ELPA. It
+implements the padding and provides relevant user options. ]
+
+ By default, Emacs frames try to maximize the number of characters
+that fit in the current visible portion of the buffer. Users may prefer
+to have some extra padding instead. This can make Emacs frames look
+more pleasant, but also make it easier to identify the currently active
+window.
+
+ The way to implement such padding is two-fold:
+
+ 1. In the ‘early-init.el’ file instruct Emacs to use a higher value
+ for the ‘internal-border-width’ of all frames, as well as for the
+ ‘right-divider-width’. The former concerns the outer boundaries of
+ Emacs frames, while the latter pertains to dividers between Emacs
+ windows.
+
+ 2. Make the relevant faces invisible by changing the value of their
+ relevant attributes to that of the current theme’s main background.
+
+ The parameters of Emacs frames are specified in the variables
+‘initial-frame-alist’ and ‘default-frame-alist’. The “initial frame”
+refers to the first frame that appears on Emacs startup. The “default”
+refers to the fallback values that apply to all other frames that Emacs
+creates (unless those are explicitly overridden by a bespoke
+‘make-frame’ call).
+
+ In detail, first we use the same values for the two frame alist
+variables:
+
+ ;; This must go in the early-init.el so that it applies to the initial
+ ;; frame.
+ (dolist (var '(default-frame-alist initial-frame-alist))
+ (add-to-list var '(right-divider-width . 20))
+ (add-to-list var '(internal-border-width . 20)))
+
+ What the ‘dolist’ does is to call ‘add-to-list’ for the two variables
+we specify there. This economizes on typing.
+
+ Then we define a function that makes the relevant faces invisible.
+The reason we do this with a function is so we can hook it to the “post
+load” phase of a theme, thus applying the new background value
+(otherwise you keep the old background, which likely means that the
+faces will no longer be invisible).
+
+ (defun my-modus-themes-invisible-dividers ()
+ "Make window dividers invisible.
+ Add this to the `modus-themes-post-load-hook'."
+ (let ((bg (face-background 'default)))
+ (custom-set-faces
+ `(fringe ((t :background ,bg :foreground ,bg)))
+ `(window-divider ((t :background ,bg :foreground ,bg)))
+ `(window-divider-first-pixel ((t :background ,bg :foreground ,bg)))
+ `(window-divider-last-pixel ((t :background ,bg :foreground ,bg))))))
+
+ (add-hook 'modus-themes-post-load-hook #'my-modus-themes-invisible-dividers)
+
+ The above will work only for themes that belong to the Modus family.
+For users of Emacs version 29 or higher, there exists a theme-agnostic
+hook that takes a function with one argument—that of the theme—and calls
+in the the “post enable” phase of theme loading. Here is the above
+snippet, with the necessary tweaks:
+
+ (defun my-modus-themes-invisible-dividers (_theme)
+ "Make window dividers for THEME invisible."
+ (let ((bg (face-background 'default)))
+ (custom-set-faces
+ `(fringe ((t :background ,bg :foreground ,bg)))
+ `(window-divider ((t :background ,bg :foreground ,bg)))
+ `(window-divider-first-pixel ((t :background ,bg :foreground ,bg)))
+ `(window-divider-last-pixel ((t :background ,bg :foreground ,bg))))))
+
+ (add-hook 'enable-theme-functions #'my-modus-themes-invisible-dividers)
+
+ Users of older versions of Emacs can read the entry herein about
+defining their own theme-agnostic hook (*note A theme-agnostic hook for
+theme loading::).
+
+
+File: modus-themes.info, Node: Custom hl-todo colors, Next: Add support for solaire-mode, Prev: Use more spacious margins or padding in Emacs frames, Up: Advanced customization
+
+5.23 Custom hl-todo colors
+==========================
+
+The ‘hl-todo’ package provides the user option ‘hl-todo-keyword-faces’:
+it specifies a pair of keyword and corresponding color value. The Modus
+themes configure that option in the interest of legibility. While this
+works for our purposes, users may still prefer to apply their custom
+values, in which case the following approach is necessary:
+
+ (defun my-modus-themes-hl-todo-faces ()
+ (setq hl-todo-keyword-faces '(("TODO" . "#ff0000")
+ ("HACK" . "#ffff00")
+ ("XXX" . "#00ffff")
+ ("NOTE" . "#ff00ff"))))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-hl-todo-faces)
+
+ Or include a ‘let’ form, if needed:
+
+ (defun my-modus-themes-hl-todo-faces ()
+ (let ((red "#ff0000")
+ (blue "#0000ff"))
+ (setq hl-todo-keyword-faces `(("TODO" . ,blue)
+ ("HACK" . ,red)
+ ("XXX" . ,red)
+ ("NOTE" . ,blue)))))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-hl-todo-faces)
+
+ Normally, we do not touch user options, though this is an exception:
+otherwise the defaults are not always legible.
+
+
+File: modus-themes.info, Node: Add support for solaire-mode, Prev: Custom hl-todo colors, Up: Advanced customization
+
+5.24 Add support for solaire-mode
+=================================
+
+The ‘solaire-mode’ package dims the background of what it considers
+ancillary “UI” buffers, such as the minibuffer and Dired buffers. The
+Modus themes used to support Solaire on the premise that the user was
+(i) opting in to it, (ii) understood why certain buffers were more gray,
+and (iii) knew what other adjustments had to be made to prevent broken
+visuals (e.g. the default style of the ‘modus-themes-completions’ uses
+a subtle gray background for the selection, which with Solaire becomes
+practically invisible).
+
+ However, the assumption that users opt in to this feature does not
+always hold true. There are cases where it is enabled by defaultsuch as
+in the popular Doom Emacs configuration. Thus, the unsuspecting user
+who loads ‘modus-operandi’ or ‘modus-vivendi’ without the requisite
+customizations is getting a sub-par experience; an experience that we
+did not intend and cannot genuinely fix.
+
+ Because the Modus themes are meant to work everywhere, we cannot make
+an exception for Doom Emacs and/or Solaire users. Furthermore, we shall
+not introduce hacks, such as by adding a check in all relevant faces to
+be adjusted based on Solaire or whatever other package. Hacks of this
+sort are unsustainable and penalize the entire userbase. Besides, the
+themes are built into Emacs and we must keep their standard high.
+
+ The fundamental constraint with Solaire is that Emacs does not have a
+real distinction between “content” and “UI” buffers. For themes to work
+with Solaire, they need to be designed around that package. Such is an
+arrangement that compromises on our accessibility standards and/or
+hinders our efforts to provide the best possible experience while using
+the Modus themes.
+
+ As such, ‘solaire-mode’ is not—and will not be—supported by the Modus
+themes (or any other of my themes, for that matter). Users who want it
+must style the faces manually. Below is some sample code, based on what
+we cover at length elsewhere in this manual:
+
+ *note Advanced customization::.
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+ (defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ `(solaire-default-face ((,c :inherit default :background ,bg-dim :foreground ,fg-dim)))
+ `(solaire-line-number-face ((,c :inherit solaire-default-face :foreground ,fg-unfocused)))
+ `(solaire-hl-line-face ((,c :background ,bg-active)))
+ `(solaire-org-hide-face ((,c :background ,bg-dim :foreground ,bg-dim))))))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+
+ As always, re-load the theme for changes to take effect.
+
+
+File: modus-themes.info, Node: Face coverage, Next: Notes on individual packages, Prev: Advanced customization, Up: Top
+
+6 Face coverage
+***************
+
+The Modus themes try to provide as close to full face coverage as
+possible. This is necessary to ensure a consistently accessible reading
+experience across all available interfaces.
+
+* Menu:
+
+* Supported packages:: Full list of covered face groups
+* Indirectly covered packages::
+
+
+File: modus-themes.info, Node: Supported packages, Next: Indirectly covered packages, Up: Face coverage
+
+6.1 Full support for packages or face groups
+============================================
+
+This list will always be updated to reflect the current state of the
+project. The idea is to offer an overview of the known status of all
+affected face groups. The items with an appended asterisk ‘*’ tend to
+have lots of extensions, so the “full support” may not be 100% true…
+
+ • ace-window
+ • agda2-mode
+ • all-the-icons
+ • all-the-icons-dired
+ • all-the-icons-ibuffer
+ • annotate
+ • ansi-color
+ • anzu
+ • auctex and TeX
+ • auto-dim-other-buffers
+ • avy
+ • bbdb
+ • binder
+ • breadcrumb [Part of 4.4.0-dev]
+ • bongo
+ • boon
+ • bookmark
+ • calendar and diary
+ • centaur-tabs
+ • change-log and log-view (such as ‘vc-print-log’,
+ ‘vc-print-root-log’)
+ • chart
+ • cider
+ • circe
+ • citar
+ • clojure-mode
+ • column-enforce-mode
+ • company-mode*
+ • compilation-mode
+ • completions
+ • consult
+ • corfu
+ • corfu-candidate-overlay [Part of 4.4.0-dev]
+ • corfu-quick
+ • counsel*
+ • cperl-mode
+ • crontab-mode
+ • csv-mode
+ • ctrlf
+ • custom (what you get with ‘M-x customize’)
+ • dashboard
+ • deadgrep
+ • deft
+ • devdocs
+ • dictionary
+ • diff-hl
+ • diff-mode
+ • dim-autoload
+ • dired
+ • dired-async
+ • dired-git
+ • dired-git-info
+ • dired-narrow
+ • dired-subtree
+ • diredfl
+ • disk-usage
+ • display-fill-column-indicator-mode
+ • doom-modeline
+ • ediff
+ • ein (Emacs IPython Notebook)
+ • eglot
+ • el-search
+ • eldoc-box
+ • elfeed
+ • elfeed-score
+ • elpher
+ • embark
+ • ement
+ • emms
+ • enh-ruby-mode (enhanced-ruby-mode)
+ • epa
+ • erc
+ • ert
+ • erts-mode [Part of 4.4.0-dev.]
+ • eshell
+ • eshell-fringe-status
+ • evil* (evil-mode)
+ • eww
+ • exwm
+ • eyebrowse
+ • flycheck
+ • flycheck-color-mode-line
+ • flycheck-indicator
+ • flymake
+ • flyspell
+ • flx
+ • focus
+ • fold-this
+ • font-lock (generic syntax highlighting)
+ • geiser
+ • git-commit
+ • git-gutter (and variants)
+ • git-rebase
+ • git-timemachine
+ • gnus
+ • gotest
+ • golden-ratio-scroll-screen
+ • helpful
+ • highlight-numbers
+ • highlight-parentheses (*note Note on highlight-parentheses.el: Note
+ on highlight-parenthesesel.)
+ • highlight-thing
+ • hl-fill-column
+ • hl-line-mode
+ • hl-todo
+ • hydra
+ • ibuffer
+ • icomplete
+ • ido-mode
+ • iedit
+ • iflipb
+ • image-dired
+ • imenu-list
+ • indium
+ • info
+ • info+ (info-plus)
+ • info-colors
+ • ioccur
+ • isearch, occur, etc.
+ • ivy*
+ • ivy-posframe
+ • japanese-holidays
+ • jira (org-jira)
+ • jit-spell
+ • jinx
+ • journalctl-mode
+ • js2-mode
+ • julia
+ • kaocha-runner
+ • keycast
+ • ledger-mode
+ • leerzeichen
+ • line numbers (‘display-line-numbers-mode’ and global variant)
+ • magit
+ • make-mode
+ • man
+ • marginalia
+ • markdown-mode
+ • markup-faces (‘adoc-mode’)
+ • messages
+ • minimap
+ • mode-line
+ • mood-line
+ • mpdel
+ • mu4e
+ • multiple-cursors
+ • nerd-icons [Part of 4.4.0-dev.]
+ • nerd-icons-completion [Part of 4.4.0-dev.]
+ • nerd-icons-dired [Part of 4.4.0-dev.]
+ • nerd-icons-ibuffer [Part of 4.4.0-dev.]
+ • neotree
+ • notmuch
+ • num3-mode
+ • nxml-mode
+ • olivetti
+ • orderless
+ • org*
+ • org-journal
+ • org-noter
+ • org-pomodoro
+ • org-recur
+ • org-roam
+ • org-superstar
+ • org-table-sticky-header
+ • org-tree-slide
+ • origami
+ • outline-mode
+ • outline-minor-faces
+ • package (what you get with ‘M-x list-packages’)
+ • page-break-lines
+ • pandoc-mode
+ • paren-face
+ • pass
+ • pdf-tools
+ • persp-mode
+ • perspective
+ • popup
+ • powerline
+ • prism (*note Note for prism.el: Note for prism.)
+ • prescient
+ • proced
+ • prodigy
+ • pulse
+ • pyim
+ • quick-peek
+ • rainbow-delimiters
+ • rcirc
+ • rcirc-color
+ • recursion-indicator
+ • regexp-builder (also known as ‘re-builder’)
+ • rg (rg.el)
+ • ripgrep
+ • rmail
+ • rst-mode
+ • ruler-mode
+ • sesman
+ • shell-script-mode
+ • shortdoc
+ • show-paren-mode
+ • shr
+ • side-notes
+ • sieve-mode
+ • skewer-mode
+ • slime (slbd)
+ • sly
+ • smart-mode-line
+ • smerge
+ • speedbar
+ • spell-fu
+ • stripes
+ • suggest
+ • switch-window
+ • swiper
+ • symbol-overlay
+ • syslog-mode
+ • tab-bar-mode
+ • tab-line-mode
+ • table (built-in ‘table.el’)
+ • telega
+ • terraform-mode
+ • term
+ • textsec
+ • transient (pop-up windows such as Magit’s)
+ • trashed
+ • tree-sitter
+ • tty-menu
+ • tuareg
+ • typescript
+ • undo-tree
+ • vc (‘vc-dir.el’, ‘vc-hooks.el’)
+ • vertico
+ • vertico-quick
+ • vimish-fold
+ • visible-mark
+ • visual-regexp
+ • vterm
+ • vundo
+ • wcheck-mode
+ • web-mode
+ • wgrep
+ • which-function-mode
+ • which-key
+ • whitespace-mode
+ • window-divider-mode
+ • writegood-mode
+ • woman
+ • xah-elisp-mode
+ • xterm-color (and ansi-colors)
+ • yaml-mode
+ • yasnippet
+
+ Plus many other miscellaneous faces that are provided by Emacs.
+
+
+File: modus-themes.info, Node: Indirectly covered packages, Prev: Supported packages, Up: Face coverage
+
+6.2 Indirectly covered packages
+===============================
+
+These do not require any extra styles because they are configured to
+inherit from some basic faces or their dependencies which are directly
+supported by the themes.
+
+ • ag
+ • apropos
+ • apt-sources-list
+ • bbdb
+ • bm
+ • breakpoint (provided by the built-in ‘gdb-mi.el’ library)
+ • buffer-expose
+ • bufler
+ • counsel-notmuch
+ • counsel-org-capture-string
+ • css-mode
+ • dashboard (emacs-dashboard)
+ • define-word
+ • denote
+ • disk-usage
+ • dtache
+ • dynamic-ruler
+ • easy-kill
+ • ebdb
+ • edit-indirect
+ • egerrit
+ • elfeed-summary
+ • evil-owl
+ • flyspell-correct
+ • fortran-mode
+ • freeze-it
+ • forge
+ • git-walktree
+ • goggles
+ • highlight-defined
+ • highlight-escape-sequences (‘hes-mode’)
+ • icomplete-vertical
+ • i3wm-config-mode
+ • lin
+ • minibuffer-line
+ • no-emoji
+ • org-remark
+ • parrot
+ • perl-mode
+ • php-mode
+ • pulsar
+ • rjsx-mode
+ • side-hustle
+ • spell-fu
+ • swift-mode
+ • tab-bar-echo-area
+ • tide
+ • undo-hl
+ • vdiff
+ • vertico-indexed
+ • vertico-mouse
+ • xref
+
+
+File: modus-themes.info, Node: Notes on individual packages, Next: Frequently Asked Questions, Prev: Face coverage, Up: Top
+
+7 Notes on individual packages
+******************************
+
+This section covers information that may be of interest to users of
+individual packages.
+
+* Menu:
+
+* Note on calendar.el weekday and weekend colors: Note on calendarel weekday and weekend colors.
+* Note on git-gutter in Doom Emacs::
+* Note on php-mode multiline comments::
+* Note on underlines in compilation buffers::
+* Note on inline Latex in Org buffers::
+* Note on dimmer.el: Note on dimmerel.
+* Note on display-fill-column-indicator-mode::
+* Note on highlight-parentheses.el: Note on highlight-parenthesesel.
+* Note on mmm-mode.el background colors: Note on mmm-modeel background colors.
+* Note for prism::
+* Note on company-mode overlay pop-up::
+* Note on ERC escaped color sequences::
+* Note on powerline or spaceline::
+* Note on SHR colors::
+* Note on SHR fonts::
+* Note on Ement colors and fonts::
+* Note on pdf-tools link hints::
+* Note on the Notmuch logo::
+* Note on goto-address-mode faces::
+
+
+File: modus-themes.info, Node: Note on calendarel weekday and weekend colors, Next: Note on git-gutter in Doom Emacs, Up: Notes on individual packages
+
+7.1 Note on calendar.el weekday and weekend colors
+==================================================
+
+By default, the ‘M-x calendar’ interface differentiates weekdays from
+weekends by applying a gray color to the former and a faint red to the
+latter. The idea for this approach is that the weekend should serve as
+a subtle warning that no work is supposed to be done on that day, per
+the design of traditional calendars.
+
+ Users who prefer all days to look the same can configure the variable
+‘calendar-weekend-days’ to either use gray of weekdays or the faint red
+of weekends uniformly.
+
+ ;; All are treated like weekdays (gray color)
+ (setq calendar-weekend-days nil)
+
+ ;; All are treated like weekends (red-faint color)
+ (setq calendar-weekend-days (number-sequence 0 6))
+
+ ;; The default marks the Saturday and Sunday as the weekend
+ (setq calendar-weekend-days '(0 6))
+
+ For changes to take effect, the Calendar buffer needs to be generated
+anew.
+
+
+File: modus-themes.info, Node: Note on git-gutter in Doom Emacs, Next: Note on php-mode multiline comments, Prev: Note on calendarel weekday and weekend colors, Up: Notes on individual packages
+
+7.2 Note on git-gutter in Doom Emacs
+====================================
+
+The ‘git-gutter’ and ‘git-gutter-fr’ packages default to drawing bitmaps
+for the indicators they display (e.g. bitmap of a plus sign for added
+lines). In Doom Emacs, these bitmaps are replaced with contiguous lines
+which may look nicer, but require a change to the foreground of the
+relevant faces to yield the desired color combinations.
+
+ Since this is Doom-specific, we urge users to apply changes in their
+local setup. Below is some sample code, based on what we cover at
+length elsewhere in this manual:
+
+ *note Advanced customization::.
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+ (defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Make foreground the same as background for a uniform bar on
+ ;; Doom Emacs.
+ ;;
+ ;; Doom should not be implementing such hacks because themes
+ ;; cannot support them:
+ ;; <https://protesilaos.com/codelog/2022-08-04-doom-git-gutter-modus-themes/>.
+ `(git-gutter-fr:added ((,c :foreground ,bg-added-fringe)))
+ `(git-gutter-fr:deleted ((,c :foreground ,bg-removed-fringe)))
+ `(git-gutter-fr:modified ((,c :foreground ,bg-changed-fringe))))))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+
+ As always, re-load the theme for changes to take effect.
+
+ If the above does not work, try this instead:
+
+ (after! modus-themes
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Make foreground the same as background for a uniform bar on
+ ;; Doom Emacs.
+ ;;
+ ;; Doom should not be implementing such hacks because themes
+ ;; cannot support them:
+ ;; <https://protesilaos.com/codelog/2022-08-04-doom-git-gutter-modus-themes/>.
+ `(git-gutter-fr:added ((,c :foreground ,bg-added-intense)))
+ `(git-gutter-fr:deleted ((,c :foreground ,bg-removed-intense)))
+ `(git-gutter-fr:modified ((,c :foreground ,bg-changed-intense))))))
+
+
+File: modus-themes.info, Node: Note on php-mode multiline comments, Next: Note on underlines in compilation buffers, Prev: Note on git-gutter in Doom Emacs, Up: Notes on individual packages
+
+7.3 Note on php-mode multiline comments
+=======================================
+
+Depending on your build of Emacs and/or the environment it runs in,
+multiline comments in PHP with the ‘php-mode’ package use the
+‘font-lock-doc-face’ instead of ‘font-lock-comment-face’.
+
+ This seems to make all comments use the appropriate face:
+
+ (defun my-multine-comments ()
+ (setq-local c-doc-face-name 'font-lock-comment-face))
+
+ (add-hook 'php-mode-hook #'my-multine-comments)
+
+ As always, re-load the theme for changes to take effect.
+
+
+File: modus-themes.info, Node: Note on underlines in compilation buffers, Next: Note on inline Latex in Org buffers, Prev: Note on php-mode multiline comments, Up: Notes on individual packages
+
+7.4 Note on underlines in compilation buffers
+=============================================
+
+Various buffers that produce compilation results or run tests on code
+apply an underline to the file names they reference or to relevant
+messages. Users may consider this unnecessary or excessive.
+
+ To outright disable the effect, use this (buffers need to be
+generated anew):
+
+ (setq compilation-message-face nil)
+
+ If some element of differentiation is still desired, a good option is
+to render the affected text with the ‘italic’ face:
+
+ (setq compilation-message-face 'italic)
+
+ *note Configure bold and italic faces::.
+
+
+File: modus-themes.info, Node: Note on inline Latex in Org buffers, Next: Note on dimmerel, Prev: Note on underlines in compilation buffers, Up: Notes on individual packages
+
+7.5 Note on inline Latex in Org buffers
+=======================================
+
+Org can work with inline latex and related syntax. To actually fontify
+those constructs, set the variable ‘org-highlight-latex-and-related’ to
+the desired list of values (per its doc string). For example:
+
+ (setq org-highlight-latex-and-related '(latex script))
+
+ Remember to use ‘M-x org-mode-restart’ for changes to take effect.
+
+
+File: modus-themes.info, Node: Note on dimmerel, Next: Note on display-fill-column-indicator-mode, Prev: Note on inline Latex in Org buffers, Up: Notes on individual packages
+
+7.6 Note on dimmer.el
+=====================
+
+The ‘dimmer.el’ library by Neil Okamoto can be configured to
+automatically dim the colors of inactive Emacs windows. To guarantee
+consistent results with the Modus themes, we suggest some tweaks to the
+default styles, such as in this minimal setup:
+
+ (use-package dimmer
+ :config
+ (setq dimmer-fraction 0.3)
+ (setq dimmer-adjustment-mode :foreground)
+ (setq dimmer-use-colorspace :rgb)
+
+ (dimmer-mode 1))
+
+ Of the above, we strongly recommend the RGB color space because it is
+the one that remains faithful to the hueness of the colors used by the
+themes. Whereas the default CIELAB space has a tendency to distort
+colors in addition to applying the dim effect, which can be somewhat
+disorienting.
+
+ The value of the ‘dimmer-fraction’ has been selected empirically.
+Users might prefer to tweak it further (increasing it makes the dim
+effect more pronounced).
+
+ Changing the ‘dimmer-adjustment-mode’ is a matter of preference.
+Though because the Modus themes use black and white as their base
+colors, any other value for that variable will turn the main background
+gray. This inadvertently leads to the opposite of the intended utility
+of this package: it draws too much attention to unfocused windows.
+
+
+File: modus-themes.info, Node: Note on display-fill-column-indicator-mode, Next: Note on highlight-parenthesesel, Prev: Note on dimmerel, Up: Notes on individual packages
+
+7.7 Note on display-fill-column-indicator-mode
+==============================================
+
+The ‘display-fill-column-indicator-mode’ uses a typographic character to
+draw its line. This has the downside of creating a dashed line. The
+dashes are further apart depending on how tall the font’s glyph height
+is and what integer the ‘line-spacing’ is set to.
+
+ At the theme level we eliminate this effect by making the character
+one pixel tall: the line is contiguous. Users who prefer the dashed
+line are advised to change the ‘fill-column-indicator’ face, as
+explained elsewhere in this document. For example:
+
+ (modus-themes-with-colors
+ (custom-set-faces
+ `(fill-column-indicator ((,c :foreground ,bg-active)))))
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+ To make the line thicker, set the height to be equal to the base font
+size instead of the one pixel we use. This is done by specifying a rate
+instead of an absolute number, as in ‘:height 1.0’ versus ‘:height 1’.
+For example:
+
+ (modus-themes-with-colors
+ (custom-set-faces
+ `(fill-column-indicator ((,c :height 1.0 :background ,bg-inactive :foreground ,bg-inactive)))))
+
+
+File: modus-themes.info, Node: Note on highlight-parenthesesel, Next: Note on mmm-modeel background colors, Prev: Note on display-fill-column-indicator-mode, Up: Notes on individual packages
+
+7.8 Note on highlight-parentheses.el
+====================================
+
+The ‘highlight-parentheses’ package provides contextual coloration of
+surrounding parentheses, highlighting only those which are around the
+point. The package expects users to customize the applicable colors on
+their own by configuring certain variables.
+
+ To make the Modus themes work as expected with this, we need to use
+some of the techniques that are discussed at length in the various
+“Do-It-Yourself” (DIY) sections, which provide insight into the more
+advanced customization options of the themes.
+
+ *note Advanced customization::.
+
+ In the following example, we are assuming that the user wants to (i)
+re-use color variables provided by the themes, (ii) be able to retain
+their tweaks while switching between ‘modus-operandi’ and
+‘modus-vivendi’, and (iii) have the option to highlight either the
+foreground of the parentheses or the background as well.
+
+ We start by defining our own variable, which will serve as a toggle
+between foreground and background coloration styles:
+
+ (defvar my-highlight-parentheses-use-background t
+ "Prefer `highlight-parentheses-background-colors'.")
+
+ Then we can update our preference with this:
+
+ ;; Set to nil to disable backgrounds.
+ (setq my-highlight-parentheses-use-background nil)
+
+ To re-use colors from the themes, we must wrap our code in the
+‘modus-themes-with-colors’ macro. Our implementation must interface
+with the variables ‘highlight-parentheses-background-colors’ and/or
+‘highlight-parentheses-colors’.
+
+ So we can have something like this (the doc string of
+‘modus-themes-with-colors’ explains where the names of the colors can be
+found):
+
+ (modus-themes-with-colors
+ ;; Our preference for setting either background or foreground
+ ;; styles, depending on `my-highlight-parentheses-use-background'.
+ (if my-highlight-parentheses-use-background
+
+ ;; Here we set color combinations that involve both a background
+ ;; and a foreground value.
+ (setq highlight-parentheses-background-colors (list bg-cyan-intense
+ bg-magenta-intense
+ bg-green-intense
+ bg-yellow-intense)
+ highlight-parentheses-colors (list cyan
+ magenta
+ green
+ yellow))
+
+ ;; And here we pass only foreground colors while disabling any
+ ;; backgrounds.
+ (setq highlight-parentheses-colors (list green-intense
+ magenta-intense
+ blue-intense
+ red-intense)
+ highlight-parentheses-background-colors nil)))
+
+ ;; Include this if you also want to make the parentheses bold:
+ (set-face-attribute 'highlight-parentheses-highlight nil :inherit 'bold)
+
+ ;; Our changes must be evaluated before enabling the relevant mode, so
+ ;; this comes last.
+ (global-highlight-parentheses-mode 1)
+
+ For our changes to persist while switching between the Modus themes,
+we need to include them in a function which can then get passed to
+‘modus-themes-after-load-theme-hook’. This is the complete
+implementation:
+
+ ;; Configurations for `highlight-parentheses':
+ (require 'highlight-parentheses)
+
+ (defvar my-highlight-parentheses-use-background t
+ "Prefer `highlight-parentheses-background-colors'.")
+
+ (setq my-highlight-parentheses-use-background nil) ; Set to nil to disable backgrounds
+
+ (defun my-modus-themes-highlight-parentheses ()
+ (modus-themes-with-colors
+ ;; Our preference for setting either background or foreground
+ ;; styles, depending on `my-highlight-parentheses-use-background'.
+ (if my-highlight-parentheses-use-background
+
+ ;; Here we set color combinations that involve both a background
+ ;; and a foreground value.
+ (setq highlight-parentheses-background-colors (list bg-cyan-intense
+ bg-magenta-intense
+ bg-green-intense
+ bg-yellow-intense)
+ highlight-parentheses-colors (list cyan
+ magenta
+ green
+ yellow))
+
+ ;; And here we pass only foreground colors while disabling any
+ ;; backgrounds.
+ (setq highlight-parentheses-colors (list green-intense
+ magenta-intense
+ blue-intense
+ red-intense)
+ highlight-parentheses-background-colors nil)))
+
+ ;; Include this if you also want to make the parentheses bold:
+ (set-face-attribute 'highlight-parentheses-highlight nil :inherit 'bold)
+
+ ;; Our changes must be evaluated before enabling the relevant mode, so
+ ;; this comes last.
+ (global-highlight-parentheses-mode 1))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-highlight-parentheses)
+
+ As always, re-load the theme for changes to take effect.
+
+
+File: modus-themes.info, Node: Note on mmm-modeel background colors, Next: Note for prism, Prev: Note on highlight-parenthesesel, Up: Notes on individual packages
+
+7.9 Note on mmm-mode.el background colors
+=========================================
+
+The faces used by ‘mmm-mode.el’ are expected to have a colorful
+background, while they should not touch any foreground value. The idea
+is that they must not interfere with existing fontification. Those
+background colors need to be distinct from each other, such as an
+unambiguous red juxtaposed with a clear blue.
+
+ While this design may be internally consistent with the raison d’être
+of that library, it inevitably produces inaccessible color combinations.
+
+ There are two competing goals at play:
+
+ 1. Legibility of the text, understood as the contrast ratio between
+ the background and the foreground.
+
+ 2. Semantic precision of each face which entails faithfulness to
+ color-coding of the underlying background.
+
+ As the Modus themes are designed with the express purpose of
+conforming with the first point, we have to forgo the apparent
+color-coding of the background elements. Instead we use subtle colors
+that do not undermine the legibility of the affected text while they
+still offer a sense of added context.
+
+ Users who might prefer to fall below the minimum 7:1 contrast ratio
+in relative luminance (the accessibility target we conform with), can
+opt to configure the relevant faces on their own.
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+ This example uses more vivid background colors, though it comes at
+the very high cost of degraded legibility.
+
+ (modus-themes-with-colors
+ (custom-set-faces
+ `(mmm-cleanup-submode-face ((,c :background ,bg-yellow-intense)))
+ `(mmm-code-submode-face ((,c :background ,bg-inactive)))
+ `(mmm-comment-submode-face ((,c :background ,bg-blue-intense)))
+ `(mmm-declaration-submode-face ((,c :background ,bg-cyan-intense)))
+ `(mmm-default-submode-face ((,c :background ,bg-dim)))
+ `(mmm-init-submode-face ((,c :background ,bg-magenta-intense)))
+ `(mmm-output-submode-face ((,c :background ,bg-red-intense)))
+ `(mmm-special-submode-face ((,c :background ,bg-green-intense)))))
+
+
+File: modus-themes.info, Node: Note for prism, Next: Note on company-mode overlay pop-up, Prev: Note on mmm-modeel background colors, Up: Notes on individual packages
+
+7.10 Note on prism.el
+=====================
+
+This package by Adam Porter, aka “alphapapa” or “github-alphapapa”,
+implements an alternative to the typical coloration of code. Instead of
+highlighting the syntactic constructs, it applies color to different
+levels of depth in the code structure.
+
+ As ‘prism.el’ offers a broad range of customizations, we cannot style
+it directly at the theme level: that would run contrary to the spirit of
+the package. Instead, we may offer preset color schemes. Those should
+offer a starting point for users to adapt to their needs.
+
+ In the following code snippets, we employ the
+‘modus-themes-with-colors’ macro: *note Use theme colors in code with
+modus-themes-with-colors::.
+
+ These are the minimum recommended settings with 16 colors:
+
+ (setq prism-num-faces 16)
+
+ (prism-set-colors
+ :desaturations '(0) ; do not change---may lower the contrast ratio
+ :lightens '(0) ; same
+ :colors (modus-themes-with-colors
+ (list fg-main
+ magenta
+ cyan-cooler
+ magenta-cooler
+ blue
+ magenta-warmer
+ cyan-warmer
+ red-cooler
+ green
+ fg-main
+ cyan
+ yellow
+ blue-warmer
+ red-warmer
+ green-cooler
+ yellow-faint)))
+
+ With 8 colors:
+
+ (setq prism-num-faces 8)
+
+ (prism-set-colors
+ :desaturations '(0) ; do not change---may lower the contrast ratio
+ :lightens '(0) ; same
+ :colors (modus-themes-with-colors
+ (list blue
+ magenta
+ magenta-cooler
+ cyan-cooler
+ fg-main
+ blue-warmer
+ red-cooler
+ cyan)))
+
+ And this is with 4 colors, which produces results that are the
+closest to the themes’ default aesthetic:
+
+ (setq prism-num-faces 4)
+
+ (prism-set-colors
+ :desaturations '(0) ; do not change---may lower the contrast ratio
+ :lightens '(0) ; same
+ :colors (modus-themes-with-colors
+ (list blue
+ magenta
+ magenta-cooler
+ green-warmer)))
+
+ If you need to apply desaturation and lightening, you can use what
+the ‘prism.el’ documentation recommends, like this (adapting to the
+examples with the 4, 8, 16 colors):
+
+ (prism-set-colors
+ :desaturations (cl-loop for i from 0 below 16 collect (* i 2.5))
+ :lightens (cl-loop for i from 0 below 16 collect (* i 2.5))
+ :colors (modus-themes-with-colors
+ (list fg-main
+ cyan-cooler
+ magenta-cooler
+ magenta)))
+
+
+File: modus-themes.info, Node: Note on company-mode overlay pop-up, Next: Note on ERC escaped color sequences, Prev: Note for prism, Up: Notes on individual packages
+
+7.11 Note on company-mode overlay pop-up
+========================================
+
+By default, the ‘company-mode’ pop-up that lists completion candidates
+is drawn using an overlay. This creates alignment issues every time it
+is placed above a piece of text that has a different height than the
+default.
+
+ The solution recommended by the project’s maintainer is to use an
+alternative front-end for drawing the pop-up which draws child frames
+instead of overlays.(1)(2)
+
+ Also consider the ‘corfu’ package.
+
+ ---------- Footnotes ----------
+
+ (1) <https://github.com/company-mode/company-mode/issues/1010>
+
+ (2) <https://github.com/tumashu/company-posframe/>
+
+
+File: modus-themes.info, Node: Note on ERC escaped color sequences, Next: Note on powerline or spaceline, Prev: Note on company-mode overlay pop-up, Up: Notes on individual packages
+
+7.12 Note on ERC escaped color sequences
+========================================
+
+The built-in IRC client ‘erc’ has the ability to colorize any text using
+escape sequences that start with ‘^C’ (inserted with ‘C-q C-c’) and are
+followed by a number for the foreground and background.(1) Possible
+numbers are 0-15, with the first entry being the foreground and the
+second the background, separated by a comma. Like this ‘^C1,6’. The
+minimum setup is this:
+
+ (add-to-list 'erc-modules 'irccontrols)
+ (setq erc-interpret-controls-p t
+ erc-interpret-mirc-color t)
+
+ As this allows users the chance to make arbitrary combinations, it is
+impossible to guarantee a consistently high contrast ratio. All we can
+we do is provide guidance on the combinations that satisfy the
+accessibility standard of the themes:
+
+Modus Operandi
+ Use foreground color 1 for all backgrounds from 2-15. Like so:
+ ‘C-q C-c1’ where ‘N’ is the background.
+
+Modus Vivendi
+ Use foreground color 0 for all backgrounds from 2-13. Use
+ foreground ‘1’ for backgrounds 14, 15.
+
+ Colors 0 and 1 are white and black respectively. So combine them
+together, if you must.
+
+ ---------- Footnotes ----------
+
+ (1) This page explains the basics, though it is not specific to
+Emacs: <https://www.mirc.com/colors.html>
+
+
+File: modus-themes.info, Node: Note on powerline or spaceline, Next: Note on SHR colors, Prev: Note on ERC escaped color sequences, Up: Notes on individual packages
+
+7.13 Note on powerline or spaceline
+===================================
+
+Both Powerline and Spaceline package users will likely need to use the
+command ‘powerline-reset’ whenever they make changes to their themes
+and/or mode line setup.
+
+
+File: modus-themes.info, Node: Note on SHR colors, Next: Note on SHR fonts, Prev: Note on powerline or spaceline, Up: Notes on individual packages
+
+7.14 Note on SHR colors
+=======================
+
+Emacs’ HTML rendering library (‘shr.el’) may need explicit configuration
+to respect the theme’s colors instead of whatever specifications the
+webpage provides.
+
+ Consult the doc string of ‘shr-use-colors’.
+
+
+File: modus-themes.info, Node: Note on SHR fonts, Next: Note on Ement colors and fonts, Prev: Note on SHR colors, Up: Notes on individual packages
+
+7.15 Note on SHR fonts
+======================
+
+By default, packages that build on top of the Simple HTML Remember
+(‘shr’) use proportionately spaced fonts. This is controlled by the
+user option ‘shr-use-fonts’, which is set to non-‘nil’ by default. To
+use the standard font instead, set that variable to ‘nil’.
+
+ *note Font configurations for Org and others::.
+
+ Packages affected by this are:
+
+ • elfeed
+ • ement
+ • eww
+
+ This is a non-exhaustive list.
+
+
+File: modus-themes.info, Node: Note on Ement colors and fonts, Next: Note on pdf-tools link hints, Prev: Note on SHR fonts, Up: Notes on individual packages
+
+7.16 Note on Ement colors and fonts
+===================================
+
+The ‘ement.el’ library by Adam Porter (also known as “alphapapa”)
+defaults to a method of colorizing usernames in a rainbow style. This
+is controlled by the user option ‘ement-room-prism’ and can be disabled
+with:
+
+ (setq ement-room-prism nil)
+
+ The contrast ratio of these colors is governed by another user
+option: ‘ement-room-prism-minimum-contrast’. By default, it is set to 6
+which is slightly below our nominal target. Try this instead:
+
+ (setq ement-room-prism-minimum-contrast 7)
+
+ With regard to fonts, Ement depends on ‘shr’ (*note Note on SHR
+fonts::).
+
+ Since we are here, here is an excerpt from Ement’s source code:
+
+ (defcustom ement-room-prism-minimum-contrast 6
+ "Attempt to enforce this minimum contrast ratio for user faces.
+ This should be a reasonable number from, e.g. 0-7 or so."
+ ;; Prot would almost approve of this default. :) I would go all the way
+ ;; to 7, but 6 already significantly dilutes the colors in some cases.
+ :type 'number)
+
+ Yes, I do approve of that default. Even a 4.5 (the WCAG AA rating)
+would be a good baseline for many themes and/or user configurations.
+Our target is the highest of the sort, though we do not demand that
+everyone conforms with it.
+
+
+File: modus-themes.info, Node: Note on pdf-tools link hints, Next: Note on the Notmuch logo, Prev: Note on Ement colors and fonts, Up: Notes on individual packages
+
+7.17 Note on pdf-tools link hints
+=================================
+
+Hints are drawn by ImageMagick (https://imagemagick.org/), not Emacs,
+i.e., ImageMagick doesn’t know about the hint face unless you tell
+ImageMagick about it. By default, only the foreground and background
+color attributes are passed. The below snippet adds to those the
+various font attributes. As it queries various faces, specifically
+‘pdf-links-read-link’ and the faces it inherits, it needs to be added to
+your initialization file after you’ve customized any faces.
+
+ (use-package pdf-links
+ :config
+ (let ((spec
+ (apply #'append
+ (mapcar
+ (lambda (name)
+ (list name
+ (face-attribute 'pdf-links-read-link
+ name nil 'default)))
+ '(:family :width :weight :slant)))))
+ (setq pdf-links-read-link-convert-commands
+ `("-density" "96"
+ "-family" ,(plist-get spec :family)
+ "-stretch" ,(let* ((width (plist-get spec :width))
+ (name (symbol-name width)))
+ (replace-regexp-in-string "-" ""
+ (capitalize name)))
+ "-weight" ,(pcase (plist-get spec :weight)
+ ('ultra-light "Thin")
+ ('extra-light "ExtraLight")
+ ('light "Light")
+ ('semi-bold "SemiBold")
+ ('bold "Bold")
+ ('extra-bold "ExtraBold")
+ ('ultra-bold "Black")
+ (_weight "Normal"))
+ "-style" ,(pcase (plist-get spec :slant)
+ ('italic "Italic")
+ ('oblique "Oblique")
+ (_slant "Normal"))
+ "-pointsize" "%P"
+ "-undercolor" "%f"
+ "-fill" "%b"
+ "-draw" "text %X,%Y '%c'"))))
+
+
+File: modus-themes.info, Node: Note on the Notmuch logo, Next: Note on goto-address-mode faces, Prev: Note on pdf-tools link hints, Up: Notes on individual packages
+
+7.18 Note on the Notmuch logo
+=============================
+
+By default, the “hello” buffer of Notmuch includes a header with the
+programs’ logo and a couple of buttons. The logo has the effect of
+enlarging the height of the line, which negatively impacts the shape of
+those buttons. Disabling the logo fixes the problem:
+
+ (setq notmuch-show-logo nil)
+
+
+File: modus-themes.info, Node: Note on goto-address-mode faces, Prev: Note on the Notmuch logo, Up: Notes on individual packages
+
+7.19 Note on goto-address-mode faces
+====================================
+
+The built-in ‘goto-address-mode’ uses heuristics to identify URLs and
+email addresses in the current buffer. It then applies a face to them
+to change their style. Some packages, such as ‘notmuch’, use this
+minor-mode automatically.
+
+ The faces are not declared with ‘defface’, meaning that it is better
+that the theme does not modify them. The user is thus encouraged to
+consider including (or equivalent) this in their setup:
+
+ (setq goto-address-url-face 'link
+ goto-address-url-mouse-face 'highlight
+ goto-address-mail-face 'link
+ goto-address-mail-mouse-face 'highlight)
+
+ My personal preference is to set ‘goto-address-mail-face’ to ‘nil’,
+as it otherwise adds too much visual noise to the buffer (email
+addresses stand out more, due to the use of the uncommon ‘@’ character
+but also because they are often enclosed in angled brackets).
+
+
+File: modus-themes.info, Node: Frequently Asked Questions, Next: Contributing, Prev: Notes on individual packages, Up: Top
+
+8 Frequently Asked Questions
+****************************
+
+In this section we provide answers related to some aspects of the Modus
+themes’ design and application.
+
+* Menu:
+
+* Is the contrast ratio about adjacent colors?::
+* What does it mean to avoid exaggerations?::
+* Why are colors mostly variants of blue, magenta, cyan?: Why are colors mostly variants of blue magenta cyan?.
+* What is the best setup for legibility?::
+* Are these color schemes?::
+* Port the Modus themes to other platforms?::
+
+
+File: modus-themes.info, Node: Is the contrast ratio about adjacent colors?, Next: What does it mean to avoid exaggerations?, Up: Frequently Asked Questions
+
+8.1 Is the contrast ratio about adjacent colors?
+================================================
+
+The minimum contrast ratio in relative luminance that the themes conform
+with always refers to any given combination of background and foreground
+colors. If we have some blue colored text next to a magenta one, both
+against a white background, we do not mean to imply that blue:magenta is
+7:1 in terms of relative luminance. Rather, we state that blue:white
+and magenta:white each are 7:1 or higher.
+
+ The point of reference is always the background. Because colors have
+about the same minimum distance in luminance from their backdrop, they
+necessarily are fairly close to each other in this measure. A possible
+blue:magenta combination would naturally be around 1:1 in contrast of
+the sort here considered.
+
+ To differentiate between sequential colors, we rely on hueness by
+mapping contrasting hues to adjacent constructs, while avoiding
+exaggerations. A blue next to a magenta can be told apart regardless of
+their respective contrast ratio against their common background.
+Exceptions would be tiny characters in arguably not so realistic cases,
+such as two dots drawn side-by-side which for some reason would need to
+be colored differently. They would still be legible though, which is
+the primary objective of the Modus themes.
+
+
+File: modus-themes.info, Node: What does it mean to avoid exaggerations?, Next: Why are colors mostly variants of blue magenta cyan?, Prev: Is the contrast ratio about adjacent colors?, Up: Frequently Asked Questions
+
+8.2 What does it mean to avoid exaggerations?
+=============================================
+
+The Modus themes are designed with restraint, so that their default
+looks do not overdo it with the application of color.
+
+ *note Customization Options: Customization options.
+
+ This is the non-quantifiable aspect of the themes’ design: the
+artistic part, if you will. There are a lot of cases where color can be
+used inconsiderately, without accounting for layout, typographic, or
+other properties of the presentation. For example, two headings with
+distinct markers, such as leading asterisks in Org buffers, do not have
+to have highly contrasting hues between them in order to be told apart:
+the added element of contrast in hueness does not contribute
+significantly more to the distinction between the headings than colors
+whose hues are relatively closer to each other in the color space.
+
+ Exaggerations can be hard to anticipate or identify. Multiple shades
+of blue and magenta in the same context may not seem optimal: one might
+think that it would be better to use highly contrasting hues to ensure
+that all colors stand out, such as by placing blue next to yellow, next
+to magenta, and green. That would, however, be a case of design for its
+own sake; a case where color is being applied without consideration of
+its end results in the given context. Too many contrasting hues in
+close proximity force an erratic rate to how the eye jumps from one
+piece of text to the next. Whereas multiple shades of, say, blue and
+magenta can suffice to tell things apart and avoid excess coloration: a
+harmonious rhythm.
+
+
+File: modus-themes.info, Node: Why are colors mostly variants of blue magenta cyan?, Next: What is the best setup for legibility?, Prev: What does it mean to avoid exaggerations?, Up: Frequently Asked Questions
+
+8.3 Why are colors mostly variants of blue, magenta, cyan?
+==========================================================
+
+Due to the innate properties of color, some options are better than
+others for the accessibility purposes of the themes, the stylistic
+consistency between ‘modus-operandi’ and ‘modus-vivendi’, and the
+avoidance of exaggerations in design.
+
+ *note What does it mean to avoid exaggerations?::
+
+ What we describe as color is a function of three distinct channels of
+light: red, green, blue. In hexadecimal RGB notation, a color value is
+read as three pairs of red, green, and blue light: ‘#RRGGBB’. Of those
+three, the most luminant is green, while the least luminant is blue.
+
+ The three basic colors represent each of the channels of light. They
+can be intermixed to give us six colors: red and green derive yellow,
+green and blue make cyan, red and blue turn into magenta.
+
+ We can test the luminance of each of those against white and black to
+get a sense of how not all colors are equally good for accessibility
+(white is ‘#ffffff’, which means that all three light channels are fully
+luminated, while black is ‘#000000’ meaning that no light is present
+(notwithstanding display technology)).
+
+ | Name | | #ffffff | #000000 |
+ |---------+---------+---------+---------|
+ | red | #ff0000 | 4.00 | 5.25 |
+ | yellow | #ffff00 | 1.07 | 19.56 |
+ | green | #00ff00 | 1.37 | 15.30 |
+ | cyan | #00ffff | 1.25 | 16.75 |
+ | blue | #0000ff | 8.59 | 2.44 |
+ | magenta | #ff00ff | 3.14 | 6.70 |
+
+ *note Measure color contrast::.
+
+ By reading this table we learn that every color that has a high level
+of green light (green, yellow, cyan) is virtually unreadable against a
+white background and, conversely, can be easily read against black.
+
+ We can then infer that red and blue, in different combinations, with
+green acting as calibrator for luminance, will give us fairly moderate
+colors that pass the 7:1 target. Blue with a bit of green produce
+appropriate variants of cyan. Similarly, blue combined with some red
+and hints of green give us suitable shades of purple.
+
+ Due to the need of maintaining some difference in hueness between
+adjacent colors, it is not possible to make red, green, and yellow the
+main colors, because blue cannot be used to control their luminance and,
+thus the relevant space will shrink considerably.
+
+ *note Is the contrast ratio about adjacent colors?::
+
+ This phenomenon is best illustrated by the following table that
+measures the relative luminance of shades of red, yellow, magenta
+against white:
+
+ | | #ffffff |
+ |---------+---------|
+ | #990000 | 8.92 |
+ | #995500 | 5.75 |
+ | #990099 | 7.46 |
+
+ We notice that equal values of red and blue light in ‘#990099’
+(magenta shade) do not lead to a considerable change in luminance
+compared with ‘#990000’ (red variant). Whereas less amount of green
+light in ‘#995500’ leads to a major drop in luminance relative to white.
+It follows that using the green channel of light to calibrate the
+luminance of colors is more effective than trying to do the same with
+either red or blue (the latter is the least effective in that regard).
+
+ When we need to work with several colors, it is always better to have
+sufficient manoeuvring space, especially since we cannot pick arbitrary
+colors but only those that satisfy the accessibility objectives of the
+themes.
+
+ As for why we do not mostly use green, yellow, cyan for the dark
+theme, it is because those colors are far more luminant than their
+counterparts on the other side of the spectrum, so to ensure that they
+all have about the same contrast ratios we would have to alter their
+hueness considerably. In short, the effect would not be optimal as it
+would lead to exaggerations. Plus, it would make ‘modus-vivendi’ look
+completely different than ‘modus-operandi’, to the effect that the two
+could not be properly considered part of the same project.
+
+
+File: modus-themes.info, Node: What is the best setup for legibility?, Next: Are these color schemes?, Prev: Why are colors mostly variants of blue magenta cyan?, Up: Frequently Asked Questions
+
+8.4 What is the best setup for legibility?
+==========================================
+
+The Modus themes can be conceptually simplified as combinations of color
+values that account for relative luminance and inner harmony. Those
+qualities do not guarantee that every end-user will have the same
+experience, due to differences between people, but also because of
+variances in hardware capabilities and configurations. For the purposes
+of this document, we may only provide suggestions pertaining to the
+latter case.
+
+ ‘modus-operandi’ is best used outdoors or in a room that either gets
+direct sunlight or has plenty of light. Whereas ‘modus-vivendi’ works
+better when there is not a lot of sunshine or the room has a source of
+light that is preferably a faint and/or warm one. It is possible to use
+‘modus-operandi’ at night and ‘modus-vivendi’ during the day, though
+that will depend on several variables, such as one’s overall perception
+of color, the paint on the walls and how that contributes to the
+impression of lightness in the room, the sense of space within the eye’s
+peripheral vision, hardware specifications, and environmental factors.
+
+ In general, an additional source of light other than that of the
+monitor can help reduce eye strain: the eyes are more relaxed when they
+do not have to focus on one point to gather light.
+
+ The monitor’s display settings must be accounted for. Gamma values,
+in particular, need to be calibrated to neither amplify nor distort the
+perception of black. Same principle for sharpness, brightness, and
+contrast as determined by the hardware, which all have an effect on how
+text is read on the screen.
+
+ There are software level methods on offer, such as the XrandR utility
+for the X Window System (X.org), which can make gamma corrections for
+each of the three channels of light (red, green, blue). For example:
+
+ xrandr --output LVDS1 --brightness 1.0 --gamma 0.76:0.75:0.68
+
+ Typography is another variable. Some font families are blurry at
+small point sizes. Others may have a regular weight that is lighter
+(thiner) than that of their peers which may, under certain
+circumstances, cause a halo effect around each glyph.
+
+ The gist is that legibility cannot be fully solved at the theme
+level. The color combinations may have been optimized for
+accessibility, though the remaining contributing factors in each case
+need to be considered in full.
+
+
+File: modus-themes.info, Node: Are these color schemes?, Next: Port the Modus themes to other platforms?, Prev: What is the best setup for legibility?, Up: Frequently Asked Questions
+
+8.5 Are these color schemes?
+============================
+
+No, the Modus themes are not color schemes.
+
+ A color scheme is a collection of colors. A good color scheme is a
+combination of colors with an inner logic or abstract structure.
+
+ A theme is a set of patterns that are applied across different
+contexts. A good theme is one that does so with consistency, though not
+uniformity.
+
+ In practical terms, a color scheme is what one uses when, for
+example, they replace the first sixteen escape sequences of a terminal
+emulator with color values of their preference. The terminal offers the
+option to choose, say, the exact value of what counts as “red”, but does
+not provide the means to control where that is mapped to and whether it
+should also have other qualities such as a bold weight for the
+underlying text or an added background color. In contradistinction,
+Emacs uses constructs known as “faces” which allow the user/developer to
+specify where a given color will be used and whether it should be
+accompanied by other typographic or stylistic attributes.
+
+ By configuring the multitude of faces on offer we thus control both
+which colors are applied and how they appear in their context. When a
+package wants to render each instance of “foo” with the “bar” face, it
+is not requesting a specific color, which makes things considerably more
+flexible as we can treat “bar” in its own right without necessarily
+having to use some color value that we hardcoded somewhere.
+
+ Which brings us to the distinction between consistency and uniformity
+where our goal is always the former: we want things to look similar
+across all interfaces, but we must never force a visual identity where
+that runs contrary to the functionality of the given interface. For
+instance, all links are underlined by default yet there are cases such
+as when viewing listings of emails in Gnus (and Mu4e, Notmuch) where (i)
+it is already understood that one must follow the indicator or headline
+to view its contents and (ii) underlining everything would make the
+interface virtually unusable.
+
+ Again, one must exercise judgement in order to avoid discrimination,
+where “discrimination” refers to:
+
+ • The treatment of substantially different magnitudes as if they were
+ of the same class.
+ • Or the treatment of the same class of magnitudes as if they were of
+ a different class.
+
+ (To treat similar things differently; to treat dissimilar things
+alike.)
+
+ If, in other words, one is to enforce uniformity without accounting
+for the particular requirements of each case—the contextual demands for
+usability beyond matters of color—they are making a not-so-obvious error
+of treating different cases as if they were the same.
+
+ The Modus themes prioritize “thematic consistency” over abstract
+harmony or regularity among their applicable colors. In concrete terms,
+we do not claim that, say, our yellows are the best complements for our
+blues because we generally avoid using complementary colors
+side-by-side, so it is wrong to optimize for a decontextualised
+blue+yellow combination. Not to imply that our colors do not work well
+together because they do, just to clarify that consistency of context is
+what themes must strive for, and that requires widening the scope of the
+design beyond the particularities of a color scheme.
+
+ Long story short: color schemes and themes have different
+requirements. Please do not conflate the two.
+
+
+File: modus-themes.info, Node: Port the Modus themes to other platforms?, Prev: Are these color schemes?, Up: Frequently Asked Questions
+
+8.6 Port the Modus themes to other platforms?
+=============================================
+
+There is no plan to port the themes to other platforms or text editors.
+I (Protesilaos) only use GNU Emacs and thus cannot maintain code that
+targets software I am either not familiar with or am not using on a
+daily basis.
+
+ While it is possible to produce a simulacrum based on a given
+template, doing so would run contrary to how this project is maintained
+where details matter greatly.
+
+ Each program has its own requirements so it won’t always be
+possible—or indeed desirable—to have 1:1 correspondence between what
+applies to Emacs and what should be done elsewhere. No port should ever
+strive to be a copy of the Emacs implementation, as no other program is
+an Emacs equivalent, but instead try to follow the spirit of the design.
+For example, some of the customization options accept a list as their
+value, or an alist, which may not be possible to reproduce on other
+platforms.
+
+ *note Customization options::.
+
+ In other words, if something must be done differently on a certain
+editor then that is acceptable so long as (i) the accessibility
+standards are not compromised and (ii) the overall character of the
+themes remains consistent.
+
+ The former criterion should be crystal clear as it pertains to the
+scientific foundations of the themes: high legibility and taking care of
+the needs of users with red-green/blue-yellow color deficiency
+(deuteranopia and tritanopia) by avoiding red+green color coding
+paradigms and/or by providing yellow+blue variants for deuteranopia and
+red+cyan for tritanopia (*note Overview::).
+
+ The latter criterion is the “je ne sais quoi” of the artistic aspect
+of the themes, which is partially fleshed out in this manual.
+
+ *note Frequently Asked Questions::.
+
+ With regard to the artistic aspect (where “art” qua skill may amount
+to an imprecise science), there is no hard-and-fast rule in effect as it
+requires one to exercize discretion and make decisions based on
+context-dependent information or constraints. As is true with most
+things in life, when in doubt, do not cling on to the letter of the law
+but try to understand its spirit.
+
+ For a trivial example: the curly underline that Emacs draws for
+spelling errors is thinner than, e.g., what a graphical web browser has,
+so if I was to design for an editor than has a thicker curly underline I
+would make the applicable colors less intense to counterbalance the
+typographic intensity of the added thickness.
+
+ With those granted, if anyone is willing to develop a port of the
+themes, they are welcome to contact me and I will do my best to help
+them in their efforts.
+
+
+File: modus-themes.info, Node: Contributing, Next: Acknowledgements, Prev: Frequently Asked Questions, Up: Top
+
+9 Contributing
+**************
+
+This section documents the canonical sources of the themes and the ways
+in which you can contribute to their ongoing development.
+
+* Menu:
+
+* Sources of the themes::
+* Issues you can help with::
+* Patches require copyright assignment to the FSF::
+
+
+File: modus-themes.info, Node: Sources of the themes, Next: Issues you can help with, Up: Contributing
+
+9.1 Sources of the themes
+=========================
+
+ • Package name (GNU ELPA): ‘modus-themes’
+ • Official manual: <https://protesilaos.com/emacs/modus-themes>
+ • Change log: <https://protesilaos.com/emacs/modus-themes-changelog>
+ • Color palette: <https://protesilaos.com/emacs/modus-themes-colors>
+ • Sample pictures:
+ <https://protesilaos.com/emacs/modus-themes-pictures>
+ • 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>
+ • Backronym: My Old Display Unexpectedly Sharpened ... themes
+
+
+File: modus-themes.info, Node: Issues you can help with, Next: Patches require copyright assignment to the FSF, Prev: Sources of the themes, Up: Contributing
+
+9.2 Issues you can help with
+============================
+
+A few tasks you can help with by sending an email to the general
+modus-themes public mailing list
+(https://lists.sr.ht/~protesilaos/modus-themes).
+
+ • Suggest refinements to packages that are covered.
+ • Report packages not covered thus far.
+ • Report bugs, inconsistencies, shortcomings.
+ • Help expand the documentation of covered-but-not-styled packages.
+ • Suggest refinements to the color palette.
+ • Help expand this document or any other piece of documentation.
+ • Send patches for code refinements (if you need, ask me for help
+ with Git—we all start out as beginners).
+
+ *note Patches require copyright assignment to the FSF::.
+
+ It is preferable that your feedback includes some screenshots, GIFs,
+or short videos, as well as further instructions to reproduce a given
+setup. Though this is not a requirement.
+
+ Whatever you do, bear in mind the overarching objective of the Modus
+themes: to keep a contrast ratio that is greater or equal to 7:1 between
+background and foreground colors. If a compromise is ever necessary
+between aesthetics and accessibility, it shall always be made in the
+interest of the latter.
+
+
+File: modus-themes.info, Node: Patches require copyright assignment to the FSF, Prev: Issues you can help with, Up: Contributing
+
+9.3 Patches require copyright assignment to the FSF
+===================================================
+
+Code contributions are most welcome. For any major edit (more than 15
+lines, or so, in aggregate per person), you need to make a copyright
+assignment to the Free Software Foundation. This is necessary because
+the themes are part of the upstream Emacs distribution: the FSF must at
+all times be in a position to enforce the GNU General Public License.
+
+ Copyright assignment is a simple process. Check the request form
+below (please adapt it accordingly). You must write an email to the
+address mentioned in the form and then wait for the FSF to send you a
+legal agreement. Sign the document and file it back to them. This
+could all happen via email and take about a week. You are encouraged to
+go through this process. You only need to do it once. It will allow
+you to make contributions to Emacs in general.
+
+ Please email the following information to assign@gnu.org, and we
+ will send you the assignment form for your past and future changes.
+
+ Please use your full legal name (in ASCII characters) as the subject
+ line of the message.
+
+ REQUEST: SEND FORM FOR PAST AND FUTURE CHANGES
+
+ [What is the name of the program or package you're contributing to?]
+
+ GNU Emacs
+
+ [Did you copy any files or text written by someone else in these changes?
+ Even if that material is free software, we need to know about it.]
+
+ Copied a few snippets from the same files I edited. Their author,
+ Protesilaos Stavrou, has already assigned copyright to the Free Software
+ Foundation.
+
+ [Do you have an employer who might have a basis to claim to own
+ your changes? Do you attend a school which might make such a claim?]
+
+
+ [For the copyright registration, what country are you a citizen of?]
+
+
+ [What year were you born?]
+
+
+ [Please write your email address here.]
+
+
+ [Please write your postal address here.]
+
+
+
+
+
+ [Which files have you changed so far, and which new files have you written
+ so far?]
+
+
+
+File: modus-themes.info, Node: Acknowledgements, Next: GNU Free Documentation License, Prev: Contributing, Up: Top
+
+10 Acknowledgements
+*******************
+
+The Modus themes are a collective effort. Every bit of work matters.
+
+Author/maintainer
+ Protesilaos Stavrou.
+
+Contributions to code or documentation
+ Aleksei Gusev, Alex Griffin, Anders Johansson, Antonio Ruiz, Basil
+ L. Contovounesios, Björn Lindström, Carlo Zancanaro, Christian
+ Tietze, Daniel Mendler, David Edmondson, Eli Zaretskii, Fritz
+ Grabo, Gautier Ponsinet, Illia Ostapyshyn, Kévin Le Gouguec, Koen
+ van Greevenbroek, Kostadin Ninev, Madhavan Krishnan, Manuel Giraud,
+ Markus Beppler, Matthew Stevenson, Mauro Aranda, Nacho Barrientos,
+ Nicolas De Jaeghere, Paul David, Philip Kaludercic, Pierre
+ Téchoueyres, Rudolf Adamkovič, Sergey Nichiporchik, Shreyas
+ Ragavan, Stefan Kangas, Stephen Berman, Stephen Gildea, Steve
+ Downey, Tomasz Hołubowicz, Utkarsh Singh, Vincent Murphy, Xinglu
+ Chen, Yuanchen Xie, fluentpwn, okamsn.
+
+Ideas and user feedback
+ Aaron Jensen, Adam Porter, Adam Spiers, Adrian Manea, Aleksei
+ Pirogov, Alex Griffin, Alex Koen, Alex Peitsinis, Alexey Shmalko,
+ Alok Singh, Anders Johansson, André Alexandre Gomes, Andrew Tropin,
+ Antonio Hernández Blas, Arif Rezai, Augusto Stoffel, Basil L.
+ Contovounesios, Bernd Rellermeyer, Burgess Chang, Charlotte Van
+ Petegem, Christian Tietze, Christopher Dimech, Christopher League,
+ Damien Cassou, Daniel Mendler, Dario Gjorgjevski, David Edmondson,
+ Davor Rotim, Divan Santana, Eliraz Kedmi, Emanuele Michele Alberto
+ Monterosso, Farasha Euker, Feng Shu, Gautier Ponsinet, Gerry
+ Agbobada, Gianluca Recchia, Gonçalo Marrafa, Guilherme Semente,
+ Gustavo Barros, Hörmetjan Yiltiz, Ilja Kocken, Imran Khan, Iris
+ Garcia, Ivan Popovych, James Ferguson, Jeremy Friesen, Jerry Zhang,
+ Johannes Grødem, John Haman, Jonas Collberg, Jorge Morais, Joshua
+ O’Connor, Julio C. Villasante, Kenta Usami, Kevin Fleming, Kévin
+ Le Gouguec, Kevin Kainan Li, Kostadin Ninev, Laith Bahodi, Lasse
+ Lindner, Len Trigg, Lennart C. Karssen, Luis Miguel Castañeda,
+ Magne Hov, Manuel Giraud, Manuel Uberti, Mark Bestley, Mark Burton,
+ Mark Simpson, Marko Kocic, Markus Beppler, Matt Armstrong, Matthias
+ Fuchs, Mattias Engdegård, Mauro Aranda, Maxime Tréca, Michael
+ Goldenberg, Morgan Smith, Morgan Willcock, Murilo Pereira, Nicky
+ van Foreest, Nicolas De Jaeghere, Nicolas Semrau, Olaf Meeuwissen,
+ Oliver Epper, Pablo Stafforini, Paul Poloskov, Pengji Zhang, Pete
+ Kazmier, Peter Wu, Philip Kaludercic, Pierre Téchoueyres,
+ Przemysław Kryger, Robert Hepple, Roman Rudakov, Russell Sim, Ryan
+ Phillips, Rytis Paškauskas, Rudolf Adamkovič, Sam Kleinman, Samuel
+ Culpepper, Saša Janiška, Shreyas Ragavan, Simon Pugnet, Steve
+ Downey, Tassilo Horn, Thanos Apollo, Thibaut Verron, Thomas
+ Heartman, Togan Muftuoglu, Tony Zorman, Trey Merkley, Tomasz
+ Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh, Vincent Foley,
+ Zoltan Kiraly. As well as users: Ben, CsBigDataHub1, Emacs
+ Contrib, Eugene, Fourchaux, Fredrik, Moesasji, Nick, Summer Emacs,
+ TheBlob42, TitusMu, Trey, bepolymathe, bit9tream, bangedorrunt,
+ derek-upham, doolio, fleimgruber, gitrj95, iSeeU, jixiuf, okamsn,
+ pRot0ta1p, soaringbird, tumashu, wakamenod.
+
+Packaging
+ Basil L. Contovounesios, Eli Zaretskii, Glenn Morris, Mauro Aranda,
+ Richard Stallman, Stefan Kangas (core Emacs), Stefan Monnier (GNU
+ Elpa), André Alexandre Gomes, Andrew Tropin, Dimakakos Dimos,
+ Morgan Smith, Nicolas Goaziou (Guix), Dhavan Vaidya (Debian).
+
+Inspiration for certain features
+ Bozhidar Batsov (zenburn-theme), Fabrice Niessen (leuven-theme).
+
+ Special thanks (from A-Z) to Daniel Mendler, Gustavo Barros, Manuel
+Uberti, Nicolas De Jaeghere, and Omar Antolín Camarena for their long
+time contributions and insightful commentary on key aspects of the
+themes’ design and/or aspects of their functionality.
+
+ All errors are my own.
+
+
+File: modus-themes.info, Node: GNU Free Documentation License, Next: Indices, Prev: Acknowledgements, Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+ Version 1.3, 3 November 2008
+
+ Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <https://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document “free” in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of “copyleft”, which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book. We
+ recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it can
+ be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ “Document”, below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as “you”. You accept
+ the license if you copy, modify or distribute the work in a way
+ requiring permission under copyright law.
+
+ A “Modified Version” of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A “Secondary Section” is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document’s overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The “Invariant Sections” are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the
+ notice that says that the Document is released under this License.
+ If a section does not fit the above definition of Secondary then it
+ is not allowed to be designated as Invariant. The Document may
+ contain zero Invariant Sections. If the Document does not identify
+ any Invariant Sections then there are none.
+
+ The “Cover Texts” are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A “Transparent” copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed
+ of pixels) generic paint programs or (for drawings) some widely
+ available drawing editor, and that is suitable for input to text
+ formatters or for automatic translation to a variety of formats
+ suitable for input to text formatters. A copy made in an otherwise
+ Transparent file format whose markup, or absence of markup, has
+ been arranged to thwart or discourage subsequent modification by
+ readers is not Transparent. An image format is not Transparent if
+ used for any substantial amount of text. A copy that is not
+ “Transparent” is called “Opaque”.
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML, PostScript or PDF designed for human modification.
+ Examples of transparent image formats include PNG, XCF and JPG.
+ Opaque formats include proprietary formats that can be read and
+ edited only by proprietary word processors, SGML or XML for which
+ the DTD and/or processing tools are not generally available, and
+ the machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The “Title Page” means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, “Title
+ Page” means the text near the most prominent appearance of the
+ work’s title, preceding the beginning of the body of the text.
+
+ The “publisher” means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section “Entitled XYZ” means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.)
+ To “Preserve the Title” of such a section when you modify the
+ Document means that it remains a section “Entitled XYZ” according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document’s license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the title
+ equally prominent and visible. You may add other material on the
+ covers in addition. Copying with changes limited to the covers, as
+ long as they preserve the title of the Document and satisfy these
+ conditions, can be treated as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with
+ each Opaque copy a computer-network location from which the general
+ network-using public has access to download using public-standard
+ network protocols a complete Transparent copy of the Document, free
+ of added material. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of copies,
+ to give them a chance to provide you with an updated version of the
+ Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with the
+ Modified Version filling the role of the Document, thus licensing
+ distribution and modification of the Modified Version to whoever
+ possesses a copy of it. In addition, you must do these things in
+ the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that
+ version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document’s
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled “History”, Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the
+ Title Page. If there is no section Entitled “History” in the
+ Document, create one stating the title, year, authors, and
+ publisher of the Document as given on its Title Page, then add
+ an item describing the Modified Version as stated in the
+ previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ “History” section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+
+ K. For any section Entitled “Acknowledgements” or “Dedications”,
+ Preserve the Title of the section, and preserve in the section
+ all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document, unaltered
+ in their text and in their titles. Section numbers or the
+ equivalent are not considered part of the section titles.
+
+ M. Delete any section Entitled “Endorsements”. Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ “Endorsements” or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version’s
+ license notice. These titles must be distinct from any other
+ section titles.
+
+ You may add a section Entitled “Endorsements”, provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties—for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition of
+ a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end of
+ the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document
+ already includes a cover text for the same cover, previously added
+ by you or by arrangement made by the same entity you are acting on
+ behalf of, you may not add another; but you may replace the old
+ one, on explicit permission from the previous publisher that added
+ the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all
+ of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ “History” in the various original documents, forming one section
+ Entitled “History”; likewise combine any sections Entitled
+ “Acknowledgements”, and any sections Entitled “Dedications”. You
+ must delete all sections Entitled “Endorsements.”
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the documents
+ in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of a
+ storage or distribution medium, is called an “aggregate” if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation’s users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document’s Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled “Acknowledgements”,
+ “Dedications”, or “History”, the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly and
+ finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from you
+ under this License. If your rights have been terminated and not
+ permanently reinstated, receipt of a copy of some or all of the
+ same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ <https://www.gnu.org/licenses/>.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License “or any later version” applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If the
+ Document does not specify a version number of this License, you may
+ choose any version ever published (not as a draft) by the Free
+ Software Foundation. If the Document specifies that a proxy can
+ decide which future versions of this License can be used, that
+ proxy’s public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A “Massive Multiauthor Collaboration” (or “MMC”) contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ “Incorporate” means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is “eligible for relicensing” if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the “with...Texts.” line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+File: modus-themes.info, Node: Indices, Prev: GNU Free Documentation License, Up: Top
+
+B Indices
+*********
+
+* Menu:
+
+* Function index::
+* Variable index::
+* Concept index::
+
+
+File: modus-themes.info, Node: Function index, Next: Variable index, Up: Indices
+
+B.1 Function index
+==================
+
+
+* Menu:
+
+* modus-themes-contrast: Measure color contrast.
+ (line 6)
+* modus-themes-get-color-value: Get a single color from the palette.
+ (line 8)
+* modus-themes-list-colors: Preview theme colors. (line 6)
+* modus-themes-list-colors-current: Preview theme colors. (line 12)
+* modus-themes-load-theme: Enable and load. (line 6)
+* modus-themes-preview-colors: Preview theme colors. (line 25)
+* modus-themes-preview-colors-current: Preview theme colors. (line 25)
+* modus-themes-toggle: Enable and load. (line 6)
+* modus-themes-wcag-formula: Measure color contrast.
+ (line 6)
+* modus-themes-with-colors: Use theme colors in code with modus-themes-with-colors.
+ (line 12)
+
+
+File: modus-themes.info, Node: Variable index, Next: Concept index, Prev: Function index, Up: Indices
+
+B.2 Variable index
+==================
+
+
+* Menu:
+
+* modus-operandi-deuteranopia-palette-overrides: Palette overrides.
+ (line 30)
+* modus-operandi-palette-overrides: Palette overrides. (line 28)
+* modus-operandi-tinted-palette-overrides: Palette overrides. (line 32)
+* modus-operandi-tritanopia-palette-overrides: Palette overrides.
+ (line 34)
+* modus-themes-after-load-theme-hook: Enable and load. (line 6)
+* modus-themes-bold-constructs: Bold constructs. (line 6)
+* modus-themes-common-palette-overrides: Palette overrides. (line 22)
+* modus-themes-completions: Completion UIs. (line 6)
+* modus-themes-custom-auto-reload: Custom reload theme. (line 6)
+* modus-themes-disable-other-themes: Disable other themes. (line 6)
+* modus-themes-headings: Heading styles. (line 6)
+* modus-themes-italic-constructs: Italic constructs. (line 6)
+* modus-themes-mixed-fonts: Mixed fonts. (line 6)
+* modus-themes-org-blocks: Org mode blocks. (line 6)
+* modus-themes-preset-overrides-cooler: Palette override presets.
+ (line 29)
+* modus-themes-preset-overrides-faint: Palette override presets.
+ (line 16)
+* modus-themes-preset-overrides-intense: Palette override presets.
+ (line 25)
+* modus-themes-preset-overrides-warmer: Palette override presets.
+ (line 29)
+* modus-themes-prompts: Command prompts. (line 6)
+* modus-themes-variable-pitch-ui: UI typeface. (line 6)
+* modus-vivendi-deuteranopia-palette-overrides: Palette overrides.
+ (line 38)
+* modus-vivendi-palette-overrides: Palette overrides. (line 36)
+* modus-vivendi-tinted-palette-overrides: Palette overrides. (line 40)
+* modus-vivendi-tritanopia-palette-overrides: Palette overrides.
+ (line 42)
+
+
+File: modus-themes.info, Node: Concept index, Prev: Variable index, Up: Indices
+
+B.3 Concept index
+=================
+
+
+* Menu:
+
+* Avoiding exaggerations in design: What does it mean to avoid exaggerations?.
+ (line 6)
+* Bold and italic fonts: Configure bold and italic faces.
+ (line 6)
+* Changelog: Learn about the latest changes.
+ (line 6)
+* Color accuracy of terminal emulators: More accurate colors in terminal emulators.
+ (line 6)
+* Color contrast: Measure color contrast.
+ (line 6)
+* Contrast between adjacent colors: Is the contrast ratio about adjacent colors?.
+ (line 6)
+* Contributing: Issues you can help with.
+ (line 6)
+* Contributors: Acknowledgements. (line 6)
+* Essential configuration: Enable and load. (line 6)
+* Explicitly supported packages: Supported packages. (line 6)
+* Font configurations: Font configurations for Org and others.
+ (line 6)
+* Fonts in EWW, Elfeed, Ement, and SHR: Note on SHR fonts. (line 6)
+* Frequently Asked Questions: Frequently Asked Questions.
+ (line 6)
+* General setup for readability: What is the best setup for legibility?.
+ (line 6)
+* Implicitly supported packages: Indirectly covered packages.
+ (line 6)
+* Innate color qualities of the palette: Why are colors mostly variants of blue magenta cyan?.
+ (line 6)
+* load-theme VS enable-theme: Differences between loading and enabling.
+ (line 6)
+* Org custom emphasis faces: Custom Org emphasis faces.
+ (line 6)
+* Org custom todo faces: Custom Org todo keyword and priority faces.
+ (line 6)
+* Porting the themes to other editors: Port the Modus themes to other platforms?.
+ (line 6)
+* Preview named colors or semantic color mappings: Preview theme colors.
+ (line 6)
+* Pure white and pure black in terminal emulators: Range of color with terminal emulators.
+ (line 6)
+* Remapping faces: Remap face with local value.
+ (line 6)
+* Remapping pdf-tools backdrop: Backdrop for pdf-tools.
+ (line 6)
+* sample configuration: Sample configuration with and without use-package.
+ (line 6)
+* Screenshots: How do the themes look like.
+ (line 6)
+* Sources of the themes: Sources of the themes. (line 6)
+* Switch themes without load-theme: Toggle themes without reloading them.
+ (line 6)
+* Themes, not color schemes: Are these color schemes?.
+ (line 6)
+* Use colors from the palette anywhere: Use theme colors in code with modus-themes-with-colors.
+ (line 6)
+* use-package configuration: Sample configuration with and without use-package.
+ (line 6)
+
+
+
+Tag Table:
+Node: Top874
+Node: Overview8129
+Node: How do the themes look like10901
+Node: Learn about the latest changes11260
+Node: Installation11648
+Node: Install manually from source12578
+Node: Install from the archives13403
+Node: Install on GNU/Linux14002
+Node: Debian 11 Bullseye14495
+Node: GNU Guix14905
+Node: Dealing with byte compilation errors15188
+Node: Enable and load16346
+Node: The require-theme for built-in Emacs themes19200
+Node: Sample configuration with and without use-package20320
+Node: Differences between loading and enabling23231
+Node: Customization options25269
+Node: Custom reload theme29017
+Node: Disable other themes29937
+Node: Bold constructs31135
+Node: Italic constructs31972
+Node: Mixed fonts32743
+Node: Command prompts33739
+Node: Completion UIs35544
+Node: Org mode blocks38346
+Node: Heading styles40251
+Node: UI typeface44605
+Node: Palette overrides45536
+Node: Advanced customization49871
+Node: Palette override presets51534
+Node: Stylistic variants using palette overrides54326
+Node: Make the mode line borderless56238
+Node: Make the active mode line colorful57840
+Node: Make the tab bar more or less colorful59785
+Node: Make the fringe invisible or another color62016
+Node: Make links use subtle or no underlines63510
+Node: Make prompts more or less colorful64507
+Node: Make completion matches more or less colorful66171
+Node: Make comments yellow and strings green70071
+Node: Make code syntax use the old alt-syntax style71974
+Node: Make use of alternative styles for code syntax75255
+Node: Make matching parenthesis more or less intense78919
+Node: Make box buttons more or less gray80355
+Node: Make TODO and DONE more or less intense81661
+Node: Make headings more or less colorful83364
+Node: Make Org agenda more or less colorful85764
+Node: Make inline code in prose use alternative styles89224
+Node: Make mail citations and headers more or less colorful91765
+Node: Make the region preserve text colors plus other styles94460
+Node: Make mouse highlights more or less colorful96271
+Node: Make language underlines less colorful97578
+Node: Make line numbers use alternative styles99024
+Node: Make diffs use only a foreground100961
+Node: Make deuteranopia diffs red and blue instead of yellow and blue103731
+Node: Make the themes look like what the maintainer uses106153
+Node: More accurate colors in terminal emulators110851
+Node: Range of color with terminal emulators112143
+Node: Preview theme colors114857
+Node: Per-theme customization settings116702
+Node: Get a single color from the palette118048
+Node: Use theme colors in code with modus-themes-with-colors120296
+Node: Do not extend the region background122629
+Node: Add padding to mode line123427
+Node: Remap face with local value125991
+Node: Font configurations for Org and others128414
+Ref: Font configurations for Org and others-Footnote-1131323
+Node: Configure bold and italic faces131510
+Node: Custom Org todo keyword and priority faces135667
+Node: Custom Org emphasis faces139386
+Node: Update Org block delimiter fontification144209
+Node: Measure color contrast146126
+Node: Load theme depending on time of day148824
+Node: Backdrop for pdf-tools149834
+Node: Toggle themes without reloading them152733
+Node: A theme-agnostic hook for theme loading154009
+Node: Use more spacious margins or padding in Emacs frames156462
+Node: Custom hl-todo colors160552
+Node: Add support for solaire-mode162090
+Node: Face coverage165001
+Node: Supported packages165453
+Node: Indirectly covered packages171159
+Node: Notes on individual packages172528
+Node: Note on calendarel weekday and weekend colors173628
+Node: Note on git-gutter in Doom Emacs174776
+Node: Note on php-mode multiline comments177117
+Node: Note on underlines in compilation buffers177870
+Node: Note on inline Latex in Org buffers178707
+Node: Note on dimmerel179317
+Node: Note on display-fill-column-indicator-mode180802
+Node: Note on highlight-parenthesesel182201
+Node: Note on mmm-modeel background colors188179
+Node: Note for prism190479
+Node: Note on company-mode overlay pop-up193647
+Ref: Note on company-mode overlay pop-up-Footnote-1194377
+Ref: Note on company-mode overlay pop-up-Footnote-2194444
+Node: Note on ERC escaped color sequences194499
+Ref: Note on ERC escaped color sequences-Footnote-1195927
+Node: Note on powerline or spaceline196037
+Node: Note on SHR colors196451
+Node: Note on SHR fonts196875
+Node: Note on Ement colors and fonts197520
+Node: Note on pdf-tools link hints199030
+Node: Note on the Notmuch logo201490
+Node: Note on goto-address-mode faces202028
+Node: Frequently Asked Questions203146
+Node: Is the contrast ratio about adjacent colors?203777
+Node: What does it mean to avoid exaggerations?205284
+Node: Why are colors mostly variants of blue magenta cyan?207134
+Node: What is the best setup for legibility?211440
+Node: Are these color schemes?214085
+Node: Port the Modus themes to other platforms?217767
+Node: Contributing220611
+Node: Sources of the themes221008
+Node: Issues you can help with221902
+Node: Patches require copyright assignment to the FSF223293
+Node: Acknowledgements225513
+Node: GNU Free Documentation License229649
+Node: Indices255013
+Node: Function index255192
+Node: Variable index256375
+Node: Concept index258831
+
+End Tag Table
+
+
+Local Variables:
+coding: utf-8
+End:
diff --git a/elpa/modus-themes-4.3.0/doc/modus-themes.org b/elpa/modus-themes-4.3.0/doc/modus-themes.org
@@ -0,0 +1,5906 @@
+#+title: Modus themes for GNU Emacs
+#+author: Protesilaos Stavrou
+#+email: info@protesilaos.com
+#+language: en
+#+options: ':t toc:nil author:t email:t num:t
+#+startup: content
+#+macro: stable-version 4.3.0
+#+macro: release-date 2023-09-19
+#+macro: development-version 4.4.0-dev
+#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
+#+macro: space @@texinfo:@: @@
+#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
+#+texinfo_filename: modus-themes.info
+#+texinfo_dir_category: Emacs misc features
+#+texinfo_dir_title: Modus Themes: (modus-themes)
+#+texinfo_dir_desc: Elegant, highly legible and customizable themes
+#+texinfo_header: @set MAINTAINERSITE @uref{https://protesilaos.com,maintainer webpage}
+#+texinfo_header: @set MAINTAINER Protesilaos Stavrou
+#+texinfo_header: @set MAINTAINEREMAIL @email{info@protesilaos.com}
+#+texinfo_header: @set MAINTAINERCONTACT @uref{mailto:info@protesilaos.com,contact the maintainer}
+
+#+texinfo: @insertcopying
+
+This manual, written by Protesilaos Stavrou, describes the
+customization options for the Modus themes, and provides every other
+piece of information pertinent to them.
+
+The documentation furnished herein corresponds to stable version
+{{{stable-version}}}, released on {{{release-date}}}. 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 {{{development-version}}}.
+
++ Package name (GNU ELPA): ~modus-themes~
++ Official manual: <https://protesilaos.com/emacs/modus-themes>
++ Change log: <https://protesilaos.com/emacs/modus-themes-changelog>
++ Color palette: <https://protesilaos.com/emacs/modus-themes-colors>
++ Sample pictures: <https://protesilaos.com/emacs/modus-themes-pictures>
++ 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>
++ Backronym: My Old Display Unexpectedly Sharpened ... themes
+
+#+toc: headlines 8 insert TOC here, with eight headline levels
+
+* COPYING
+:properties:
+:copying: t
+:custom_id: h:b14c3fcb-13dd-4144-9d92-2c58b3ed16d3
+:end:
+
+Copyright (C) 2020-2023 Free Software Foundation, Inc.
+
+#+begin_quote
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover Texts being “A GNU Manual,” and
+with the Back-Cover Texts as in (a) below. A copy of the license is
+included in the section entitled “GNU Free Documentation License.”
+
+(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and
+modify this GNU manual.”
+#+end_quote
+
+* Overview
+:properties:
+:custom_id: h:f0f3dbcb-602d-40cf-b918-8f929c441baf
+:end:
+
+The Modus themes are designed for accessible readability. They
+conform with the highest standard for color contrast between
+combinations of background and foreground values. For small sized
+text, this corresponds to the WCAG AAA standard, which specifies a
+minimum rate of distance in relative luminance of 7:1.
+
+The Modus themes consist of eight themes, divided into four subgroups.
+
+- Main themes :: ~modus-operandi~ is the project's main light theme,
+ while ~modus-vivendi~ is its dark counterpart. These two themes are
+ part of the project since its inception. They are designed to cover
+ a broad range of needs and are, in the opinion of the author, the
+ reference for what a highly legible "default" theme should look
+ like.
+
+- Tinted themes :: ~modus-operandi-tinted~ and ~modus-vivendi-tinted~
+ are variants of the two main themes. They slightly tone down the
+ intensity of the background and provide a bit more color variety.
+ ~modus-operandi-tinted~ has a set of base tones that are shades of
+ light ochre (earthly colors), while ~modus-vivendi-tinted~ gives a
+ night sky impression.
+
+- Deuteranopia themes :: ~modus-operandi-deuteranopia~ and its
+ companion ~modus-vivendi-deuteranopia~ are optimized for users with
+ red-green color deficiency. This means that they do not use red and
+ green hues for color-coding purposes, such as for diff removed and
+ added lines. Instead, they implement colors that are discernible by
+ users with deueteranopia or deuteranomaly (mostly yellow and blue
+ hues).
+
+- Tritanopia themes :: ~modus-operandi-tritanopia~ and its counterpart
+ ~modus-vivendi-tritanopia~ are optimized for users with blue-yellow
+ color deficiency. The idea is the same as with the deuteranopia
+ variants: color coding relies only on hues that are accessible to
+ people with tritanopia or tritanomaly, namely, shades of red and
+ cyan.
+
+To ensure that users have a consistently accessible experience, the
+themes strive to achieve as close to full face coverage as possible,
+while still targeting a curated list of well-maintained packages
+([[#h:a9c8f29d-7f72-4b54-b74b-ddefe15d6a19][Face coverage]]).
+
+The overarching objective of this project is to always offer
+accessible color combinations. There shall never be a compromise on
+this principle. If there arises an inescapable trade-off between
+usability and stylistic considerations, we will always opt for the
+former.
+
+Starting with version 0.12.0 and onwards, the themes are built into GNU
+Emacs.
+
+** How do the themes look like
+:properties:
+:custom_id: h:69b92089-069c-4ba1-9d94-cc3415fc4f87
+:end:
+#+cindex: Screenshots
+
+Check the web page with [[https://protesilaos.com/emacs/modus-themes-pictures/][the screen shots]]. Note that the themes are
+highly customizable ([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization options]]).
+
+** Learn about the latest changes
+:properties:
+:custom_id: h:2cc37c36-6c1a-48b2-a010-1050b270ee18
+:end:
+#+cindex: Changelog
+
+Please refer to the [[https://protesilaos.com/emacs/modus-themes-changelog][web page with the change log]]. It is comprehensive
+and covers everything that goes into every tagged release of the themes.
+
+* Installation
+:properties:
+:custom_id: h:1af85373-7f81-4c35-af25-afcef490c111
+:end:
+
+The Modus themes are distributed with Emacs starting with version 28.1.
+On older versions of Emacs, they can be installed using Emacs' package
+manager or manually from their code repository. There also exist
+packages for distributions of GNU/Linux.
+
+Emacs 28 ships with ~modus-themes~ version =1.6.0=. Emacs 29 includes
+version =3.0.0=. Emacs 30 provides a newer, refactored version that
+thoroughly refashions how the themes are implemented and customized.
+Such major versions are not backward-compatible due to the limited
+resources at the maintainer's disposal to support multiple versions of
+Emacs and of the themes across the years.
+
+** Install manually from source
+:properties:
+:custom_id: h:da3414b7-1426-46b8-8e76-47b845b76fd0
+:end:
+
+In the following example, we are assuming that your Emacs files are
+stored in {{{file(~/.emacs.d)}}} and that you want to place the Modus
+themes in {{{file(~/.emacs.d/modus-themes)}}}.
+
+1. Get the source and store it in the desired path by running the
+ following in the command line shell:
+
+: $ git clone https://gitlab.com/protesilaos/modus-themes.git ~/.emacs.d/modus-themes
+
+2. Add that path to your known Elisp libraries' list, by placing this
+ snippet of Emacs Lisp in your init file (e.g. {{{file(init.el)}}}):
+
+#+begin_src emacs-lisp
+(add-to-list 'load-path "~/.emacs.d/modus-themes")
+#+end_src
+
+The themes are now ready to be used: [[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]].
+
+** Install from the archives
+:properties:
+:custom_id: h:c4b10085-149f-43e2-bd4d-347f33aee054
+:end:
+
+The ~modus-themes~ package is available from the GNU ELPA archive, which
+is configured by default.
+
+Prior to querying any package archive, make sure to update the index,
+with {{{kbd(M-x package-refresh-contents)}}}. Then all you need to do
+is type {{{kbd(M-x package-install)}}} and specify the ~modus-themes~.
+
+Once installed, the themes are ready to be used: [[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]].
+
+** Install on GNU/Linux
+:properties:
+:custom_id: h:da640eb1-95dd-4e86-bb4e-1027b27885f0
+:end:
+
+The themes are also available from the archives of some distributions of
+GNU/Linux. These should correspond to a tagged release rather than
+building directly from the latest Git commit. It all depends on the
+distro's packaging policies.
+
+*** Debian 11 Bullseye
+:properties:
+:custom_id: h:7e570360-9ee6-4bc5-8c04-9dc11418a3e4
+:end:
+
+The themes are part of Debian 11 Bullseye. Get them with:
+
+#+begin_src sh
+sudo apt install elpa-modus-themes
+#+end_src
+
+They are now ready to be used: [[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]].
+
+NOTE that Debian's package is severely out-of-date as of this writing
+2022-07-24 09:57 +0300.
+
+*** GNU Guix
+:properties:
+:custom_id: h:a4ca52cd-869f-46a5-9e16-4d9665f5b88e
+:end:
+
+Users of Guix can get the themes with this command:
+
+#+begin_src sh
+guix package -i emacs-modus-themes
+#+end_src
+
+They are now ready to be used: [[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]].
+
+** Dealing with byte compilation errors
+:properties:
+:custom_id: h:e6268471-e847-4c9d-998f-49a83257b7f1
+:end:
+
+From time to time, we receive bug reports pertaining to errors with
+byte compilation. These seldom have to do with faulty code in the
+themes: it might be a shortcoming of {{{file(package.el)}}}, some
+regression in the current development target of Emacs, a
+misconfiguration in an otherwise exotic setup, and the like.
+
+The common solution with a stable version of Emacs is to:
+
+1. Delete the ~modus-themes~ package.
+2. Close the current Emacs session.
+3. Install the ~modus-themes~ again.
+
+For those building Emacs directly from source, the solution may involve
+reverting to an earlier commit in emacs.git.
+
+At any rate, if you encounter such an issue please report it: we will
+either fix the bug on our end if it is truly ours, or help forward it to
+the relevant upstream maintainer. Whatever you do, please understand
+that a build failure does not mean we are necessarily doing something
+wrong.
+
+[[#h:6536c8d5-3f98-43ab-a787-b94120e735e8][Issues you can help with]].
+
+* Enable and load
+:properties:
+:custom_id: h:3f3c3728-1b34-437d-9d0c-b110f5b161a9
+:end:
+#+findex: modus-themes-toggle
+#+findex: modus-themes-load-theme
+#+vindex: modus-themes-after-load-theme-hook
+#+cindex: Essential configuration
+
+NOTE that Emacs can load multiple themes, which typically produces
+undesirable results and undoes the work of the designer. Use the
+~disable-theme~ command if you are trying other themes beside the
+Modus collection ([[#h:adb0c49a-f1f9-4690-868b-013a080eed68][Option for disabling other themes while loading Modus]]).
+
+Users of the built-in themes cannot ~require~ the package as usual
+because there is no package to speak of. Instead, things are simpler
+as built-in themes are considered safe. All one needs is to load the
+theme of their preference by adding either form to their init file:
+
+#+begin_src emacs-lisp
+(load-theme 'modus-operandi) ; Light theme
+(load-theme 'modus-vivendi) ; Dark theme
+#+end_src
+
+Remember that the Modus themes are six themes ([[#h:f0f3dbcb-602d-40cf-b918-8f929c441baf][Overview]]). Adapt the
+above snippet accordingly.
+
+Users of packaged variants of the themes must add a few more lines to
+ensure that everything works as intended. First, one has to require the
+main library before loading one of the themes:
+
+#+begin_src emacs-lisp
+(require 'modus-themes)
+#+end_src
+
+One can activate a theme with something like the following expression,
+replacing ~modus-operandi~ with their preferred Modus theme:
+
+#+begin_src emacs-lisp
+(load-theme 'modus-operandi :no-confirm)
+#+end_src
+
+Changes to the available customization options must always be evaluated
+before loading a theme ([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]]). Reload a theme for
+new changes to take effect.
+
+This is how a basic setup could look like ([[#h:b66b128d-54a4-4265-b59f-4d1ea2feb073][The require-theme for built-in Emacs themes]]):
+
+#+begin_src emacs-lisp
+;;; For the built-in themes which cannot use `require'.
+(require-theme 'modus-themes)
+
+;; Add all your customizations prior to loading the themes.
+(setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+;; Load the theme of your choice.
+(load-theme 'modus-operandi)
+
+;; Optionally define a key to switch between Modus themes. Also check
+;; the user option `modus-themes-to-toggle'.
+(define-key global-map (kbd "<f5>") #'modus-themes-toggle)
+
+
+
+;;; For packaged versions which must use `require'.
+
+(require 'modus-themes)
+
+;; Add all your customizations prior to loading the themes
+(setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+;; Load the theme of your choice.
+(load-theme 'modus-operandi :no-confirm)
+
+(define-key global-map (kbd "<f5>") #'modus-themes-toggle)
+#+end_src
+
+[[#h:e979734c-a9e1-4373-9365-0f2cd36107b8][Sample configuration with and without use-package]].
+
+** The ~require-theme~ for built-in Emacs themes
+:PROPERTIES:
+:CUSTOM_ID: h:b66b128d-54a4-4265-b59f-4d1ea2feb073
+:END:
+
+The version of the Modus themes that is included in Emacs CANNOT use
+the standard ~require~. This is because the built-in themes are not
+included in the ~load-path~ (not my decision). The ~require-theme~
+function must be used in this case as a replacement. For example:
+
+#+begin_src emacs-lisp
+(require-theme 'modus-themes)
+
+;; All customizations here
+(setq modus-themes-bold-constructs t
+ modus-themes-italic-constructs t)
+
+;; Maybe define some palette overrides, such as by using our presets
+(setq modus-themes-common-palette-overrides
+ modus-themes-preset-overrides-intense)
+
+;; Load the theme of choice (built-in themes are always "safe" so they
+;; do not need the `no-require' argument of `load-theme').
+(load-theme 'modus-operandi)
+
+(define-key global-map (kbd "<f5>") #'modus-themes-toggle)
+#+end_src
+
+** Sample configuration with and without use-package
+:properties:
+:custom_id: h:e979734c-a9e1-4373-9365-0f2cd36107b8
+:end:
+#+cindex: use-package configuration
+#+cindex: sample configuration
+
+What follows is a variant of what we demonstrate in the previous
+section ([[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]]).
+
+It is common for Emacs users to rely on ~use-package~ for declaring
+package configurations in their setup. We use this as an example:
+
+#+begin_src emacs-lisp
+;;; For the built-in themes which cannot use `require'.
+(use-package emacs
+ :config
+ (require-theme 'modus-themes) ; `require-theme' is ONLY for the built-in Modus themes
+
+ ;; Add all your customizations prior to loading the themes
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+ ;; Maybe define some palette overrides, such as by using our presets
+ (setq modus-themes-common-palette-overrides
+ modus-themes-preset-overrides-intense)
+
+ ;; Load the theme of your choice.
+ (load-theme 'modus-operandi)
+
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle))
+
+
+
+;;; For packaged versions which must use `require'.
+(use-package modus-themes
+ :ensure t
+ :config
+ ;; Add all your customizations prior to loading the themes
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+ ;; Maybe define some palette overrides, such as by using our presets
+ (setq modus-themes-common-palette-overrides
+ modus-themes-preset-overrides-intense)
+
+ ;; Load the theme of your choice.
+ (load-theme 'modus-operandi)
+
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle))
+#+end_src
+
+The same without ~use-package~:
+
+#+begin_src emacs-lisp
+(require 'modus-themes) ; OR for the built-in themes: (require-theme 'modus-themes)
+
+;; Add all your customizations prior to loading the themes
+(setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+;; Maybe define some palette overrides, such as by using our presets
+(setq modus-themes-common-palette-overrides
+ modus-themes-preset-overrides-intense)
+
+;; Load the theme of your choice:
+(load-theme 'modus-operandi :no-confirm)
+
+(define-key global-map (kbd "<f5>") #'modus-themes-toggle)
+#+end_src
+
+[[#h:e68560b3-7fb0-42bc-a151-e015948f8a35][Differences between loading and enabling]].
+
+Note: make sure not to customize the variable ~custom-theme-load-path~
+or ~custom-theme-directory~ after the themes' package declaration. That
+will lead to failures in loading the files. If either or both of those
+variables need to be changed, their values should be defined before the
+package declaration of the themes.
+
+[[#h:aabcada6-810d-4eee-b34a-d2a9c301824d][Make the themes look like what the maintainer uses]]
+
+** Differences between loading and enabling
+:properties:
+:custom_id: h:e68560b3-7fb0-42bc-a151-e015948f8a35
+:end:
+#+cindex: load-theme VS enable-theme
+
+The reason we recommend ~load-theme~ instead of the other option of
+~enable-theme~ is that the former does a kind of "reset" on the face
+specs. It quite literally loads (or reloads) the theme. Whereas the
+~enable-theme~ function simply puts an already loaded theme to the top
+of the list of enabled items, re-using whatever state was last loaded.
+
+As such, ~load-theme~ reads all customizations that may happen during
+any given Emacs session: even after the initial setup of a theme.
+Examples are calls to ~custom-set-faces~, as well as new values assigned
+to the options the Modus themes provide ([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]]).
+
+Our tests show that ~enable-theme~ does not read such variables anew, so
+it might appear to the unsuspecting user that the themes are somehow
+broken whenever they try to assign a new value to a customization option
+or some face.
+
+This "reset" that ~load-theme~ brings about does, however, come at the
+cost of being somewhat slower than ~enable-theme~. Users who have a
+stable setup and who seldom update their variables during a given Emacs
+session, are better off using something like this:
+
+#+begin_src emacs-lisp
+(require 'modus-themes)
+
+;; Activate your desired themes here
+(load-theme 'modus-operandi t t)
+(load-theme 'modus-vivendi t t)
+
+;; Enable the preferred one
+(enable-theme 'modus-operandi)
+#+end_src
+
+[[#h:b40aca50-a3b2-4c43-be58-2c26fcd14237][Toggle themes without reloading them]].
+
+[[#h:e979734c-a9e1-4373-9365-0f2cd36107b8][Sample configuration with and without use-package]].
+
+With the above granted, other sections of the manual discuss how to
+configure custom faces, where ~load-theme~ is expected, though
+~enable-theme~ could still apply in stable setups:
+
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with modus-themes-with-colors]].
+
+* Customization options
+:properties:
+:custom_id: h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f
+:end:
+
+The Modus themes are highly configurable, though they should work well
+without any further tweaks. We provide a variety of user options.
+The following code block provides an overview. In addition to those
+variables, the themes support a comprehensive system of overrides: it
+can be used to make thoroughgoing changes to the looks of the themes
+([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]). We document everything at length in
+the pages of this manual and also provide ready-to-use code samples.
+
+Remember that all customization options must be evaluated before loading
+a theme ([[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]]). If the theme is already active, it must be
+reloaded for changes to take effect.
+
+#+begin_src emacs-lisp
+;; In all of the following, WEIGHT is a symbol such as `semibold',
+;; `light', `bold', or anything mentioned in `modus-themes-weights'.
+(setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil
+ modus-themes-mixed-fonts t
+ modus-themes-variable-pitch-ui nil
+ modus-themes-custom-auto-reload t
+ modus-themes-disable-other-themes t
+
+ ;; Options for `modus-themes-prompts' are either nil (the
+ ;; default), or a list of properties that may include any of those
+ ;; symbols: `italic', `WEIGHT'
+ modus-themes-prompts '(italic bold)
+
+ ;; The `modus-themes-completions' is an alist that reads two
+ ;; keys: `matches', `selection'. Each accepts a nil value (or
+ ;; empty list) or a list of properties that can include any of
+ ;; the following (for WEIGHT read further below):
+ ;;
+ ;; `matches' :: `underline', `italic', `WEIGHT'
+ ;; `selection' :: `underline', `italic', `WEIGHT'
+ modus-themes-completions
+ '((matches . (extrabold))
+ (selection . (semibold italic text-also)))
+
+ modus-themes-org-blocks 'gray-background ; {nil,'gray-background,'tinted-background}
+
+ ;; The `modus-themes-headings' is an alist: read the manual's
+ ;; node about it or its doc string. Basically, it supports
+ ;; per-level configurations for the optional use of
+ ;; `variable-pitch' typography, a height value as a multiple of
+ ;; the base font size (e.g. 1.5), and a `WEIGHT'.
+ modus-themes-headings
+ '((1 . (variable-pitch 1.5))
+ (2 . (1.3))
+ (agenda-date . (1.3))
+ (agenda-structure . (variable-pitch light 1.8))
+ (t . (1.1))))
+
+;; Remember that more (MUCH MORE) can be done with overrides, which we
+;; document extensively in this manual.
+#+end_src
+
+** Option for reloading the theme on custom change
+:properties:
+:alt_title: Custom reload theme
+:description: Toggle auto-reload of the theme when setting custom variables
+:custom_id: h:9001527a-4e2c-43e0-98e8-3ef72d770639
+:end:
+#+vindex: modus-themes-custom-auto-reload
+
+Brief: Toggle reloading of the active theme when an option is changed
+through the Custom UI.
+
+Symbol: ~modus-themes-custom-auto-reload~ (=boolean= type)
+
+Possible values:
+
+1. ~nil~
+2. ~t~ (default)
+
+All theme user options take effect when a theme is loaded. Any
+subsequent changes require the theme to be reloaded.
+
+When this variable has a non-~nil~ value, any change made via the Custom
+UI or related functions such as ~customize-set-variable~ and ~setopt~
+(Emacs 29), will trigger a reload automatically.
+
+With a ~nil~ value, changes to user options have no further consequences:
+the user must manually reload the theme ([[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]]).
+
+** Option for disabling other themes while loading Modus
+:properties:
+:alt_title: Disable other themes
+:description: Determine whether loading a Modus themes disables all others
+:custom_id: h:adb0c49a-f1f9-4690-868b-013a080eed68
+:end:
+#+vindex: modus-themes-disable-other-themes
+
+Brief: Disable all other themes when loading a Modus theme.
+
+Symbol: ~modus-themes-disable-other-themes~ (=boolean= type)
+
+Possible values:
+
+1. ~nil~
+2. ~t~ (default)
+
+When the value is non-~nil~, the commands ~modus-themes-toggle~ and
+~modus-themes-select~, as well as the ~modus-themes-load-theme~
+function, will disable all other themes while loading the specified
+Modus theme. This is done to ensure that Emacs does not blend two or
+more themes: such blends lead to awkward results that undermine the
+work of the designer.
+
+When the value is ~nil~, the aforementioned commands and function will
+only disable other themes within the Modus collection.
+
+This option is provided because Emacs themes are not necessarily
+limited to colors/faces: they can consist of an arbitrary set of
+customizations. Users who use such customization bundles must set
+this variable to a ~nil~ value.
+
+** Option for more bold constructs
+:properties:
+:alt_title: Bold constructs
+:description: Toggle bold constructs in code
+:custom_id: h:b25714f6-0fbe-41f6-89b5-6912d304091e
+:end:
+#+vindex: modus-themes-bold-constructs
+
+Brief: Use bold for code syntax highlighting and related.
+
+Symbol: ~modus-themes-bold-constructs~ (=boolean= type)
+
+Possible values:
+
+1. ~nil~ (default)
+2. ~t~
+
+The default is to use a bold typographic weight only when it is
+required.
+
+With a non-~nil~ value (~t~) display several syntactic constructs in
+bold weight. This concerns keywords and other important aspects of
+code syntax. It also affects certain mode line indicators and command
+prompts.
+
+Advanced users may also want to configure the exact attributes of the
+~bold~ face.
+
+[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
+
+** Option for more italic constructs
+:properties:
+:alt_title: Italic constructs
+:description: Toggle italic font constructs in code
+:custom_id: h:977c900d-0d6d-4dbb-82d9-c2aae69543d6
+:end:
+#+vindex: modus-themes-italic-constructs
+
+Brief: Use italics for code syntax highlighting and related.
+
+Symbol: ~modus-themes-italic-constructs~ (=boolean= type)
+
+Possible values:
+
+1. ~nil~ (default)
+2. ~t~
+
+The default is to not use slanted text forms (italics) unless it is
+absolutely necessary.
+
+With a non-~nil~ value (~t~) choose to render more faces in italics. This
+typically affects documentation strings and code comments.
+
+Advanced users may also want to configure the exact attributes of the
+~italic~ face.
+
+[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
+
+** Option for font mixing
+:properties:
+:alt_title: Mixed fonts
+:description: Toggle mixing of font families
+:custom_id: h:115e6c23-ee35-4a16-8cef-e2fcbb08e28b
+:end:
+#+vindex: modus-themes-mixed-fonts
+
+Brief: Toggle the use of monospaced fonts for spacing-sensitive
+constructs (affects font families).
+
+Symbol: ~modus-themes-mixed-fonts~ (=boolean= type)
+
+Possible values:
+
+1. ~nil~ (default)
+2. ~t~
+
+When set to non-~nil~ (~t~), configure some spacing-sensitive faces like Org
+tables and code blocks to always inherit from the ~fixed-pitch~ face.
+This is to ensure that certain constructs like code blocks and tables
+remain monospaced even when users opt for a mode that remaps typeface
+families, such as the built-in {{{kbd(M-x variable-pitch-mode)}}}. Otherwise
+the layout can appear broken, due to how spacing is done.
+
+For a consistent experience, user may need to specify the font family of
+the ~fixed-pitch~ face.
+
+[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and others]].
+
+** Option for command prompt styles
+:properties:
+:alt_title: Command prompts
+:description: Control the style of command prompts
+:custom_id: h:db5a9a7c-2928-4a28-b0f0-6f2b9bd52ba1
+:end:
+#+vindex: modus-themes-prompts
+
+Brief: Control the style of command prompts (e.g. minibuffer, shell, IRC
+clients).
+
+Symbol: ~modus-themes-prompts~ (=choice= type, list of properties)
+
+Possible values are expressed as a list of properties (default is ~nil~ or
+an empty list). The list can include any of the following symbols:
+
++ ~italic~
++ ~italic~
++ A font weight, which must be supported by the underlying typeface:
+ - ~thin~
+ - ~ultralight~
+ - ~extralight~
+ - ~light~
+ - ~semilight~
+ - ~regular~
+ - ~medium~
+ - ~semibold~
+ - ~bold~
+ - ~heavy~
+ - ~extrabold~
+ - ~ultrabold~
+
+The default (a ~nil~ value or an empty list) means to only use a subtle
+colored foreground color.
+
+The ~italic~ property adds a slant to the font's forms (italic or
+oblique forms, depending on the typeface).
+
+The symbol of a font weight attribute such as ~light~, ~semibold~, et
+cetera, adds the given weight to links. Valid symbols are defined in
+the variable ~modus-themes-weights~. The absence of a weight means
+that the one of the underlying text will be used.
+
+Combinations of any of those properties are expressed as a list, like in
+these examples:
+
+#+begin_src emacs-lisp
+(bold italic)
+(italic semibold)
+#+end_src
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+#+begin_src emacs-lisp
+(setq modus-themes-prompts '(extrabold italic))
+#+end_src
+
+[[#h:bd75b43a-0bf1-45e7-b8b4-20944ca8b7f8][Make prompts more or less colorful]].
+
+** Option for completion framework aesthetics
+:properties:
+:alt_title: Completion UIs
+:description: Choose among several styles for completion UIs
+:custom_id: h:f1c20c02-7b34-4c35-9c65-99170efb2882
+:end:
+#+vindex: modus-themes-completions
+
+Brief: Set the overall style of completion framework interfaces.
+
+Symbol: ~modus-themes-completions~ (=alist= type properties)
+
+This affects Company, Corfu, Flx, Icomplete/Fido, Ido, Ivy, Orderless,
+Vertico, and the standard =*Completions*= buffer. The value is an
+alist of expressions, each of which takes the form of =(KEY . LIST-OF-PROPERTIES)=.
+=KEY= is a symbol, while =PROPERTIES= is a list. Here is a sample,
+followed by a description of the particularities:
+
+#+begin_src emacs-lisp
+(setq modus-themes-completions
+ '((matches . (extrabold underline))
+ (selection . (semibold italic))))
+#+end_src
+
+The ~matches~ key refers to the highlighted characters that correspond
+to the user's input. When its properties are ~nil~ or an empty list,
+matching characters in the user interface will have a bold weight and
+a colored foreground. The list of properties may include any of the
+following symbols regardless of the order they may appear in:
+
+- ~underline~ to draw a line below the characters;
+
+- ~italic~ to use a slanted font (italic or oblique forms);
+
+- The symbol of a font weight attribute such as ~light~,
+ ~semibold~, et cetera. Valid symbols are defined in the
+ variable ~modus-themes-weights~. The absence of a weight means
+ that bold will be used.
+
+The ~selection~ key applies to the current line or currently matched
+candidate, depending on the specifics of the user interface. When its
+properties are ~nil~ or an empty list, it has a subtle gray background,
+a bold weight, and the base foreground value for the text. The list
+of properties it accepts is as follows (order is not significant):
+
+- ~underline~ to draw a line below the characters;
+
+- ~italic~ to use a slanted font (italic or oblique forms);
+
+- The symbol of a font weight attribute such as ~light~,
+ ~semibold~, et cetera. Valid symbols are defined in the
+ variable ~modus-themes-weights~. The absence of a weight means
+ that bold will be used.
+
+Apart from specifying each key separately, a catch-all list is
+accepted. This is only useful when the desired aesthetic is the same
+across all keys that are not explicitly referenced. For example,
+this:
+
+#+begin_src emacs-lisp
+(setq modus-themes-completions
+ '((t . (extrabold underline))))
+#+end_src
+
+Is the same as:
+
+#+begin_src emacs-lisp
+(setq modus-themes-completions
+ '((matches . (extrabold underline))
+ (selection . (extrabold underline))))
+#+end_src
+
+[[#h:d959f789-0517-4636-8780-18123f936f91][Make completion matches more or less colorful]].
+
+** Option for org-mode block styles
+:properties:
+:alt_title: Org mode blocks
+:description: Choose among plain, gray, or tinted backgrounds
+:custom_id: h:b7e328c0-3034-4db7-9cdf-d5ba12081ca2
+:end:
+#+vindex: modus-themes-org-blocks
+
+Brief: Set the overall style of Org code blocks, quotes, and the like.
+
+Symbol: ~modus-themes-org-blocks~ (=choice= type)
+
+Possible values:
+
+1. ~nil~ (default)
+2. ~gray-background~
+3. ~tinted-background~
+
+Option ~nil~ (the default) means that the block has no background of
+its own: it uses the one that applies to the rest of the buffer.
+In this case, the delimiter lines have a gray color for their text,
+making them look exactly like all other Org properties.
+
+Option ~gray-background~ applies a subtle gray background to the
+block's contents. It also affects the begin and end lines of the
+block as they get another shade of gray as their background, which
+differentiates them from the contents of the block. All background
+colors extend to the edge of the window, giving the area a
+rectangular, "blocky" presentation. If the begin/end lines do not
+extend in this way, check the value of the Org user option
+~org-fontify-whole-block-delimiter-line~.
+
+Option ~tinted-background~ uses a colored background for the contents
+of the block. The exact color value will depend on the programming
+language and is controlled by the variable ~org-src-block-faces~
+(refer to the theme's source code for the current association list).
+For this to take effect, the Org buffer needs to be restarted with
+~org-mode-restart~.
+
+Code blocks use their major mode's fontification (syntax highlighting)
+only when the variable ~org-src-fontify-natively~ is non-~nil~. While
+quote/verse blocks require setting
+~org-fontify-quote-and-verse-blocks~ to a non-~nil~ value.
+
+[[#h:f44cc6e3-b0f1-4a5e-8a90-9e48fa557b50][Update Org block delimiter fontification]].
+
+** Option for the headings' overall style
+:properties:
+:alt_title: Heading styles
+:description: Choose among several styles, also per heading level
+:custom_id: h:271eff19-97aa-4090-9415-a6463c2f9ae1
+:end:
+#+vindex: modus-themes-headings
+
+Brief: Heading styles with optional list of values per heading level.
+
+Symbol: ~modus-themes-headings~ (=alist= type, multiple properties)
+
+This is an alist that accepts a =(KEY . LIST-OF-VALUES)= combination.
+The =KEY= is either a number, representing the heading's level (0
+through 8) or ~t~, which pertains to the fallback style. The named
+keys =agenda-date= and =agenda-structure= apply to the Org agenda.
+
+Level 0 is a special heading: it is used for what counts as a document
+title or equivalent, such as the =#+title= construct we find in Org
+files. Levels 1-8 are regular headings.
+
+The =LIST-OF-VALUES= covers symbols that refer to properties, as
+described below. Here is a complete sample with various stylistic
+combinations, followed by a presentation of all available properties:
+
+#+begin_src emacs-lisp
+(setq modus-themes-headings
+ '((1 . (variable-pitch 1.5))
+ (2 . (1.3))
+ (agenda-date . (1.3))
+ (agenda-structure . (variable-pitch light 1.8))
+ (t . (1.1))))
+#+end_src
+
+Properties:
+
++ A font weight, which must be supported by the underlying typeface:
+ - ~thin~
+ - ~ultralight~
+ - ~extralight~
+ - ~light~
+ - ~semilight~
+ - ~regular~
+ - ~medium~
+ - ~semibold~
+ - ~bold~ (default)
+ - ~heavy~
+ - ~extrabold~
+ - ~ultrabold~
++ A floating point as a height multiple of the default or a cons cell in
+ the form of =(height . FLOAT)=.
+
+By default (a ~nil~ value for this variable), all headings have a bold
+typographic weight and use a desaturated text color.
+
+A ~variable-pitch~ property changes the font family of the heading to that
+of the ~variable-pitch~ face (normally a proportionately spaced typeface).
+
+The symbol of a weight attribute adjusts the font of the heading
+accordingly, such as ~light~, ~semibold~, etc. Valid symbols are
+defined in the variable ~modus-themes-weights~. The absence of a weight
+means that bold will be used by virtue of inheriting the ~bold~ face.
+
+[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
+
+A number, expressed as a floating point (e.g. 1.5), adjusts the height
+of the heading to that many times the base font size. The default
+height is the same as 1.0, though it need not be explicitly stated.
+Instead of a floating point, an acceptable value can be in the form of a
+cons cell like =(height . FLOAT)= or =(height FLOAT)=, where FLOAT is
+the given number.
+
+Combinations of any of those properties are expressed as a list, like in
+these examples:
+
+#+begin_src emacs-lisp
+(semibold)
+(variable-pitch semibold 1.3)
+(variable-pitch semibold (height 1.3)) ; same as above
+(variable-pitch semibold (height . 1.3)) ; same as above
+#+end_src
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+#+begin_src emacs-lisp
+(setq modus-themes-headings
+ '((1 . (variable-pitch 1.5))
+ (2 . (1.3))
+ (agenda-date . (1.3))
+ (agenda-structure . (variable-pitch light 1.8))
+ (t . (1.1))))
+#+end_src
+
+When defining the styles per heading level, it is possible to pass a
+non-~nil~ value (~t~) instead of a list of properties. This will retain the
+original aesthetic for that level. For example:
+
+#+begin_src emacs-lisp
+(setq modus-themes-headings
+ '((1 . t) ; keep the default style
+ (2 . (semibold 1.2))
+ (t . (rainbow)))) ; style for all other headings
+
+(setq modus-themes-headings
+ '((1 . (variable-pitch 1.5))
+ (2 . (semibold))
+ (t . t))) ; default style for all other levels
+#+end_src
+
+Note that the text color of headings, of their background, and
+overline can all be set via the overrides. It is possible to have any
+color combination for any heading level (something that could not be
+done in older versions of the themes).
+
+[[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]].
+
+[[#h:11297984-85ea-4678-abe9-a73aeab4676a][Make headings more or less colorful]].
+
+** Option for variable-pitch font in UI elements
+:properties:
+:alt_title: UI typeface
+:description: Toggle the use of variable-pitch across the User Interface
+:custom_id: h:16cf666c-5e65-424c-a855-7ea8a4a1fcac
+:end:
+#+vindex: modus-themes-variable-pitch-ui
+
+Brief: Toggle the use of proportionately spaced (~variable-pitch~) fonts
+in the User Interface.
+
+Symbol: ~modus-themes-variable-pitch-ui~ (=boolean= type)
+
+Possible values:
+
+1. ~nil~ (default)
+2. ~t~
+
+This option concerns User Interface elements that are under the direct
+control of Emacs. In particular: the mode line, header line, tab bar,
+and tab line.
+
+The default is to use the same font as the rest of Emacs, which usually
+is a monospaced family.
+
+With a non-~nil~ value (~t~) apply a proportionately spaced typeface. This
+is done by assigning the ~variable-pitch~ face to the relevant items.
+
+[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and others]].
+
+** Option for palette overrides
+:properties:
+:alt_title: Palette overrides
+:description: Refashion color values and/or semantic color mappings
+:custom_id: h:34c7a691-19bb-4037-8d2f-67a07edab150
+:end:
+
+This section describes palette overrides in detail. For a simpler
+alternative, use the presets we provide ([[#h:b0bc811c-227e-42ec-bf67-15e1f41eb7bc][Palette override presets]]).
+
+Each Modus theme specifies a color palette that declares named color
+values and semantic color mappings:
+
++ Named colors consist of a symbol and a string that specifies a
+ hexadecimal RGB value. For example: =(blue-warmer "#354fcf")=.
+
++ The semantic color mappings associate an abstract construct with a
+ given named color from the palette, like =(heading-2 yellow-faint)=.
+ Both elements of the list are symbols, though the ~cadr~ (value) can
+ be a string that specifies a color, such as =(heading-2 "#354fcf")=.
+
+#+vindex: modus-themes-common-palette-overrides
+Both of those subsets can be overridden, thus refashioning the theme.
+Overrides are either shared, by being stored in the user option
+~modus-themes-common-palette-overrides~, or they are specific to the
+theme they name. In the latter case, the naming scheme of each
+palette variable is =THEME-NAME-palette-overrides=, thus yielding:
+
+#+vindex: modus-operandi-palette-overrides
++ ~modus-operandi-palette-overrides~
+
+#+vindex: modus-operandi-deuteranopia-palette-overrides
++ ~modus-operandi-deuteranopia-palette-overrides~
+
+#+vindex: modus-operandi-tinted-palette-overrides
++ ~modus-operandi-tinted-palette-overrides~
+
+#+vindex: modus-operandi-tritanopia-palette-overrides
++ ~modus-operandi-tritanopia-palette-overrides~
+
+#+vindex: modus-vivendi-palette-overrides
++ ~modus-vivendi-palette-overrides~
+
+#+vindex: modus-vivendi-deuteranopia-palette-overrides
++ ~modus-vivendi-deuteranopia-palette-overrides~
+
+#+vindex: modus-vivendi-tinted-palette-overrides
++ ~modus-vivendi-tinted-palette-overrides~
+
+#+vindex: modus-vivendi-tritanopia-palette-overrides
++ ~modus-vivendi-tritanopia-palette-overrides~
+
+Theme-specific overrides take precedence over the shared ones. It is
+strongly advised that shared overrides do NOT alter color values, as
+those will not be appropriate for both dark and light themes. Common
+overrides are best limited to the semantic color mappings as those use
+the color value that corresponds to the active theme (e.g. make the
+cursor =blue-warmer= in all themes, whatever the value of
+=blue-warmer= is in each theme).
+
+The value of any overrides' variable must mirror a theme's palette.
+Palette variables are named after their theme as =THEME-NAME-palette=.
+For example, the ~modus-operandi-palette~ is like this:
+
+#+begin_src emacs-lisp
+(defconst modus-operandi-palette
+ '(
+;;; Basic values
+
+ (bg-main "#ffffff")
+ (bg-dim "#f0f0f0")
+ (fg-main "#000000")
+
+ ;; ...
+
+ (red "#a60000")
+ (red-warmer "#972500")
+ (red-cooler "#a0132f")
+ (red-faint "#7f0000")
+ (red-intense "#d00000")
+
+ ;; ...
+
+;;;; Mappings
+
+ ;; ...
+
+ (cursor fg-main)
+ (builtin magenta-warmer)
+ (comment fg-dim)
+ (constant blue-cooler)
+ (docstring green-faint)
+ (fnname magenta)
+ (keyword magenta-cooler)
+
+ ;; ...
+ ))
+#+end_src
+
+The ~modus-operandi-palette-overrides~ targets the entries that need
+to be changed. For example, to make the main foreground color a dark
+gray instead of pure black, use a shade of red for comments, and apply
+a cyan hue to keywords:
+
+#+begin_src emacs-lisp
+(setq modus-operandi-palette-overrides
+ '((fg-main "#333333")
+ (comment red-faint)
+ (keyword cyan-cooler)))
+#+end_src
+
+Changes take effect upon theme reload ([[#h:9001527a-4e2c-43e0-98e8-3ef72d770639][Custom reload theme]]).
+Overrides are removed by setting their variable to a ~nil~ value.
+
+The common accented foregrounds in each palette follow a predictable
+naming scheme: =HUE{,-warmer,-cooler,-faint,-intense}=. =HUE= is one
+of the six basic colors: red, green, blue, yellow, magenta, cyan.
+
+Named colors that are meant to be used as backgrounds contain =bg= in
+their name, such as =bg-red-intense=. While special purpose
+foregrounds that are meant to be combined with such backgrounds,
+contain =fg= in their name, such as =fg-removed= which complements
+=bg-removed=.
+
+Named colors can be previewed, such as with the command
+~modus-themes-list-colors~ ([[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Preview theme colors]]).
+
+For a video tutorial that users of all skill levels can approach,
+watch: https://protesilaos.com/codelog/2022-12-17-modus-themes-v4-demo/.
+
+* Advanced customization
+:properties:
+:custom_id: h:f4651d55-8c07-46aa-b52b-bed1e53463bb
+:end:
+
+Unlike the predefined customization options which follow a clear pattern
+of allowing the user to quickly specify their preference, the themes
+also provide a more flexible, albeit difficult, mechanism to control
+things with precision ([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]]).
+
+This section is of interest only to users who are prepared to maintain
+their own local tweaks and who are willing to deal with any possible
+incompatibilities between versioned releases of the themes. As such,
+they are labeled as "do-it-yourself" or "DIY".
+
+** Palette override presets
+:PROPERTIES:
+:CUSTOM_ID: h:b0bc811c-227e-42ec-bf67-15e1f41eb7bc
+:END:
+
+This section shows how to refashion the themes by opting in to the
+stylistic presets we provide. Those presets override the default
+color mappings to amplify, tone down, or refashion the overall
+coloration of the themes.
+
+To make almost all aspects of the themes less intense, use this:
+
+#+begin_src emacs-lisp
+;; Always remember to reload the theme for changes to take effect!
+(setq modus-themes-common-palette-overrides modus-themes-preset-overrides-faint)
+#+end_src
+
+#+vindex: modus-themes-preset-overrides-faint
+With ~modus-themes-preset-overrides-faint~ the grays are toned down,
+gray backgrounds are removed from some contexts, and almost all accent
+colors are desaturated. It makes the themes less attention-grabbing.
+
+On the opposite end of the stylistic spectrum, we have this
+
+#+begin_src emacs-lisp
+;; Always remember to reload the theme for changes to take effect!
+(setq modus-themes-common-palette-overrides modus-themes-preset-overrides-intense)
+#+end_src
+
+#+vindex: modus-themes-preset-overrides-intense
+The ~modus-themes-preset-overrides-intense~ makes many background
+colors accented instead of gray and increases coloration in a number
+of places. Colors stand out more and are made easier to spot.
+
+#+vindex: modus-themes-preset-overrides-cooler
+#+vindex: modus-themes-preset-overrides-warmer
+For some stylistic variation try the "cooler" and "warmer" presets:
+
+#+begin_src emacs-lisp
+;; This:
+(setq modus-themes-common-palette-overrides modus-themes-preset-overrides-cooler)
+
+;; Or:
+(setq modus-themes-common-palette-overrides modus-themes-preset-overrides-warmer)
+#+end_src
+
+Note that the user is not limited to those presets. The system of
+overrides we provide makes it possible to tweak the value of each
+individual named color and to change how values are assigned to
+semantic color mappings ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]). Subsequent
+sections provide examples ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]).
+
+It is also possible to use those presets as a basis and, for example,
+add to them code from the subsequent sections of this manual. This is
+the general idea (extra space for didactic purposes):
+
+#+begin_src emacs-lisp
+(setq modus-themes-common-palette-overrides
+ `(
+ ;; From the section "Make the mode line borderless"
+ (border-mode-line-active unspecified)
+ (border-mode-line-inactive unspecified)
+
+ ;; From the section "Make matching parenthesis more or less intense"
+ (bg-paren-match bg-magenta-intense)
+ (underline-paren-match fg-main)
+
+ ;; And expand the preset here. Note that the ,@ works because
+ ;; we use the backtick for this list, instead of a straight
+ ;; quote.
+ ,@modus-themes-preset-overrides-intense))
+#+end_src
+
+** Stylistic variants using palette overrides
+:PROPERTIES:
+:CUSTOM_ID: h:df1199d8-eaba-47db-805d-6b568a577bf3
+:END:
+
+This section contains practical examples of overriding the palette of
+the themes ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]). Users can copy the code to
+their init file, evaluate it, and then re-load the theme for changes
+to take effect. To apply overrides at startup simply define them
+before the call that loads the theme. Remember that we also provide
+presets that are easier to apply ([[#h:b0bc811c-227e-42ec-bf67-15e1f41eb7bc][Palette override presets]]).
+
+*** Make the mode line borderless
+:PROPERTIES:
+:CUSTOM_ID: h:80ddba52-e188-411f-8cc0-480ebd75befe
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). To
+hide the border around the active and inactive mode lines, we need to
+set their color to that of the underlying background.
+
+[[#h:e8d781be-eefc-4a81-ac4e-5ed156190df7][Make the active mode line colorful]].
+
+[[#h:5a0c58cc-f97f-429c-be08-927b9fbb0a9c][Add padding to mode line]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+;; Remove the border
+(setq modus-themes-common-palette-overrides
+ '((border-mode-line-active unspecified)
+ (border-mode-line-inactive unspecified)))
+
+;; Keep the border but make it the same color as the background of the
+;; mode line (thus appearing borderless). The difference with the
+;; above is that this version is a bit thicker because the border are
+;; still there.
+(setq modus-themes-common-palette-overrides
+ '((border-mode-line-active bg-mode-line-active)
+ (border-mode-line-inactive bg-mode-line-inactive)))
+#+end_src
+
+*** Make the active mode line colorful
+:PROPERTIES:
+:CUSTOM_ID: h:e8d781be-eefc-4a81-ac4e-5ed156190df7
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]).
+Here we show some snippets that apply different stylistic variants.
+Of course, it is possible to use theme-specific overrides to, say,
+have a blue mode line for ~modus-operandi~ and a red one for
+~modus-vivendi~.
+
+[[#h:80ddba52-e188-411f-8cc0-480ebd75befe][Make the mode line borderless]].
+
+[[#h:5a0c58cc-f97f-429c-be08-927b9fbb0a9c][Add padding to mode line]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+;; Blue background, neutral foreground, intense blue border
+(setq modus-themes-common-palette-overrides
+ '((bg-mode-line-active bg-blue-intense)
+ (fg-mode-line-active fg-main)
+ (border-mode-line-active blue-intense)))
+
+;; Subtle blue background, neutral foreground, intense blue border
+(setq modus-themes-common-palette-overrides
+ '((bg-mode-line-active bg-blue-subtle)
+ (fg-mode-line-active fg-main)
+ (border-mode-line-active blue-intense)))
+
+;; Subtle red background, red foreground, invisible border
+(setq modus-themes-common-palette-overrides
+ '((bg-mode-line-active bg-red-subtle)
+ (fg-mode-line-active red-warmer)
+ (border-mode-line-active bg-red-subtle)))
+#+end_src
+
+*** Make the tab bar more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:096658d7-a0bd-4a99-b6dc-9b20a20cda37
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]).
+Here we show how to affect the colors of the built-in ~tab-bar-mode~
+and ~tab-line-mode~.
+
+For consistent theme-wide results, consider changing the mode line,
+fringes, and line numbers. These are shown in other sections of this
+manual.
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; Make the `tab-bar-mode' mode subtle while keepings its original
+;; gray aesthetic.
+(setq modus-themes-common-palette-overrides
+ '((bg-tab-bar bg-main)
+ (bg-tab-current bg-active)
+ (bg-tab-other bg-dim)))
+
+;; Like the above, but the current tab has a colorful background and
+;; the inactive tabs have a slightly more noticeable gray background.
+(setq modus-themes-common-palette-overrides
+ '((bg-tab-bar bg-main)
+ (bg-tab-current bg-cyan-intense)
+ (bg-tab-other bg-inactive)))
+
+;; Make the tabs colorful, using a monochromatic pattern (e.g. shades
+;; of cyan).
+(setq modus-themes-common-palette-overrides
+ '((bg-tab-bar bg-cyan-nuanced)
+ (bg-tab-current bg-cyan-intense)
+ (bg-tab-other bg-cyan-subtle)))
+
+;; Like the above, but with a dichromatic pattern (cyan and magenta).
+(setq modus-themes-common-palette-overrides
+ '((bg-tab-bar bg-cyan-nuanced)
+ (bg-tab-current bg-magenta-intense)
+ (bg-tab-other bg-cyan-subtle)))
+#+end_src
+
+*** Make the fringe invisible or another color
+:PROPERTIES:
+:CUSTOM_ID: h:c312dcac-36b6-4a1f-b1f5-ab1c9abe27b0
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]).
+Here we show how to make the fringe invisible or how to assign to it a
+different color. The "fringe" is a small area to the right and left
+side of the Emacs window which shows indicators such as for truncation
+or continuation lines.
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+;; Make the fringe invisible
+(setq modus-themes-common-palette-overrides
+ '((fringe unspecified)))
+
+;; Make the fringe more intense
+(setq modus-themes-common-palette-overrides
+ '((fringe bg-active)))
+
+;; Make the fringe colorful, but nuanced
+(setq modus-themes-common-palette-overrides
+ '((fringe bg-blue-nuanced)))
+#+end_src
+
+*** Make links use subtle or no underlines
+:PROPERTIES:
+:CUSTOM_ID: h:6c1d1dea-5cbf-4d92-b7bb-570a7a23ffe9
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). In
+this example, we showcase the special use of the ~unspecified~ symbol
+that underline mappings can read correctly.
+
+#+begin_src emacs-lisp
+;; Subtle underlines
+(setq modus-themes-common-palette-overrides
+ '((underline-link border)
+ (underline-link-visited border)
+ (underline-link-symbolic border)))
+
+;; No underlines
+(setq modus-themes-common-palette-overrides
+ '((underline-link unspecified)
+ (underline-link-visited unspecified)
+ (underline-link-symbolic unspecified)))
+#+end_src
+
+*** Make prompts more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:bd75b43a-0bf1-45e7-b8b4-20944ca8b7f8
+:END:
+
+This section contains practical examples of overriding the palette of
+the themes ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]). In the following code
+block we show how to add or remove color from prompts.
+
+[[#h:db5a9a7c-2928-4a28-b0f0-6f2b9bd52ba1][Option for command prompt styles]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+;; Keep the background unspecified (like the default), but use a faint
+;; foreground color.
+(setq modus-themes-common-palette-overrides
+ '((fg-prompt cyan-faint)
+ (bg-prompt unspecified)))
+
+;; Add a nuanced background to prompts that complements their foreground.
+(setq modus-themes-common-palette-overrides
+ '((fg-prompt cyan)
+ (bg-prompt bg-cyan-nuanced)))
+
+;; Add a yellow background and adjust the foreground accordingly.
+(setq modus-themes-common-palette-overrides
+ '((fg-prompt fg-main)
+ (bg-prompt bg-yellow-subtle))) ; try to replace "subtle" with "intense"
+#+end_src
+
+*** Make completion matches more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:d959f789-0517-4636-8780-18123f936f91
+:END:
+
+This section contains practical examples of overriding the palette of
+the themes ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]). Here we demonstrate how
+to activate background coloration for completion matches. We show
+three different degrees of intensity.
+
+[[#h:f1c20c02-7b34-4c35-9c65-99170efb2882][Option for completion framework aesthetics]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+;; Add a nuanced background color to completion matches, while keeping
+;; their foreground intact (foregrounds do not need to be specified in
+;; this case, but we do it for didactic purposes).
+(setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 blue)
+ (fg-completion-match-1 magenta-warmer)
+ (fg-completion-match-2 cyan)
+ (fg-completion-match-3 red)
+ (bg-completion-match-0 bg-blue-nuanced)
+ (bg-completion-match-1 bg-magenta-nuanced)
+ (bg-completion-match-2 bg-cyan-nuanced)
+ (bg-completion-match-3 bg-red-nuanced)))
+
+;; Add intense background colors to completion matches and adjust the
+;; foregrounds accordingly.
+(setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 fg-main)
+ (fg-completion-match-1 fg-main)
+ (fg-completion-match-2 fg-main)
+ (fg-completion-match-3 fg-main)
+ (bg-completion-match-0 bg-blue-intense)
+ (bg-completion-match-1 bg-yellow-intense)
+ (bg-completion-match-2 bg-cyan-intense)
+ (bg-completion-match-3 bg-red-intense)))
+
+;; Like the above, but with subtle backgrounds.
+(setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 fg-main)
+ (fg-completion-match-1 fg-main)
+ (fg-completion-match-2 fg-main)
+ (fg-completion-match-3 fg-main)
+ (bg-completion-match-0 bg-blue-subtle)
+ (bg-completion-match-1 bg-yellow-subtle)
+ (bg-completion-match-2 bg-cyan-subtle)
+ (bg-completion-match-3 bg-red-subtle)))
+#+end_src
+
+Adding to the above, it is possible to, say, reduce the number of
+colors to two:
+
+#+begin_src emacs-lisp
+;; No backgrounds (like the default) and just use two colors.
+(setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 blue)
+ (fg-completion-match-1 yellow)
+ (fg-completion-match-2 blue)
+ (fg-completion-match-3 yellow)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)))
+
+;; Again, a two-color style but this time with backgrounds
+(setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 blue)
+ (fg-completion-match-1 yellow)
+ (fg-completion-match-2 blue)
+ (fg-completion-match-3 yellow)
+ (bg-completion-match-0 bg-blue-nuanced)
+ (bg-completion-match-1 bg-yellow-nuanced)
+ (bg-completion-match-2 bg-blue-nuanced)
+ (bg-completion-match-3 bg-yellow-nuanced)))
+#+end_src
+
+The user can mix and match to their liking.
+
+*** Make comments yellow and strings green
+:PROPERTIES:
+:CUSTOM_ID: h:26f53daa-0065-48dc-88ab-6a718d16cd95
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). In
+previous versions of the themes, we provided an option for yellow-ish
+comments and green-ish strings. For some users, those were still not
+good enough, as the exact values were hardcoded. Here we show how to
+reproduce the effect, but also how to tweak it to one's liking.
+
+[[#h:c8767172-bf11-4c96-81dc-e736c464fc9c][Make code syntax use the old alt-syntax style]].
+
+[[#h:943063da-7b27-4ba4-9afe-f8fe77652fd1][Make use of alternative styles for code syntax]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+;; Yellow comments and green strings like older versions of the Modus
+;; themes
+(setq modus-themes-common-palette-overrides
+ '((comment yellow-cooler)
+ (string green-cooler)))
+
+;; Faint yellow comments and a different shade of green for strings
+(setq modus-themes-common-palette-overrides
+ '((comment yellow-faint)
+ (string green-warmer)))
+
+;; Green comments and yellow strings, because now the user has the
+;; freedom to do it
+(setq modus-themes-common-palette-overrides
+ '((comment green)
+ (string yellow-cooler)))
+#+end_src
+
+*** Make code syntax use the old alt-syntax style
+:PROPERTIES:
+:CUSTOM_ID: h:c8767172-bf11-4c96-81dc-e736c464fc9c
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). In
+this section we show how to reproduce what previous versions of the
+Modus themes provided as a stylistic alternative for code syntax. The
+upside of using overrides for this purpose is that we can tweak the
+style to our liking, but first let's start with its recreation:
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; The old "alt-syntax"
+(setq modus-themes-common-palette-overrides
+ '((builtin magenta)
+ (comment fg-dim)
+ (constant magenta-cooler)
+ (docstring magenta-faint)
+ (docmarkup green-faint)
+ (fnname magenta-warmer)
+ (keyword cyan)
+ (preprocessor cyan-cooler)
+ (string red-cooler)
+ (type magenta-cooler)
+ (variable blue-warmer)
+ (rx-construct magenta-warmer)
+ (rx-backslash blue-cooler)))
+#+end_src
+
+The "alt-syntax" could optionally use green strings and yellow
+comments ([[#h:26f53daa-0065-48dc-88ab-6a718d16cd95][Make comments yellow and strings green]]):
+
+#+begin_src emacs-lisp
+;; Same as above, but with yellow comments and green strings
+(setq modus-themes-common-palette-overrides
+ '((builtin magenta)
+ (comment yellow-faint)
+ (constant magenta-cooler)
+ (docstring green-faint)
+ (docmarkup magenta-faint)
+ (fnname magenta-warmer)
+ (keyword cyan)
+ (preprocessor cyan-cooler)
+ (string green-cooler)
+ (type magenta-cooler)
+ (variable blue-warmer)
+ (rx-construct magenta-warmer)
+ (rx-backslash blue-cooler)))
+#+end_src
+
+The standard "alt-syntax" has red strings. As such, it is interesting
+to experiment with faintly red colored comments:
+
+#+begin_src emacs-lisp
+;; Like the old "alt-syntax" but with faint red comments
+(setq modus-themes-common-palette-overrides
+ '((builtin magenta)
+ (comment red-faint)
+ (constant magenta-cooler)
+ (docstring magenta-faint)
+ (docmarkup green-faint)
+ (fnname magenta-warmer)
+ (keyword cyan)
+ (preprocessor cyan-cooler)
+ (string red-cooler)
+ (type magenta-cooler)
+ (variable blue-warmer)
+ (rx-construct magenta-warmer)
+ (rx-backslash blue-cooler)))
+#+end_src
+
+The user can always mix and match styles to their liking.
+
+[[#h:943063da-7b27-4ba4-9afe-f8fe77652fd1][Make use of alternative styles for code syntax]].
+
+*** Make use of alternative styles for code syntax
+:PROPERTIES:
+:CUSTOM_ID: h:943063da-7b27-4ba4-9afe-f8fe77652fd1
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). The
+idea here is to change how named colors are mapped to code syntax.
+Each of the following snippets give the ~modus-themes~ a different
+feel while editing code.
+
+Note that my ~modus-themes~ and ~ef-themes~ do not use the same
+palettes, so some things are different. If you copy from the latter
+to the former, double-check that the entries exist in the given Modus
+theme palette.
+
+[[#h:26f53daa-0065-48dc-88ab-6a718d16cd95][Make comments yellow and strings green]].
+
+[[*Make code syntax use the old alt-syntax style][Make code syntax use the old alt-syntax style]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; Mimic `ef-night' theme (from my `ef-themes') for code syntax
+;; highlighting, while still using the Modus colors (and other
+;; mappings).
+(setq modus-themes-common-palette-overrides
+ '((builtin green-cooler)
+ (comment yellow-faint)
+ (constant magenta-cooler)
+ (fnname cyan-cooler)
+ (keyword blue-warmer)
+ (preprocessor red-warmer)
+ (docstring cyan-faint)
+ (string blue-cooler)
+ (type magenta-cooler)
+ (variable cyan)))
+
+;; Mimic `ef-summer' theme (from my `ef-themes') for code syntax
+;; highlighting, while still using the Modus colors (and other
+;; mappings).
+(setq modus-themes-common-palette-overrides
+ '((builtin magenta)
+ (comment yellow-faint)
+ (constant red-cooler)
+ (fnname magenta-warmer)
+ (keyword magenta-cooler)
+ (preprocessor green-warmer)
+ (docstring cyan-faint)
+ (string yellow-warmer)
+ (type cyan-warmer)
+ (variable blue-warmer)))
+
+;; Mimic `ef-bio' theme (from my `ef-themes') for code syntax
+;; highlighting, while still using the Modus colors (and other
+;; mappings).
+(setq modus-themes-common-palette-overrides
+ '((builtin green)
+ (comment yellow-faint)
+ (constant blue)
+ (fnname green-warmer)
+ (keyword green-cooler)
+ (preprocessor green)
+ (docstring green-faint)
+ (string magenta-cooler)
+ (type cyan-warmer)
+ (variable blue-warmer)))
+
+;; Mimic `ef-trio-light' theme (from my `ef-themes') for code syntax
+;; highlighting, while still using the Modus colors (and other
+;; mappings).
+(setq modus-themes-common-palette-overrides
+ '((builtin magenta-cooler)
+ (comment yellow-faint)
+ (constant magenta-warmer)
+ (fnname blue-warmer)
+ (keyword magenta)
+ (preprocessor red-cooler)
+ (docstring magenta-faint)
+ (string green-cooler)
+ (type cyan-cooler)
+ (variable cyan-warmer)))
+#+end_src
+
+*** Make matching parenthesis more or less intense
+:PROPERTIES:
+:CUSTOM_ID: h:259cf8f5-48ec-4b13-8a69-5d6387094468
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). In
+this code block we show how to change the background of matching
+delimiters when ~show-paren-mode~ is enabled. We also demonstrate how
+to enable underlines for those highlights.
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+;; Change the background to a shade of magenta
+(setq modus-themes-common-palette-overrides
+ '((bg-paren-match bg-magenta-intense)))
+
+;; Enable underlines by applying a color to them
+(setq modus-themes-common-palette-overrides
+ '((bg-paren-match bg-magenta-intense)
+ (underline-paren-match fg-main)))
+#+end_src
+
+*** Make box buttons more or less gray
+:PROPERTIES:
+:CUSTOM_ID: h:4f6b6ca3-f5bb-4830-8312-baa232305360
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). By
+default, the boxed buttons that appear in {{{kbd(M-x customize)}}} and
+related are distinct shades of gray. The following set of overrides
+removes the gray from the active buttons and amplifies it for the
+inactive ones.
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+(setq modus-themes-common-palette-overrides
+ '((bg-button-active bg-main)
+ (fg-button-active fg-main)
+ (bg-button-inactive bg-inactive)
+ (fg-button-inactive "gray50")))
+#+end_src
+
+*** Make TODO and DONE more or less intense
+:PROPERTIES:
+:CUSTOM_ID: h:b57bb50b-a863-4ea8-bb38-6de2275fa868
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]).
+Here we show how to affect just the =TODO= and =DONE= keywords that we
+encounter in Org buffers. The idea is to make those pop out more or
+to subdue them.
+
+[[#h:11297984-85ea-4678-abe9-a73aeab4676a][Make headings more or less colorful]].
+
+[[#h:bb5b396f-5532-4d52-ab13-149ca24854f1][Make inline code in prose use alternative styles]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+;; Increase intensity
+(setq modus-themes-common-palette-overrides
+ '((prose-done green-intense)
+ (prose-todo red-intense)))
+
+;; Tone down intensity
+(setq modus-themes-common-palette-overrides
+ '((prose-done green-faint) ; OR replace `green-faint' with `olive'
+ (prose-todo red-faint))) ; OR replace `red-faint' with `rust'
+
+;; Keep TODO at its default (so no override for it), but make DONE
+;; gray.
+(setq modus-themes-common-palette-overrides
+ '((prose-done fg-dim)))
+#+end_src
+
+*** Make headings more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:11297984-85ea-4678-abe9-a73aeab4676a
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]).
+Here we show how to alter the looks of headings, such as in Org mode.
+Using overrides here offers far more flexibility than what we could
+achieve with previous versions of the themes: the user can mix and
+match styles at will.
+
+[[#h:b57bb50b-a863-4ea8-bb38-6de2275fa868][Make TODO and DONE more intense]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; Apply more colorful foreground to some headings (headings 0-8).
+;; Level 0 is for Org #+title and related.
+(setq modus-themes-common-palette-overrides
+ '((fg-heading-1 blue-warmer)
+ (fg-heading-2 yellow-cooler)
+ (fg-heading-3 cyan-cooler)))
+
+;; Like the above, but with gradient colors
+(setq modus-themes-common-palette-overrides
+ '((fg-heading-1 blue)
+ (fg-heading-2 cyan)
+ (fg-heading-3 green)))
+
+;; Add color to level 1 heading, but use the main foreground for
+;; others
+(setq modus-themes-common-palette-overrides
+ '((fg-heading-1 blue)
+ (fg-heading-2 fg-main)
+ (fg-heading-3 fg-main)))
+
+;; Apply colorful foreground, background, and overline (headings 0-8)
+(setq modus-themes-common-palette-overrides
+ '((fg-heading-1 blue-warmer)
+ (bg-heading-1 bg-blue-nuanced)
+ (overline-heading-1 blue)))
+
+;; Apply gray scale foreground, background, and overline (headings 0-8)
+(setq modus-themes-common-palette-overrides
+ '((fg-heading-1 fg-main)
+ (bg-heading-1 bg-dim)
+ (overline-heading-1 border)))
+#+end_src
+
+*** Make Org agenda more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:a5af0452-a50f-481d-bf60-d8143f98105f
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]).
+Here we provide three distinct code blocks. The first adds
+alternative and more varied colors to the Org agenda (and related).
+The second uses faint coloration. The third makes the agenda use
+various shades of blue. Mix and match at will, while also combining
+these styles with what we show in the other chapters with practical
+stylistic variants.
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+;; Make the Org agenda use alternative and varied colors.
+(setq modus-themes-common-palette-overrides
+ '((date-common cyan) ; default value (for timestamps and more)
+ (date-deadline red-warmer)
+ (date-event magenta-warmer)
+ (date-holiday blue) ; for M-x calendar
+ (date-now yellow-warmer)
+ (date-scheduled magenta-cooler)
+ (date-weekday cyan-cooler)
+ (date-weekend blue-faint)))
+#+end_src
+
+An example with faint coloration:
+
+#+begin_src emacs-lisp
+;; Make the Org agenda use faint colors.
+(setq modus-themes-common-palette-overrides
+ '((date-common cyan-faint) ; for timestamps and more
+ (date-deadline red-faint)
+ (date-event fg-alt) ; default
+ (date-holiday magenta) ; default (for M-x calendar)
+ (date-now fg-main) ; default
+ (date-scheduled yellow-faint)
+ (date-weekday fg-dim)
+ (date-weekend fg-dim)))
+#+end_src
+
+A third example that makes the agenda more blue:
+
+#+begin_src emacs-lisp
+;; Make the Org agenda use more blue instead of yellow and red.
+(setq modus-themes-common-palette-overrides
+ '((date-common cyan) ; default value (for timestamps and more)
+ (date-deadline blue-cooler)
+ (date-event blue-faint)
+ (date-holiday blue) ; for M-x calendar
+ (date-now blue-faint)
+ (date-scheduled blue)
+ (date-weekday fg-main)
+ (date-weekend fg-dim)))
+#+end_src
+
+Yet another example that also affects =DONE= and =TODO= keywords:
+
+#+begin_src emacs-lisp
+;; Change dates to a set of more subtle combinations. Deadlines are a
+;; shade of magenta, scheduled dates are a shade of green that
+;; complements that of the deadlines, weekday headings use the main
+;; foreground color while weekends are a shade of gray. The DONE
+;; keyword is a faint blue-gray while TODO is yellow.
+(setq modus-themes-common-palette-overrides
+ '((date-deadline magenta-warmer)
+ (date-scheduled green-cooler)
+ (date-weekday fg-main)
+ (date-event fg-dim)
+ (date-now blue)
+ (prose-done fg-alt)
+ (prose-todo yellow)))
+#+end_src
+
+*** Make inline code in prose use alternative styles
+:PROPERTIES:
+:CUSTOM_ID: h:bb5b396f-5532-4d52-ab13-149ca24854f1
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). In
+the following code block we show how to affect constructs such as
+Org's verbatim, code, and macro entries. We also provide mappings for
+tables, property drawers, tags, and code block delimiters, though we
+do not show every possible permutation.
+
+[[#h:b57bb50b-a863-4ea8-bb38-6de2275fa868][Make TODO and DONE more or less intense]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; These are all the mappings at their default values for didactic
+;; purposes
+(setq modus-themes-common-palette-overrides
+ '((prose-block fg-dim)
+ (prose-code green-cooler)
+ (prose-done green)
+ (prose-macro magenta-cooler)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-tag magenta-faint)
+ (prose-todo red)
+ (prose-verbatim magenta-warmer)))
+
+;; Make code block delimiters use a shade of red, tone down verbatim,
+;; code, and macro, and amplify the style of property drawers
+(setq modus-themes-common-palette-overrides
+ '((prose-block red-faint)
+ (prose-code fg-dim)
+ (prose-macro magenta-faint)
+ (prose-metadata cyan)
+ (prose-metadata-value green-warmer)
+ (prose-verbatim fg-dim)))
+
+;; Like the above but with more color variety for the inline code
+;; elements
+(setq modus-themes-common-palette-overrides
+ '((prose-block red-faint)
+ (prose-code blue-cooler)
+ (prose-macro yellow-warmer)
+ (prose-metadata cyan)
+ (prose-metadata-value green-warmer)
+ (prose-verbatim red-warmer)))
+#+end_src
+
+*** Make mail citations and headers more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:7da7a4ad-5d3a-4f11-9796-5a1abed0f0c4
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). In
+this section we show how to change the coloration of email message
+headers and citations. Before we show the code, this is the anatomy
+of a message:
+
+#+begin_example message
+From: Protesilaos <info@protesilaos.com>
+To: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+Subject: Test subject
+--- Headers above this line; message and citations below ---
+This is some sample text
+
+> > Older quote
+> Newer quote
+#+end_example
+
+We thus have the following:
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; Reduce the intensity of mail citations and headers
+(setq modus-themes-common-palette-overrides
+ '((mail-cite-0 cyan-faint)
+ (mail-cite-1 yellow-faint)
+ (mail-cite-2 green-faint)
+ (mail-cite-3 red-faint)
+ (mail-part olive)
+ (mail-recipient indigo)
+ (mail-subject maroon)
+ (mail-other slate)))
+
+;; Make mail citations more intense; adjust the headers accordingly
+(setq modus-themes-common-palette-overrides
+ '((mail-cite-0 blue)
+ (mail-cite-1 yellow)
+ (mail-cite-2 green)
+ (mail-cite-3 magenta)
+ (mail-part magenta-cooler)
+ (mail-recipient cyan)
+ (mail-subject red-warmer)
+ (mail-other cyan-cooler)))
+
+;; Make all citations faint and neutral; make most headers green but
+;; use red for the subject lie so that it stands out
+(setq modus-themes-common-palette-overrides
+ '((mail-cite-0 fg-dim)
+ (mail-cite-1 fg-alt)
+ (mail-cite-2 fg-dim)
+ (mail-cite-3 fg-alt)
+ (mail-part yellow-cooler)
+ (mail-recipient green-cooler)
+ (mail-subject red-cooler)
+ (mail-other green)))
+#+end_src
+
+*** Make the region preserve text colors, plus other styles
+:PROPERTIES:
+:CUSTOM_ID: h:c8605d37-66e1-42aa-986e-d7514c3af6fe
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]).
+Here we show how to make the region respect the underlying text colors
+or how to make the background more/less intense while combining it
+with an appropriate foreground value.
+
+[[#h:a5140c9c-18b2-45db-8021-38d0b5074116][Do not extend the region background]].
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; A background with no specific foreground (use foreground of
+;; underlying text)
+(setq modus-themes-common-palette-overrides
+ '((bg-region bg-ochre) ; try to replace `bg-ochre' with `bg-lavender', `bg-sage'
+ (fg-region unspecified)))
+
+;; Subtle gray with a prominent blue foreground
+(setq modus-themes-common-palette-overrides
+ '((bg-region bg-dim)
+ (fg-region blue-cooler)))
+
+;; Intense magenta background combined with the main foreground
+(setq modus-themes-common-palette-overrides
+ '((bg-region bg-magenta-intense)
+ (fg-region fg-main)))
+#+end_src
+
+*** Make mouse highlights more or less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:b5cab69d-d7cb-451c-8ff9-1f545ceb6caf
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). In
+the following code block we show how to affect the semantic color
+mapping that covers mouse hover effects and related highlights:
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; Make the background an intense yellow
+(setq modus-themes-common-palette-overrides
+ '((bg-hover bg-yellow-intense)))
+
+;; Make the background subtle green
+(setq modus-themes-common-palette-overrides
+ '((bg-hover bg-green-subtle)))
+#+end_src
+
+*** Make language underlines less colorful
+:PROPERTIES:
+:CUSTOM_ID: h:03dbd5af-6bae-475e-85a2-cec189f69598
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]).
+Here we show how to affect the color of the underlines that are used
+by code linters and prose spell checkers.
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; Make the underlines less intense
+(setq modus-themes-common-palette-overrides
+ '((underline-err red-faint)
+ (underline-warning yellow-faint)
+ (underline-note cyan-faint)))
+
+;; Change the color-coding of the underlines
+(setq modus-themes-common-palette-overrides
+ '((underline-err yellow-intense)
+ (underline-warning magenta-intense)
+ (underline-note green-intense)))
+#+end_src
+
+*** Make line numbers use alternative styles
+:PROPERTIES:
+:CUSTOM_ID: h:b6466f51-cb58-4007-9ebe-53a27af655c7
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). In
+this section we show how to affect the ~display-line-numbers-mode~.
+
+#+begin_src emacs-lisp
+;; These overrides are common to all Modus themes. We also provide
+;; theme-specific options, such as `modus-operandi-palette-overrides'.
+;;
+;; In general, the theme-specific overrides are better for overriding
+;; color values, such as redefining what `blue-faint' looks like. The
+;; common overrides are best used for changes to semantic color
+;; mappings, as we show below.
+
+
+;; Make line numbers less intense
+(setq modus-themes-common-palette-overrides
+ '((fg-line-number-inactive "gray50")
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive unspecified)
+ (bg-line-number-active unspecified)))
+
+;; Like the above, but use a shade of red for the current line number
+(setq modus-themes-common-palette-overrides
+ '((fg-line-number-inactive "gray50")
+ (fg-line-number-active red-cooler)
+ (bg-line-number-inactive unspecified)
+ (bg-line-number-active unspecified)))
+
+;; Make all numbers more intense, use a more pronounce gray
+;; background, and make the current line have a colored background
+(setq modus-themes-common-palette-overrides
+ '((fg-line-number-inactive fg-main)
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive bg-inactive)
+ (bg-line-number-active bg-cyan-intense)))
+#+end_src
+
+*** Make diffs use only a foreground
+:PROPERTIES:
+:CUSTOM_ID: h:b3761482-bcbf-4990-a41e-4866fb9dad15
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). In
+this section we show how to change diff buffers (e.g. in ~magit~) to
+only use color-coded text without any added background. What we
+basically do is to disable the applicable backgrounds and then
+intensify the foregrounds. Since the deuteranopia-optimized themes do
+not use the red-green color coding, we make an extra set of
+adjustments for them by overriding their palettes directly instead of
+just using the "common" overrides.
+
+#+begin_src emacs-lisp
+;; Diffs with only foreground colors. Word-wise ("refined") diffs
+;; have a gray background to draw attention to themselves.
+(setq modus-themes-common-palette-overrides
+ '((bg-added unspecified)
+ (bg-added-faint unspecified)
+ (bg-added-refine bg-inactive)
+ (fg-added green)
+ (fg-added-intense green-intense)
+
+ (bg-changed unspecified)
+ (bg-changed-faint unspecified)
+ (bg-changed-refine bg-inactive)
+ (fg-changed yellow)
+ (fg-changed-intense yellow-intense)
+
+ (bg-removed unspecified)
+ (bg-removed-faint unspecified)
+ (bg-removed-refine bg-inactive)
+ (fg-removed red)
+ (fg-removed-intense red-intense)
+
+ (bg-diff-context unspecified)))
+
+;; Because deuteranopia cannot use the typical red-yellow-green
+;; combination, we need to arrange for a yellow-purple-blue sequence.
+;; Notice that the above covers the "common" overrides, so we do not
+;; need to reproduce the whole list of them.
+(setq modus-operandi-deuteranopia-palette-overrides
+ '((fg-added blue)
+ (fg-added-intense blue-intense)
+
+ (fg-changed magenta-cooler)
+ (fg-changed-intense magenta-intense)
+
+ (fg-removed yellow-warmer)
+ (fg-removed-intense yellow-intense)))
+
+(setq modus-vivendi-deuteranopia-palette-overrides
+ '((fg-added blue)
+ (fg-added-intense blue-intense)
+
+ (fg-changed magenta-cooler)
+ (fg-changed-intense magenta-intense)
+
+ (fg-removed yellow)
+ (fg-removed-intense yellow-intense)))
+#+end_src
+
+*** Make deuteranopia diffs red and blue instead of yellow and blue
+:PROPERTIES:
+:CUSTOM_ID: h:16389ea1-4cb6-4b18-9409-384324113541
+:END:
+
+This is one of our practical examples to override the semantic colors
+of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). In
+this section we show how to implement a red+blue color coding for
+diffs in the themes ~modus-operandi-deuteranopia~ and
+~modus-vivendi-deuteranopia~. As those themes are optimized for users
+with red-green color deficiency, they do not use the typical red+green
+color coding for diffs, defaulting instead to yellow+blue which are
+discernible. Users with deuteranomaly or, generally, those who like a
+different aesthetic, can use the following to make diffs use the
+red+yellow+blue color coding for removed, changed, and added lines
+respectively. This is achieved by overriding the "changed" and
+"removed" entries to use the colors of regular ~modus-operandi~ and
+~modus-vivendi~.
+
+#+begin_src emacs-lisp
+(setq modus-operandi-deuteranopia-palette-overrides
+ '((bg-changed "#ffdfa9")
+ (bg-changed-faint "#ffefbf")
+ (bg-changed-refine "#fac090")
+ (bg-changed-fringe "#d7c20a")
+ (fg-changed "#553d00")
+ (fg-changed-intense "#655000")
+
+ (bg-removed "#ffd8d5")
+ (bg-removed-faint "#ffe9e9")
+ (bg-removed-refine "#f3b5af")
+ (bg-removed-fringe "#d84a4f")
+ (fg-removed "#8f1313")
+ (fg-removed-intense "#aa2222")))
+
+(setq modus-vivendi-deuteranopia-palette-overrides
+ '((bg-changed "#363300")
+ (bg-changed-faint "#2a1f00")
+ (bg-changed-refine "#4a4a00")
+ (bg-changed-fringe "#8a7a00")
+ (fg-changed "#efef80")
+ (fg-changed-intense "#c0b05f")
+
+ (bg-removed "#4f1119")
+ (bg-removed-faint "#380a0f")
+ (bg-removed-refine "#781a1f")
+ (bg-removed-fringe "#b81a1f")
+ (fg-removed "#ffbfbf")
+ (fg-removed-intense "#ff9095")))
+#+end_src
+
+*** Make the themes look like what the maintainer uses
+:PROPERTIES:
+:CUSTOM_ID: h:aabcada6-810d-4eee-b34a-d2a9c301824d
+:END:
+
+Based on what we have learnt from the previous sections of this
+manual, here is what Protesilaos uses:
+
+#+begin_src emacs-lisp
+;; Always reload the theme for changes to take effect!
+
+(setq modus-themes-custom-auto-reload nil
+ modus-themes-to-toggle '(modus-operandi modus-vivendi)
+ modus-themes-mixed-fonts t
+ modus-themes-variable-pitch-ui nil
+ modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil
+ modus-themes-org-blocks nil
+ modus-themes-completions '((t . (extrabold)))
+ modus-themes-prompts nil
+ modus-themes-headings
+ '((agenda-structure . (variable-pitch light 2.2))
+ (agenda-date . (variable-pitch regular 1.3))
+ (t . (regular 1.15))))
+
+(setq modus-themes-common-palette-overrides
+ '((cursor magenta-cooler)
+ ;; Make the fringe invisible.
+ (fringe unspecified)
+ ;; Make line numbers less intense and add a shade of cyan
+ ;; for the current line number.
+ (fg-line-number-inactive "gray50")
+ (fg-line-number-active cyan-cooler)
+ (bg-line-number-inactive unspecified)
+ (bg-line-number-active unspecified)
+ ;; Make the current line of `hl-line-mode' a fine shade of
+ ;; gray (though also see my `lin' package).
+ (bg-hl-line bg-dim)
+ ;; Make the region have a cyan-green background with no
+ ;; specific foreground (use foreground of underlying text).
+ ;; "bg-sage" refers to Salvia officinalis, else the common
+ ;; sage.
+ (bg-region bg-sage)
+ (fg-region unspecified)
+ ;; Make matching parentheses a shade of magenta. It
+ ;; complements the region nicely.
+ (bg-paren-match bg-magenta-intense)
+ ;; Make email citations faint and neutral, reducing the
+ ;; default four colors to two; make mail headers cyan-blue.
+ (mail-cite-0 fg-dim)
+ (mail-cite-1 blue-faint)
+ (mail-cite-2 fg-dim)
+ (mail-cite-3 blue-faint)
+ (mail-part cyan-warmer)
+ (mail-recipient blue-warmer)
+ (mail-subject magenta-cooler)
+ (mail-other cyan-warmer)
+ ;; Change dates to a set of more subtle combinations.
+ (date-deadline magenta-cooler)
+ (date-scheduled magenta)
+ (date-weekday fg-main)
+ (date-event fg-dim)
+ (date-now blue-faint)
+ ;; Make tags (Org) less colorful and tables look the same as
+ ;; the default foreground.
+ (prose-done cyan-cooler)
+ (prose-tag fg-dim)
+ (prose-table fg-main)
+ ;; Make headings less colorful (though I never use deeply
+ ;; nested headings).
+ (fg-heading-2 blue-faint)
+ (fg-heading-3 magenta-faint)
+ (fg-heading-4 blue-faint)
+ (fg-heading-5 magenta-faint)
+ (fg-heading-6 blue-faint)
+ (fg-heading-7 magenta-faint)
+ (fg-heading-8 blue-faint)
+ ;; Make the active mode line a fine shade of lavender
+ ;; (purple) and tone down the gray of the inactive mode
+ ;; lines.
+ (bg-mode-line-active bg-lavender)
+ (border-mode-line-active bg-lavender)
+
+ (bg-mode-line-inactive bg-dim)
+ (border-mode-line-inactive bg-inactive)
+ ;; Make the prompts a shade of magenta, to fit in nicely with
+ ;; the overall blue-cyan-purple style of the other overrides.
+ ;; Add a nuanced background as well.
+ (bg-prompt bg-magenta-nuanced)
+ (fg-prompt magenta-cooler)
+ ;; Tweak some more constructs for stylistic constistency.
+ (name blue-warmer)
+ (identifier magenta-faint)
+ (keybind magenta-cooler)
+ (accent-0 magenta-cooler)
+ (accent-1 cyan-cooler)
+ (accent-2 blue-warmer)
+ (accent-3 red-cooler)))
+
+;; Make the active mode line have a pseudo 3D effect (this assumes
+;; you are using the default mode line and not an extra package).
+(custom-set-faces
+ '(mode-line ((t :box (:style released-button)))))
+#+end_src
+
+** More accurate colors in terminal emulators
+:PROPERTIES:
+:CUSTOM_ID: h:fbb5e254-afd6-4313-bb05-93b3b4f67358
+:END:
+#+cindex: Color accuracy of terminal emulators
+
+[ This is based on partial information. Please help verify and/or
+ expand these findings. ]
+
+The graphical version of Emacs can reproduce color values accurately.
+Whereas things get more tricky when Emacs is used in a terminal
+emulator, because the terminals' own capabilities determine the number
+of colors that may be displayed: the Modus themes don't look as good in
+that case.
+
+There is, however, a way to instruct supported terminal emulators to use
+more accurate colors. In a shell prompt type =toe -a | grep direct= to
+get a list of relevant terminfo entries. There should be items such as
+=xterm-direct=, =alacritty-direct=, =kitty-direct=. Once you find the one
+that corresponds to your terminal, call Emacs with an environment
+variable like =TERM=xterm-direct=. Example that can be adapted to shell
+aliases:
+
+: TERM=xterm-direct emacsclient -nw
+
+Another example that can be bound to a key:
+
+: TERM=xterm-direct uxterm -e emacsclient -nw
+
+** Range of color with terminal emulators
+:PROPERTIES:
+:CUSTOM_ID: h:6b8211b0-d11b-4c00-9543-4685ec3b742f
+:END:
+#+cindex: Pure white and pure black in terminal emulators
+
+[ This is based on partial information. Please help verify and/or
+ expand these findings. ]
+
+When Emacs runs in a non-windowed session its color reproduction
+capacity is framed or determined by the underlying terminal emulator
+([[#h:fbb5e254-afd6-4313-bb05-93b3b4f67358][More accurate colors in terminal emulators]]). Emacs cannot produce a
+color that lies outside the range of what the terminal's color palette
+renders possible.
+
+This is immediately noticeable when the terminal's first 16 codes do not
+include a pure black value for the =termcol0= entry and a pure white for
+=termcol15=. Emacs cannot set the correct background (white for
+~modus-operandi~; black for ~modus-vivendi~) or foreground (inverse of
+the background). It thus falls back to the closest approximation, which
+seldom is appropriate for the purposes of the Modus themes.
+
+In such a case, the user is expected to update their terminal's color
+palette such as by adapting these resources ([[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Preview theme colors]]):
+
+#+begin_src emacs-lisp
+! Theme: modus-operandi
+! Description: XTerm port of modus-operandi (Modus themes for GNU Emacs)
+! Author: Protesilaos Stavrou, <https://protesilaos.com>
+xterm*background: #ffffff
+xterm*foreground: #000000
+xterm*color0: #000000
+xterm*color1: #a60000
+xterm*color2: #005e00
+xterm*color3: #813e00
+xterm*color4: #0031a9
+xterm*color5: #721045
+xterm*color6: #00538b
+xterm*color7: #bfbfbf
+xterm*color8: #595959
+xterm*color9: #972500
+xterm*color10: #315b00
+xterm*color11: #70480f
+xterm*color12: #2544bb
+xterm*color13: #5317ac
+xterm*color14: #005a5f
+xterm*color15: #ffffff
+
+! Theme: modus-vivendi
+! Description: XTerm port of modus-vivendi (Modus themes for GNU Emacs)
+! Author: Protesilaos Stavrou, <https://protesilaos.com>
+xterm*background: #000000
+xterm*foreground: #ffffff
+xterm*color0: #000000
+xterm*color1: #ff8059
+xterm*color2: #44bc44
+xterm*color3: #d0bc00
+xterm*color4: #2fafff
+xterm*color5: #feacd0
+xterm*color6: #00d3d0
+xterm*color7: #bfbfbf
+xterm*color8: #595959
+xterm*color9: #ef8b50
+xterm*color10: #70b900
+xterm*color11: #c0c530
+xterm*color12: #79a8ff
+xterm*color13: #b6a0ff
+xterm*color14: #6ae4b9
+xterm*color15: #ffffff
+#+end_src
+
+** Preview theme colors
+:properties:
+:custom_id: h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d
+:end:
+#+cindex: Preview named colors or semantic color mappings
+
+#+findex: modus-themes-list-colors
+The command ~modus-themes-list-colors~ uses minibuffer completion to
+select an item from the Modus themes and then produces a buffer with
+previews of its color palette entries. The buffer has a naming scheme
+that reflects the given choice, like =modus-operandi-list-colors= for
+the ~modus-operandi~ theme.
+
+#+findex: modus-themes-list-colors-current
+The command ~modus-themes-list-colors-current~ skips the minibuffer
+selection process and just produces a preview for the current Modus
+theme.
+
+When called with a prefix argument (=C-u= with the default key
+bindings), these commands will show a preview of the palette's
+semantic color mappings instead of the named colors. In this context,
+"named colors" are entries that associate a symbol to a string color
+value, such as =(blue-warmer "#354fcf")=. Whereas "semantic color
+mappings" associate a named color to a symbol, like =(string
+blue-warmer)=, thus making the theme render all string constructs in
+the =blue-warmer= color value ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]).
+
+#+findex: modus-themes-preview-colors
+#+findex: modus-themes-preview-colors-current
+Aliases for those commands are ~modus-themes-preview-colors~ and
+~modus-themes-preview-colors-current~.
+
+Each row shows a foreground and background coloration using the
+underlying value it references. For example a line with =#a60000= (a
+shade of red) will show red text followed by a stripe with that same
+color as a backdrop.
+
+The name of the buffer describes the given Modus theme and what the
+contents are, such as =*modus-operandi-list-colors*= for named colors
+and ==*modus-operandi-list-mappings*= for the semantic color mappings.
+
+** Per-theme customization settings
+:properties:
+:custom_id: h:a897b302-8e10-4a26-beab-3caaee1e1193
+:end:
+
+If you prefer to maintain different customization options between the
+two themes, it is best you write your own functions that first set those
+options and then load the relevant theme. The following code does
+exactly that by simply differentiating the two themes on the choice of
+bold constructs in code syntax (enabled for one, disabled for the
+other).
+
+#+begin_src emacs-lisp
+(defun my-demo-modus-operandi ()
+ (interactive)
+ (setq modus-themes-bold-constructs t) ; ENABLE bold
+ (modus-themes-load-theme 'modus-operandi))
+
+(defun my-demo-modus-vivendi ()
+ (interactive)
+ (setq modus-themes-bold-constructs nil) ; DISABLE bold
+ (modus-themes-load-theme 'modus-vivendi))
+
+(defun my-demo-modus-themes-toggle ()
+ (if (eq (car custom-enabled-themes) 'modus-operandi)
+ (my-demo-modus-vivendi)
+ (my-demo-modus-operandi)))
+#+end_src
+
+Then assign ~my-demo-modus-themes-toggle~ to a key instead of the
+equivalent the themes provide.
+
+For a more elaborate design, it is better to inspect the source code of
+~modus-themes-toggle~ and relevant functions.
+
+** Get a single color from the palette
+:PROPERTIES:
+:CUSTOM_ID: h:1cc552c1-5f5f-4a56-ae78-7b69e8512c4e
+:END:
+
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with modus-themes-with-colors]].
+
+#+findex: modus-themes-get-color-value
+The fuction ~modus-themes-get-color-value~ can be called from Lisp to
+return the value of a color from the active Modus theme palette. It
+takea a =COLOR= argument and an optional =OVERRIDES=.
+
+=COLOR= is a symbol that represents a named color entry in the
+palette.
+
+[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Preview theme colors]].
+
+If the value is the name of another color entry in the palette (so a
+mapping), this function recurs until it finds the underlying color
+value.
+
+With an optional =OVERRIDES= argument as a non-~nil~ value, it accounts
+for palette overrides. Else it reads only the default palette.
+
+[[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]].
+
+With optional =THEME= as a symbol among ~modus-themes-items~ (alias
+~modus-themes-collection~), use the palette of that item. Else use
+the current Modus theme.
+
+If =COLOR= is not present in the palette, this function returns the
+~unspecified~ symbol, which is safe when used as a face attribute's
+value.
+
+An example with ~modus-operandi~ to show how this function behaves
+with/without overrides and when recursive mappings are introduced.
+
+#+begin_src emacs-lisp
+;; 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 modus-themes-common-palette-overrides
+ '((cursor red)
+ (fg-mode-line-active cursor)
+ (border-mode-line-active fg-mode-line-active)))
+
+;; Ignore the overrides and get the original value.
+(modus-themes-get-color-value 'border-mode-line-active)
+;; => "#5a5a5a"
+
+;; Read from the overrides and deal with any recursion to find the
+;; underlying value.
+(modus-themes-get-color-value 'border-mode-line-active :overrides)
+;; => "#a60000"
+#+end_src
+
+** Use theme colors in code with modus-themes-with-colors
+:properties:
+:custom_id: h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae
+:end:
+#+cindex: Use colors from the palette anywhere
+
+[[#h:1cc552c1-5f5f-4a56-ae78-7b69e8512c4e][Get a single color from the palette]].
+
+Note that users most probably do not need the following. Just rely on
+the comprehensive overrides we provide ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]).
+
+#+findex: modus-themes-with-colors
+Advanced users may want to apply colors from the palette of the active
+Modus theme in their custom code. The ~modus-themes-with-colors~
+macro supplies those to any form called inside of it. For example:
+
+#+begin_src emacs-lisp
+(modus-themes-with-colors
+ (list blue-warmer magenta-cooler fg-added warning variable fg-heading-4))
+;; => ("#354fcf" "#531ab6" "#005000" "#884900" "#005e8b" "#721045")
+#+end_src
+
+The above return value is for ~modus-operandi~ when that is the active
+theme. Switching to another theme and evaluating this code anew will
+give us the relevant results for that theme (remember that since
+version 4, the Modus themes consist of six items ([[#h:f0f3dbcb-602d-40cf-b918-8f929c441baf][Overview]])). The
+same with ~modus-vivendi~ as the active theme:
+
+#+begin_src emacs-lisp
+(modus-themes-with-colors
+ (list blue-warmer magenta-cooler fg-added warning variable fg-heading-4))
+;; => ("#79a8ff" "#b6a0ff" "#a0e0a0" "#fec43f" "#00d3d0" "#feacd0")
+#+end_src
+
+The ~modus-themes-with-colors~ has access to the whole palette of the
+active theme, meaning that it can instantiate both (i) named colors
+like =blue-warmer= and (ii) semantic color mappings like =warning=.
+We provide commands to inspect those ([[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Preview theme colors]]).
+
+Others sections in this manual show how to use the aforementioned
+macro ([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]]).
+
+Because the ~modus-themes-with-colors~ will most likely be used to
+customize faces, note that any function that calls it must be run at
+startup after the theme loads. The same function must also be
+assigned to the ~modus-themes-after-load-theme-hook~ for its effects
+to persist and be updated when switching between Modus themes (e.g. to
+update the exact value of =blue-warmer= when toggling between
+~modus-operandi~ to ~modus-vivendi~.
+
+** Do not extend the region background
+:PROPERTIES:
+:CUSTOM_ID: h:a5140c9c-18b2-45db-8021-38d0b5074116
+:END:
+
+By the default, the background of the ~region~ face extends from the
+end of the line to the edge of the window. To limit it to the end of
+the line, we need to override the face's =:extend= attribute. Adding
+this to the Emacs configuration file will suffice:
+
+#+begin_src emacs-lisp
+;; Do not extend `region' background past the end of the line.
+(custom-set-faces
+ '(region ((t :extend nil))))
+#+end_src
+
+[[#h:c8605d37-66e1-42aa-986e-d7514c3af6fe][Make the region preserve text colors, plus other styles]].
+
+** Add padding to mode line
+:PROPERTIES:
+:CUSTOM_ID: h:5a0c58cc-f97f-429c-be08-927b9fbb0a9c
+:END:
+
+Emacs faces do not have a concept of "padding" for the space between
+the text and its box boundaries. We can approximate the effect by
+adding a =:box= attribute, making its border several pixels thick, and
+using the mode line's background color for it. This way the thick
+border will not stand out and will appear as a continuation of the
+mode line.
+
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with modus-themes-with-colors]].
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Add "padding" to the mode lines
+ `(mode-line ((,c :box (:line-width 10 :color ,bg-mode-line-active))))
+ `(mode-line-inactive ((,c :box (:line-width 10 :color ,bg-mode-line-inactive)))))))
+
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+#+end_src
+
+The above has the effect of removing the border around the mode lines.
+In older versions of the themes, we provided the option for a padded
+mode line which could also have borders around it. Those were not
+real border, however, but an underline and an overline. Adjusting the
+above:
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Add "padding" to the mode lines
+ `(mode-line ((,c :underline ,border-mode-line-active
+ :overline ,border-mode-line-active
+ :box (:line-width 10 :color ,bg-mode-line-active))))
+ `(mode-line-inactive ((,c :underline ,border-mode-line-inactive
+ :overline ,border-mode-line-inactive
+ :box (:line-width 10 :color ,bg-mode-line-inactive)))))))
+
+;; ESSENTIAL to make the underline move to the bottom of the box:
+(setq x-underline-at-descent-line t)
+
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+#+end_src
+
+The reason we no longer provide this option is because it depends on a
+non-~nil~ value for ~x-underline-at-descent-line~. That variable
+affects ALL underlines, including those of links. The effect is
+intrusive and looks awkard in prose.
+
+As such, the Modus themes no longer provide that option but instead
+offer this piece of documentation to make the user fully aware of the
+state of affairs.
+
+** Remap face with local value
+:properties:
+:custom_id: h:7a93cb6f-4eca-4d56-a85c-9dcd813d6b0f
+:end:
+#+cindex: Remapping faces
+
+There are cases where we need to change the buffer-local attributes of a
+face. This might be because we have our own minor mode that re-uses a
+face for a particular purpose, such as a line selection tool that
+activates ~hl-line-mode~, but we wish to keep it distinct from other
+buffers. This is where ~face-remap-add-relative~ can be applied and may
+be combined with ~modus-themes-with-colors~ to deliver consistent results.
+
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with modus-themes-with-colors]].
+
+In this example we will write a simple interactive function that adjusts
+the background color of the ~region~ face. This is the sample code:
+
+#+begin_src emacs-lisp
+(defvar my-rainbow-region-colors
+ (modus-themes-with-colors
+ `((red . ,bg-red-subtle)
+ (green . ,bg-green-subtle)
+ (yellow . ,bg-yellow-subtle)
+ (blue . ,bg-blue-subtle)
+ (magenta . ,bg-magenta-subtle)
+ (cyan . ,bg-cyan-subtle)))
+ "Sample list of color values for `my-rainbow-region'.")
+
+(defun my-rainbow-region (color)
+ "Remap buffer-local attribute of `region' using COLOR."
+ (interactive
+ (list
+ (completing-read "Pick a color: " my-rainbow-region-colors)))
+ (face-remap-add-relative
+ 'region
+ `( :background ,(alist-get (intern color) my-rainbow-region-colors)
+ :foreground ,(face-attribute 'default :foreground))))
+#+end_src
+
+When ~my-rainbow-region~ is called interactively, it prompts for a color
+to use. The list of candidates is drawn from the car of each
+association in ~my-rainbow-region-colors~ (so "red", "green", etc.).
+
+To extend this principle, we may write wrapper functions that pass a
+color directly. Those can be useful in tandem with hooks. Consider
+this example:
+
+#+begin_src emacs-lisp
+(defun my-rainbow-region-magenta ()
+ (my-rainbow-region 'magenta))
+
+(add-hook 'diff-mode-hook #'my-rainbow-region-magenta)
+#+end_src
+
+Whenever we enter a ~diff-mode~ buffer, we now get a magenta-colored
+region.
+
+Perhaps you may wish to generalize those findings in to a set of
+functions that also accept an arbitrary face. We shall leave the
+experimentation up to you.
+
+** Font configurations for Org and others
+:properties:
+:custom_id: h:defcf4fc-8fa8-4c29-b12e-7119582cc929
+:end:
+#+cindex: Font configurations
+
+The themes are designed to optionally cope well with mixed font
+configurations. This mostly concerns ~org-mode~ and ~markdown-mode~, though
+expect to find it elsewhere like in ~Info-mode~.
+
+[[#h:115e6c23-ee35-4a16-8cef-e2fcbb08e28b][Option for font mixing]].
+
+In practice it means that the user can safely opt for a more
+prose-friendly proportionately spaced typeface as their default, while
+spacing-sensitive elements like tables and inline code always use a
+monospaced font, by inheriting from the ~fixed-pitch~ face.
+
+Users can try the built-in {{{kbd(M-x variable-pitch-mode)}}} to see the
+effect in action.
+
+To make everything use your desired font families, you need to configure
+the ~variable-pitch~ (proportional spacing) and ~fixed-pitch~ (monospaced)
+faces respectively. It may also be convenient to set your main typeface
+by configuring the ~default~ face the same way.
+
+[ The ~fontaine~ package on GNU ELPA (by Protesilaos) is designed to
+ handle this case. ]
+
+Put something like this in your initialization file (also consider
+reading the doc string of ~set-face-attribute~):
+
+#+begin_src emacs-lisp
+;; Main typeface
+(set-face-attribute 'default nil :family "DejaVu Sans Mono" :height 110)
+
+;; Proportionately spaced typeface
+(set-face-attribute 'variable-pitch nil :family "DejaVu Serif" :height 1.0)
+
+;; Monospaced typeface
+(set-face-attribute 'fixed-pitch nil :family "DejaVu Sans Mono" :height 1.5)
+#+end_src
+
+Or employ the ~face-attribute~ function to read an existing value, such as
+if you want to make ~fixed-pitch~ use the font family of the ~default~ face:
+
+#+begin_src emacs-lisp
+(set-face-attribute 'fixed-pitch nil :family (face-attribute 'default :family))
+#+end_src
+
+The next section shows how to make those work in a more elaborate setup
+that is robust to changes between the Modus themes.
+
+[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
+
+Note the differences in the ~:height~ property. The ~default~ face must
+specify an absolute value, which is the point size × 10. So if you want
+to use a font at point size =11=, you set the height to =110=.[fn:: ~:height~
+values do not need to be rounded to multiples of ten: the likes of =115=
+are perfectly valid—some typefaces will change to account for those
+finer increments.] Whereas every other face must either not specify a
+height or have a value that is relative to the default, represented as a
+floating point. If you use an integer, then that means an absolute
+height. This is of paramount importance: it ensures that all fonts can
+scale gracefully when using something like the ~text-scale-adjust~ command
+which only operates on the base font size (i.e. the ~default~ face's
+absolute height).
+
+[[#h:e6c5451f-6763-4be7-8fdb-b4706a422a4c][Note for EWW and Elfeed fonts]].
+
+** Configure bold and italic faces
+:properties:
+:custom_id: h:2793a224-2109-4f61-a106-721c57c01375
+:end:
+#+cindex: Bold and italic fonts
+
+The Modus themes do not hardcode a ~:weight~ or ~:slant~ attribute in the
+thousands of faces they cover. Instead, they configure the generic
+faces called ~bold~ and ~italic~ to use the appropriate styles and then
+instruct all relevant faces that require emphasis to inherit from them.
+
+This practically means that users can change the particularities of what
+it means for a construct to be bold/italic, by tweaking the ~bold~ and
+~italic~ faces. Cases where that can be useful include:
+
++ The default typeface does not have a variant with slanted glyphs
+ (e.g. Fira Mono/Code as of this writing on 2021-07-07), so the user
+ wants to add another family for the italics, such as Hack.
+
++ The typeface of choice provides a multitude of weights and the user
+ prefers the light one by default. To prevent the bold weight from
+ being too heavy compared to the light one, they opt to make ~bold~ use a
+ semibold weight.
+
++ The typeface distinguishes between oblique and italic forms by
+ providing different font variants (the former are just slanted
+ versions of the upright forms, while the latter have distinguishing
+ features as well). In this case, the user wants to specify the font
+ that applies to the ~italic~ face.
+
+To achieve those effects, one must first be sure that the fonts they use
+have support for those features. It then is a matter of following the
+instructions for all typeface tweaks.
+
+[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and others]].
+
+In this example, we set the default font family to Fira Code, while we
+choose to render italics in the Hack typeface (obviously you need to
+pick fonts that work well together):
+
+#+begin_src emacs-lisp
+(set-face-attribute 'default nil :family "Fira Code" :height 110)
+(set-face-attribute 'italic nil :family "Hack")
+#+end_src
+
+And here we play with different weights, using Source Code Pro:
+
+#+begin_src emacs-lisp
+(set-face-attribute 'default nil :family "Source Code Pro" :height 110 :weight 'light)
+(set-face-attribute 'bold nil :weight 'semibold)
+#+end_src
+
+To reset the font family, one can use this:
+
+#+begin_src emacs-lisp
+(set-face-attribute 'italic nil :family 'unspecified)
+#+end_src
+
+To ensure that the effects persist after switching between the Modus
+themes (such as with {{{kbd(M-x modus-themes-toggle)}}}), the user needs to
+write their configurations to a function and pass it to the
+~modus-themes-after-load-theme-hook~. This is necessary because themes
+set the styles of faces upon activation, overriding prior values where
+conflicts occur between the previous and the current states (otherwise
+changing themes would not be possible).
+
+[[#h:86f6906b-f090-46cc-9816-1fe8aeb38776][A theme-agnostic hook for theme loading]].
+
+This is a minimal setup to preserve font configurations across theme
+load phases. For a more permanent setup, it is better to rely on the
+~custom-set-faces~ function: ~set-face-attribute~ works just fine, though it
+probably is better suited for quick previews or for smaller scale
+operations (~custom-set-faces~ follows the format used in the source code
+of the themes, which can make it easier to redefine faces in bulk).
+
+#+begin_src emacs-lisp
+;; our generic function
+(defun my-modes-themes-bold-italic-faces ()
+ (set-face-attribute 'default nil :family "Source Code Pro" :height 110)
+ (set-face-attribute 'bold nil :weight 'semibold))
+
+;; or use this if you configure a lot of face and attributes and
+;; especially if you plan to use `modus-themes-with-colors', as shown
+;; elsewhere in the manual
+(defun my-modes-themes-bold-italic-faces ()
+ (custom-set-faces
+ '(default ((t :family "Source Code Pro" :height 110)))
+ '(bold ((t :weight semibold)))))
+
+;; and here is the hook
+(add-hook 'modus-themes-after-load-theme-hook #'my-modes-themes-bold-italic-faces)
+#+end_src
+
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with modus-themes-with-colors]].
+
+** Custom Org todo keyword and priority faces
+:properties:
+:custom_id: h:89f0678d-c5c3-4a57-a526-668b2bb2d7ad
+:end:
+#+cindex: Org custom todo faces
+
+Users of ~org-mode~ have the option to configure various keywords and
+priority cookies to better match their workflow. User options are
+~org-todo-keyword-faces~ and ~org-priority-faces~.
+
+As those are meant to be custom faces, it is futile to have the themes
+guess what each user wants to use, which keywords to target, and so on.
+Instead, we can provide guidelines on how to customize things to one's
+liking with the intent of retaining the overall aesthetic of the themes.
+
+Please bear in mind that the end result of those is not controlled by
+the active Modus theme but by how Org maps faces to its constructs.
+Editing those while ~org-mode~ is active requires re-initialization of the
+mode with {{{kbd(M-x org-mode-restart)}}} for changes to take effect.
+
+Let us assume you wish to visually differentiate your keywords. You
+have something like this:
+
+#+begin_src emacs-lisp
+(setq org-todo-keywords
+ '((sequence "TODO(t)" "|" "DONE(D)" "CANCEL(C)")
+ (sequence "MEET(m)" "|" "MET(M)")
+ (sequence "STUDY(s)" "|" "STUDIED(S)")
+ (sequence "WRITE(w)" "|" "WROTE(W)")))
+#+end_src
+
+You could then use a variant of the following to inherit from a face
+that uses the styles you want and also to preserve the attributes
+applied by the ~org-todo~ face (in case there is a difference between
+the two):
+
+#+begin_src emacs-lisp
+(setq org-todo-keyword-faces
+ '(("MEET" . (:inherit (bold org-todo)))
+ ("STUDY" . (:inherit (warning org-todo)))
+ ("WRITE" . (:inherit (shadow org-todo)))))
+#+end_src
+
+This will refashion the keywords you specify, while letting the other
+items in ~org-todo-keywords~ use their original styles, which are
+defined in the ~org-todo~ and ~org-done~ faces.
+
+If you want back the defaults, try specifying just the ~org-todo~ face:
+
+#+begin_src emacs-lisp
+(setq org-todo-keyword-faces
+ '(("MEET" . org-todo)
+ ("STUDY" . org-todo)
+ ("WRITE" . org-todo)))
+#+end_src
+
+Or set ~org-todo-keyword-faces~ to ~nil~.
+
+When you inherit from multiple faces, you need to do it the way it is
+shown further above. The order is significant: the first entry is
+applied on top of the second, overriding any attributes that are
+explicitly set for both of them: any attribute that is not specified
+is not overridden, so, for example, if ~org-todo~ has a background and
+a foreground, while ~font-lock-type-face~ only has a foreground, the
+merged face will include the background of the former and the
+foreground of the latter. If you do not want to blend multiple faces,
+you only specify one by name without parentheses or an =:inherit=
+keyword. A pattern of =keyword . face= will suffice.
+
+Both approaches can be used simultaneously, as illustrated in this
+configuration of the priority cookies:
+
+#+begin_src emacs-lisp
+(setq org-priority-faces
+ '((?A . (:inherit (bold org-priority)))
+ (?B . org-priority)
+ (?C . (:inherit (shadow org-priority)))))
+#+end_src
+
+To find all the faces that are loaded in your current Emacs session, use
+{{{kbd(M-x list-faces-display)}}}. Try {{{kbd(M-x describe-variable)}}} as well and
+then specify the name of each of those Org variables demonstrated above.
+Their documentation strings will offer you further guidance.
+
+Recall that the themes let you retrieve a color from their palette. Do
+it if you plan to control face attributes.
+
+[[#h:02e25930-e71a-493d-828a-8907fc80f874][Check color combinations]].
+
+** Custom Org emphasis faces
+:properties:
+:custom_id: h:26026302-47f4-4471-9004-9665470e7029
+:end:
+#+cindex: Org custom emphasis faces
+
+Org provides the user option ~org-emphasis-alist~ which associates a
+character with a face, list of faces, or face attributes. The default
+specification of that variable looks like this:
+
+#+begin_src emacs-lisp
+(setq org-emphasis-alist
+ '(("*" bold)
+ ("/" italic)
+ ("_" underline)
+ ("=" org-verbatim verbatim)
+ ("~" org-code verbatim)
+ ("+" (:strike-through t))))
+#+end_src
+
+With the exception of ~org-verbatim~ and ~org-code~ faces, everything else
+uses the corresponding type of emphasis: a bold typographic weight, or
+italicised, underlined, and struck through text.
+
+The best way for users to add some extra attributes, such as a
+foreground color, is to define their own faces and assign them to the
+given emphasis marker/character.
+
+This is a custom face that extends the standard ~bold~ face with a red
+foreground value (so it colorises the text in addition to the bold
+weight):
+
+#+begin_src emacs-lisp
+(defface my-org-emphasis-bold
+ '((default :inherit bold)
+ (((class color) (min-colors 88) (background light))
+ :foreground "#a60000")
+ (((class color) (min-colors 88) (background dark))
+ :foreground "#ff8059"))
+ "My bold emphasis for Org.")
+#+end_src
+
+This face definition reads as follows:
+
++ Always inherit the ~bold~ face ([[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]]).
++ For versions of Emacs that support at least 88 colors (graphical
+ Emacs, for example) and use a light background, apply the =#a60000=
+ value.
++ For the same kind of Emacs that has a dark background use the =#ff8059=
+ color instead.
+
+Same principle for how to extend ~italic~ and ~underline~ with, for example,
+green and yellow hues, respectively:
+
+#+begin_src emacs-lisp
+(defface my-org-emphasis-italic
+ '((default :inherit italic)
+ (((class color) (min-colors 88) (background light))
+ :foreground "#005e00")
+ (((class color) (min-colors 88) (background dark))
+ :foreground "#44bc44"))
+ "My italic emphasis for Org.")
+
+(defface my-org-emphasis-underline
+ '((default :inherit underline)
+ (((class color) (min-colors 88) (background light))
+ :foreground "#813e00")
+ (((class color) (min-colors 88) (background dark))
+ :foreground "#d0bc00"))
+ "My underline emphasis for Org.")
+#+end_src
+
+In the case of a strike-through effect, we have no generic face to
+inherit from, so we can write it as follows to also change the
+foreground to a more subtle gray:
+
+#+begin_src emacs-lisp
+(defface my-org-emphasis-strike-through
+ '((default :strike-through t)
+ (((class color) (min-colors 88) (background light))
+ :foreground "#505050")
+ (((class color) (min-colors 88) (background dark))
+ :foreground "#a8a8a8"))
+ "My strike-through emphasis for Org.")
+#+end_src
+
+Or we can just change the color of the line that strikes through the
+text to, for example, a shade of red:
+
+#+begin_src emacs-lisp
+(defface my-org-emphasis-strike-through
+ '((((class color) (min-colors 88) (background light))
+ :strike-through "#972500")
+ (((class color) (min-colors 88) (background dark))
+ :strike-through "#ef8b50"))
+ "My strike-through emphasis for Org.")
+#+end_src
+
+It is possible to combine those effects:
+
+#+begin_src emacs-lisp
+(defface my-org-emphasis-strike-through
+ '((((class color) (min-colors 88) (background light))
+ :strike-through "#972500" :foreground "#505050")
+ (((class color) (min-colors 88) (background dark))
+ :strike-through "#ef8b50" :foreground "#a8a8a8"))
+ "My strike-through emphasis for Org.")
+#+end_src
+
+One may inspect the variables ~modus-themes-operandi-colors~ and
+~modus-themes-vivendi-colors~ for possible color values. Or call the
+command ~modus-themes-list-colors~ to show a buffer that previews each
+entry in the palette.
+
+[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Visualize the active Modus theme's palette]].
+
+Once we have defined the faces we need, we must update the
+~org-emphasis-alist~. Given that ~org-verbatim~ and ~org-code~ are already
+styled by the themes, it probably is best not to edit them:
+
+#+begin_src emacs-lisp
+(setq org-emphasis-alist
+ '(("*" my-org-emphasis-bold)
+ ("/" my-org-emphasis-italic)
+ ("_" my-org-emphasis-underline)
+ ("=" org-verbatim verbatim)
+ ("~" org-code verbatim)
+ ("+" my-org-emphasis-strike-through)))
+#+end_src
+
+That's it! For changes to take effect in already visited Org files,
+invoke {{{kbd(M-x org-mode-restart)}}}.
+
+** Update Org block delimiter fontification
+:properties:
+:custom_id: h:f44cc6e3-b0f1-4a5e-8a90-9e48fa557b50
+:end:
+
+As noted in the section about ~modus-themes-org-blocks~, Org contains a
+variable that determines whether the block's begin and end lines are
+extended to the edge of the window ([[#h:b7e328c0-3034-4db7-9cdf-d5ba12081ca2][Option for org-mode block styles]]).
+The variable is ~org-fontify-whole-block-delimiter-line~.
+
+Users who change the style of Org blocks from time to time may prefer to
+automatically update delimiter line fontification, such as with the
+following setup:
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-org-fontify-block-delimiter-lines ()
+ "Match `org-fontify-whole-block-delimiter-line' to theme style.
+Run this function at the post theme load phase, such as with the
+`modus-themes-after-load-theme-hook'."
+ (if (eq modus-themes-org-blocks 'gray-background)
+ (setq org-fontify-whole-block-delimiter-line t)
+ (setq org-fontify-whole-block-delimiter-line nil)))
+
+(add-hook 'modus-themes-after-load-theme-hook
+ #'my-modus-themes-org-fontify-block-delimiter-lines)
+#+end_src
+
+Then {{{kbd(M-x org-mode-restart)}}} for changes to take effect, though manual
+intervention can be circumvented by tweaking the function thus:
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-org-fontify-block-delimiter-lines ()
+ "Match `org-fontify-whole-block-delimiter-line' to theme style.
+Run this function at the post theme load phase, such as with the
+`modus-themes-after-load-theme-hook'."
+ (if (eq modus-themes-org-blocks 'gray-background)
+ (setq org-fontify-whole-block-delimiter-line t)
+ (setq org-fontify-whole-block-delimiter-line nil))
+ (when (derived-mode-p 'org-mode)
+ (font-lock-flush)))
+#+end_src
+
+** Measure color contrast
+:properties:
+:custom_id: h:02e25930-e71a-493d-828a-8907fc80f874
+:end:
+#+findex: modus-themes-contrast
+#+findex: modus-themes-wcag-formula
+#+cindex: Color contrast
+
+The themes provide the functions ~modus-themes-wcag-formula~ and
+~modus-themes-contrast~. The former is a direct implementation of the
+WCAG formula: <https://www.w3.org/TR/WCAG20-TECHS/G18.html>. It
+calculates the relative luminance of a color value that is expressed in
+hexadecimal RGB notation. While the latter function is just a
+convenient wrapper for comparing the relative luminance between two
+colors.
+
+In practice, one needs to work only with ~modus-themes-contrast~. It
+accepts two color values and returns their contrast ratio. Values range
+from 1 to 21 (lowest to highest). The themes are designed to always be
+equal or higher than 7 for each combination of background and foreground
+that they use (this is the WCAG AAA standard---the most demanding of its
+kind).
+
+A couple of examples (rounded numbers):
+
+#+begin_src emacs-lisp
+;; Pure white with pure green
+(modus-themes-contrast "#ffffff" "#00ff00")
+;; => 1.37
+;; That is an outright inaccessible combo
+
+;; Pure black with pure green
+(modus-themes-contrast "#000000" "#00ff00")
+;; => 15.3
+;; That is a highly accessible combo
+#+end_src
+
+It does not matter which color value comes first. The ratio is always
+the same.
+
+If one does not wish to read all the decimal points, it is possible to
+try something like this:
+
+#+begin_src emacs-lisp
+(format "%0.2f" (modus-themes-contrast "#000000" "#00ff00"))
+#+end_src
+
+While it is fine to perform such calculations on a case-by-case basis,
+it is preferable to implement formulas and tables for more demanding
+tasks. Such instruments are provided by ~org-mode~ or ~orgtbl-mode~, both
+of which are built into Emacs. Below is such a table that derives the
+contrast ratio of all colors in the first column (pure red, green, blue)
+relative to the color specified in the first row of the second column
+(pure white) and rounds the results:
+
+#+begin_example
+| | #ffffff |
+|---------+---------|
+| #ff0000 | 4.00 |
+| #00ff00 | 1.37 |
+| #0000ff | 8.59 |
+#+tblfm: $2='(modus-themes-contrast $1 @1$2);%0.2f
+#+end_example
+
+To measure color contrast one needs to start from a known value. This
+typically is the background. The Modus themes define an expanded
+palette in large part because certain colors are only meant to be used
+in combination with some others. Consult the source code for the
+minutia and relevant commentary.
+
+Such knowledge may prove valuable while attempting to customize the
+theme's color palette.
+
+** Load theme depending on time of day
+:properties:
+:custom_id: h:1d1ef4b4-8600-4a09-993c-6de3af0ddd26
+:end:
+
+While we do provide ~modus-themes-toggle~ to manually switch between the
+themes, users may also set up their system to perform such a task
+automatically at sunrise and sunset.
+
+This can be accomplished by specifying the coordinates of one's
+location using the built-in {{{file(solar.el)}}} and then configuring
+the ~circadian~ package:
+
+#+begin_src emacs-lisp
+(use-package solar ; built-in
+ :config
+ (setq calendar-latitude 35.17
+ calendar-longitude 33.36))
+
+(use-package circadian ; you need to install this
+ :ensure t
+ :after solar
+ :config
+ (setq circadian-themes '((:sunrise . modus-operandi)
+ (:sunset . modus-vivendi)))
+ (circadian-setup))
+#+end_src
+
+** Backdrop for pdf-tools
+:properties:
+:custom_id: h:ff69dfe1-29c0-447a-915c-b5ff7c5509cd
+:end:
+#+cindex: Remapping pdf-tools backdrop
+
+Most PDF files use a white background for their page, making it
+impossible to discern the file's boundaries in the buffer while using
+the Modus Operandi theme. To introduce a distinction between the
+buffer's backdrop and the PDF page's background, the former must be
+rendered as some shade of gray. Ideally, ~pdf-tools~ would provide a face
+that the themes could support directly, though this does not seem to be
+the case for the time being. We must thus employ the face remapping
+technique that is documented elsewhere in this document to change the
+buffer-local value of the ~default~ face.
+
+[[#h:7a93cb6f-4eca-4d56-a85c-9dcd813d6b0f][Remap face with local value]].
+
+To remap the buffer's backdrop, we start with a function like this one:
+
+#+begin_src emacs-lisp
+(defun my-pdf-tools-backdrop ()
+ (modus-themes-with-colors
+ (face-remap-add-relative
+ 'default
+ `(:background ,bg-dim))))
+
+(add-hook 'pdf-tools-enabled-hook #'my-pdf-tools-backdrop)
+#+end_src
+
+The idea is to assign that function to a hook that gets called when
+~pdf-tools~ renders the document: ~pdf-tools-enabled-hook~. This is enough
+when you only use one theme. However it has the downside of setting the
+background color value only at render time. In other words, the face
+remapping function does not get evaluated anew whenever the theme
+changes, such as upon invoking {{{kbd(M-x modus-themes-toggle)}}}.
+
+To have our face remapping adapt gracefully while switching between the
+Modus themes, we need to also account for the current theme and control
+the activation of ~pdf-view-midnight-minor-mode~. To which end we arrive
+at something like the following, which builds on the above example:
+
+#+begin_src emacs-lisp
+(defun my-pdf-tools-backdrop ()
+ (modus-themes-with-colors
+ (face-remap-add-relative
+ 'default
+ `(:background ,bg-dim))))
+
+(defun my-pdf-tools-midnight-mode-toggle ()
+ (when (derived-mode-p 'pdf-view-mode)
+ (if (eq (car custom-enabled-themes) 'modus-vivendi)
+ (pdf-view-midnight-minor-mode 1)
+ (pdf-view-midnight-minor-mode -1))
+ (my-pdf-tools-backdrop)))
+
+(defun my-pdf-tools-themes-toggle ()
+ (mapc
+ (lambda (buf)
+ (with-current-buffer buf
+ (my-pdf-tools-midnight-mode-toggle)))
+ (buffer-list)))
+
+(add-hook 'pdf-tools-enabled-hook #'my-pdf-tools-midnight-mode-toggle)
+(add-hook 'modus-themes-after-load-theme-hook #'my-pdf-tools-themes-toggle)
+#+end_src
+
+With those in place, PDFs have a distinct backdrop for their page, while
+buffers with major-mode as ~pdf-view-mode~ automatically switches to dark
+mode when ~modus-themes-toggle~ is called.
+
+** Toggle themes without reloading them
+:properties:
+:custom_id: h:b40aca50-a3b2-4c43-be58-2c26fcd14237
+:end:
+#+cindex: Switch themes without load-theme
+
+Users who have a stable setup and who only ever need to toggle between
+the themes without triggering a full reload, are better off defining
+their own command which calls ~enable-theme~ instead of ~load-theme~:
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-toggle ()
+ "Toggle between `modus-operandi' and `modus-vivendi' themes.
+This uses `enable-theme' instead of the standard method of
+`load-theme'. The technicalities are covered in the Modus themes
+manual."
+ (interactive)
+ (pcase (modus-themes--current-theme)
+ ('modus-operandi (progn (enable-theme 'modus-vivendi)
+ (disable-theme 'modus-operandi)))
+ ('modus-vivendi (progn (enable-theme 'modus-operandi)
+ (disable-theme 'modus-vivendi)))
+ (_ (error "No Modus theme is loaded; evaluate `modus-themes-load-themes' first"))))
+#+end_src
+
+[[#h:e68560b3-7fb0-42bc-a151-e015948f8a35][Differences between loading and enabling]].
+
+Recall that ~modus-themes-toggle~ uses ~load-theme~.
+
+** A theme-agnostic hook for theme loading
+:properties:
+:custom_id: h:86f6906b-f090-46cc-9816-1fe8aeb38776
+:end:
+
+The themes are designed with the intent to be useful to Emacs users of
+varying skill levels, from beginners to experts. This means that we try
+to make things easier by not expecting anyone reading this document to
+be proficient in Emacs Lisp or programming in general.
+
+Such a case is with the use of ~modus-themes-after-load-theme-hook~,
+which runs after the ~modus-themes-load-theme~ function (used by the
+command ~modus-themes-toggle~). We recommend using that hook for
+advanced customizations, because (1) we know for sure that it is
+available once the themes are loaded, and (2) anyone consulting this
+manual, especially the sections on enabling and loading the themes,
+will be in a good position to benefit from that hook.
+
+Advanced users who have a need to switch between the Modus themes and
+other items will find that such a hook does not meet their requirements:
+it only works with the Modus themes and only with the aforementioned
+functions.
+
+A theme-agnostic setup can be configured thus:
+
+#+begin_src emacs-lisp
+(defvar after-enable-theme-hook nil
+ "Normal hook run after enabling a theme.")
+
+(defun run-after-enable-theme-hook (&rest _args)
+ "Run `after-enable-theme-hook'."
+ (run-hooks 'after-enable-theme-hook))
+
+(advice-add 'enable-theme :after #'run-after-enable-theme-hook)
+#+end_src
+
+This creates the ~after-enable-theme-hook~ and makes it run after each
+call to ~enable-theme~, which means that it will work for all themes and
+also has the benefit that it does not depend on functions such as
+~modus-themes-toggle~ and the others mentioned above. ~enable-theme~ is
+called internally by ~load-theme~, so the hook works everywhere.
+
+The downside of the theme-agnostic hook is that any functions added to
+it will likely not be able to benefit from macro calls that read the
+active theme, such as ~modus-themes-with-colors~. Not all Emacs
+themes have the same capabilities.
+
+In this document, we cover ~modus-themes-after-load-theme-hook~ though
+the user can replace it with ~after-enable-theme-hook~ should they
+need to (provided they understand the implications).
+
+** Use more spacious margins or padding in Emacs frames
+:PROPERTIES:
+:CUSTOM_ID: h:43bcb5d0-e25f-470f-828c-662cee9e21f1
+:END:
+
+[ UPDATE 2023-06-25: Instead of following these instructions, you can
+ simply install my ~spacious-padding~ package from GNU ELPA. It
+ implements the padding and provides relevant user options. ]
+
+By default, Emacs frames try to maximize the number of characters that
+fit in the current visible portion of the buffer. Users may prefer to
+have some extra padding instead. This can make Emacs frames look more
+pleasant, but also make it easier to identify the currently active
+window.
+
+The way to implement such padding is two-fold:
+
+1. In the =early-init.el= file instruct Emacs to use a higher value
+ for the ~internal-border-width~ of all frames, as well as for the
+ ~right-divider-width~. The former concerns the outer boundaries of
+ Emacs frames, while the latter pertains to dividers between Emacs
+ windows.
+
+2. Make the relevant faces invisible by changing the value of their
+ relevant attributes to that of the current theme's main background.
+
+The parameters of Emacs frames are specified in the variables
+~initial-frame-alist~ and ~default-frame-alist~. The "initial frame"
+refers to the first frame that appears on Emacs startup. The
+"default" refers to the fallback values that apply to all other frames
+that Emacs creates (unless those are explicitly overridden by a
+bespoke ~make-frame~ call).
+
+In detail, first we use the same values for the two frame alist variables:
+
+#+begin_src emacs-lisp
+;; This must go in the early-init.el so that it applies to the initial
+;; frame.
+(dolist (var '(default-frame-alist initial-frame-alist))
+ (add-to-list var '(right-divider-width . 20))
+ (add-to-list var '(internal-border-width . 20)))
+#+end_src
+
+What the ~dolist~ does is to call ~add-to-list~ for the two variables
+we specify there. This economizes on typing.
+
+Then we define a function that makes the relevant faces invisible.
+The reason we do this with a function is so we can hook it to the
+"post load" phase of a theme, thus applying the new background value
+(otherwise you keep the old background, which likely means that the
+faces will no longer be invisible).
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-invisible-dividers ()
+ "Make window dividers invisible.
+Add this to the `modus-themes-post-load-hook'."
+ (let ((bg (face-background 'default)))
+ (custom-set-faces
+ `(fringe ((t :background ,bg :foreground ,bg)))
+ `(window-divider ((t :background ,bg :foreground ,bg)))
+ `(window-divider-first-pixel ((t :background ,bg :foreground ,bg)))
+ `(window-divider-last-pixel ((t :background ,bg :foreground ,bg))))))
+
+(add-hook 'modus-themes-post-load-hook #'my-modus-themes-invisible-dividers)
+#+end_src
+
+The above will work only for themes that belong to the Modus family.
+For users of Emacs version 29 or higher, there exists a theme-agnostic
+hook that takes a function with one argument---that of the theme---and
+calls in the the "post enable" phase of theme loading. Here is the
+above snippet, with the necessary tweaks:
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-invisible-dividers (_theme)
+ "Make window dividers for THEME invisible."
+ (let ((bg (face-background 'default)))
+ (custom-set-faces
+ `(fringe ((t :background ,bg :foreground ,bg)))
+ `(window-divider ((t :background ,bg :foreground ,bg)))
+ `(window-divider-first-pixel ((t :background ,bg :foreground ,bg)))
+ `(window-divider-last-pixel ((t :background ,bg :foreground ,bg))))))
+
+(add-hook 'enable-theme-functions #'my-modus-themes-invisible-dividers)
+#+end_src
+
+Users of older versions of Emacs can read the entry herein about
+defining their own theme-agnostic hook ([[#h:86f6906b-f090-46cc-9816-1fe8aeb38776][A theme-agnostic hook for theme loading]]).
+
+** Custom hl-todo colors
+:PROPERTIES:
+:CUSTOM_ID: h:2ef83a21-2f0a-441e-9634-473feb940743
+:END:
+
+The ~hl-todo~ package provides the user option
+~hl-todo-keyword-faces~: it specifies a pair of keyword and
+corresponding color value. The Modus themes configure that option in
+the interest of legibility. While this works for our purposes, users
+may still prefer to apply their custom values, in which case the
+following approach is necessary:
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-hl-todo-faces ()
+ (setq hl-todo-keyword-faces '(("TODO" . "#ff0000")
+ ("HACK" . "#ffff00")
+ ("XXX" . "#00ffff")
+ ("NOTE" . "#ff00ff"))))
+
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-hl-todo-faces)
+#+end_src
+
+Or include a ~let~ form, if needed:
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-hl-todo-faces ()
+ (let ((red "#ff0000")
+ (blue "#0000ff"))
+ (setq hl-todo-keyword-faces `(("TODO" . ,blue)
+ ("HACK" . ,red)
+ ("XXX" . ,red)
+ ("NOTE" . ,blue)))))
+
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-hl-todo-faces)
+#+end_src
+
+Normally, we do not touch user options, though this is an exception:
+otherwise the defaults are not always legible.
+
+** Add support for solaire-mode
+:PROPERTIES:
+:CUSTOM_ID: h:439c9e46-52e2-46be-b1dc-85841dd99671
+:END:
+
+The ~solaire-mode~ package dims the background of what it considers
+ancillary "UI" buffers, such as the minibuffer and Dired buffers. The
+Modus themes used to support Solaire on the premise that the user was
+(i) opting in to it, (ii) understood why certain buffers were more gray,
+and (iii) knew what other adjustments had to be made to prevent broken
+visuals (e.g. the default style of the ~modus-themes-completions~ uses a
+subtle gray background for the selection, which with Solaire becomes
+practically invisible).
+
+However, the assumption that users opt in to this feature does not
+always hold true. There are cases where it is enabled by defaultsuch as
+in the popular Doom Emacs configuration. Thus, the unsuspecting user
+who loads ~modus-operandi~ or ~modus-vivendi~ without the requisite
+customizations is getting a sub-par experience; an experience that we
+did not intend and cannot genuinely fix.
+
+Because the Modus themes are meant to work everywhere, we cannot make an
+exception for Doom Emacs and/or Solaire users. Furthermore, we shall
+not introduce hacks, such as by adding a check in all relevant faces to
+be adjusted based on Solaire or whatever other package. Hacks of this
+sort are unsustainable and penalize the entire userbase. Besides, the
+themes are built into Emacs and we must keep their standard high.
+
+The fundamental constraint with Solaire is that Emacs does not have a
+real distinction between "content" and "UI" buffers. For themes to work
+with Solaire, they need to be designed around that package. Such is an
+arrangement that compromises on our accessibility standards and/or
+hinders our efforts to provide the best possible experience while using
+the Modus themes.
+
+As such, ~solaire-mode~ is not---and will not be---supported by the
+Modus themes (or any other of my themes, for that matter). Users who
+want it must style the faces manually. Below is some sample code, based
+on what we cover at length elsewhere in this manual:
+
+[[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]].
+
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with modus-themes-with-colors]].
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ `(solaire-default-face ((,c :inherit default :background ,bg-dim :foreground ,fg-dim)))
+ `(solaire-line-number-face ((,c :inherit solaire-default-face :foreground ,fg-unfocused)))
+ `(solaire-hl-line-face ((,c :background ,bg-active)))
+ `(solaire-org-hide-face ((,c :background ,bg-dim :foreground ,bg-dim))))))
+
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+#+end_src
+
+As always, re-load the theme for changes to take effect.
+
+* Face coverage
+:properties:
+:custom_id: h:a9c8f29d-7f72-4b54-b74b-ddefe15d6a19
+:end:
+
+The Modus themes try to provide as close to full face coverage as
+possible. This is necessary to ensure a consistently accessible reading
+experience across all available interfaces.
+
+** Full support for packages or face groups
+:properties:
+:alt_title: Supported packages
+:description: Full list of covered face groups
+:custom_id: h:60ed4275-60d6-49f8-9287-9a64e54bea0e
+:end:
+#+cindex: Explicitly supported packages
+
+This list will always be updated to reflect the current state of the
+project. The idea is to offer an overview of the known status of all
+affected face groups. The items with an appended asterisk =*= tend to
+have lots of extensions, so the "full support" may not be 100% true…
+
++ ace-window
++ agda2-mode
++ all-the-icons
++ all-the-icons-dired
++ all-the-icons-ibuffer
++ annotate
++ ansi-color
++ anzu
++ auctex and TeX
++ auto-dim-other-buffers
++ avy
++ bbdb
++ binder
++ breadcrumb
++ bongo
++ boon
++ bookmark
++ calendar and diary
++ centaur-tabs
++ change-log and log-view (such as ~vc-print-log~, ~vc-print-root-log~)
++ chart
++ cider
++ circe
++ citar
++ clojure-mode
++ column-enforce-mode
++ company-mode*
++ compilation-mode
++ completions
++ consult
++ corfu
++ corfu-candidate-overlay
++ corfu-quick
++ counsel*
++ cperl-mode
++ crontab-mode
++ csv-mode
++ ctrlf
++ custom (what you get with {{{kbd(M-x customize)}}})
++ dashboard
++ deadgrep
++ deft
++ devdocs
++ dictionary
++ diff-hl
++ diff-mode
++ dim-autoload
++ dired
++ dired-async
++ dired-git
++ dired-git-info
++ dired-narrow
++ dired-subtree
++ diredfl
++ disk-usage
++ display-fill-column-indicator-mode
++ doom-modeline
++ ediff
++ ein (Emacs IPython Notebook)
++ eglot
++ el-search
++ eldoc-box
++ elfeed
++ elfeed-score
++ elpher
++ embark
++ ement
++ emms
++ enh-ruby-mode (enhanced-ruby-mode)
++ epa
++ erc
++ ert
++ erts-mode
++ eshell
++ eshell-fringe-status
++ evil* (evil-mode)
++ eww
++ exwm
++ eyebrowse
++ flycheck
++ flycheck-color-mode-line
++ flycheck-indicator
++ flymake
++ flyspell
++ flx
++ focus
++ fold-this
++ font-lock (generic syntax highlighting)
++ geiser
++ git-commit
++ git-gutter (and variants)
++ git-rebase
++ git-timemachine
++ gnus
++ gotest
++ golden-ratio-scroll-screen
++ helpful
++ highlight-numbers
++ highlight-parentheses ([[#h:24bab397-dcb2-421d-aa6e-ec5bd622b913][Note on highlight-parentheses.el]])
++ highlight-thing
++ hl-fill-column
++ hl-line-mode
++ hl-todo
++ hydra
++ ibuffer
++ icomplete
++ ido-mode
++ iedit
++ iflipb
++ image-dired
++ imenu-list
++ indium
++ info
++ info+ (info-plus)
++ info-colors
++ ioccur
++ isearch, occur, etc.
++ ivy*
++ ivy-posframe
++ japanese-holidays
++ jira (org-jira)
++ jit-spell
++ jinx
++ journalctl-mode
++ js2-mode
++ julia
++ kaocha-runner
++ keycast
++ ledger-mode
++ leerzeichen
++ line numbers (~display-line-numbers-mode~ and global variant)
++ magit
++ make-mode
++ man
++ marginalia
++ markdown-mode
++ markup-faces (~adoc-mode~)
++ messages
++ minimap
++ mode-line
++ mood-line
++ mpdel
++ mu4e
++ multiple-cursors
++ nerd-icons
++ nerd-icons-completion
++ nerd-icons-dired
++ nerd-icons-ibuffer
++ neotree
++ notmuch
++ num3-mode
++ nxml-mode
++ olivetti
++ orderless
++ org*
++ org-journal
++ org-noter
++ org-pomodoro
++ org-recur
++ org-roam
++ org-superstar
++ org-table-sticky-header
++ org-tree-slide
++ origami
++ outline-mode
++ outline-minor-faces
++ package (what you get with {{{kbd(M-x list-packages)}}})
++ page-break-lines
++ pandoc-mode
++ paren-face
++ pass
++ pdf-tools
++ persp-mode
++ perspective
++ popup
++ powerline
++ prism ([[#h:a94272e0-99da-4149-9e80-11a7e67a2cf2][Note for prism.el]])
++ prescient
++ proced
++ prodigy
++ pulse
++ pyim
++ quick-peek
++ rainbow-delimiters
++ rcirc
++ rcirc-color
++ recursion-indicator
++ regexp-builder (also known as ~re-builder~)
++ rg (rg.el)
++ ripgrep
++ rmail
++ rst-mode
++ ruler-mode
++ sesman
++ shell-script-mode
++ shortdoc
++ show-paren-mode
++ shr
++ side-notes
++ sieve-mode
++ skewer-mode
++ slime (slbd)
++ sly
++ smart-mode-line
++ smerge
++ speedbar
++ spell-fu
++ stripes
++ suggest
++ switch-window
++ swiper
++ symbol-overlay
++ syslog-mode
++ tab-bar-mode
++ tab-line-mode
++ table (built-in {{{file(table.el)}}})
++ telega
++ terraform-mode
++ term
++ textsec
++ transient (pop-up windows such as Magit's)
++ trashed
++ tree-sitter
++ tty-menu
++ tuareg
++ typescript
++ undo-tree
++ vc ({{{file(vc-dir.el)}}}, {{{file(vc-hooks.el)}}})
++ vertico
++ vertico-quick
++ vimish-fold
++ visible-mark
++ visual-regexp
++ vterm
++ vundo
++ wcheck-mode
++ web-mode
++ wgrep
++ which-function-mode
++ which-key
++ whitespace-mode
++ window-divider-mode
++ writegood-mode
++ woman
++ xah-elisp-mode
++ xterm-color (and ansi-colors)
++ yaml-mode
++ yasnippet
+
+Plus many other miscellaneous faces that are provided by Emacs.
+
+** Indirectly covered packages
+:properties:
+:custom_id: h:2cb359c7-3a84-4262-bab3-dcdc1d0034d7
+:end:
+#+cindex: Implicitly supported packages
+
+These do not require any extra styles because they are configured to
+inherit from some basic faces or their dependencies which are directly
+supported by the themes.
+
++ ag
++ apropos
++ apt-sources-list
++ bbdb
++ bm
++ breakpoint (provided by the built-in {{{file(gdb-mi.el)}}} library)
++ buffer-expose
++ bufler
++ counsel-notmuch
++ counsel-org-capture-string
++ css-mode
++ dashboard (emacs-dashboard)
++ define-word
++ denote
++ disk-usage
++ dtache
++ dynamic-ruler
++ easy-kill
++ ebdb
++ edit-indirect
++ egerrit
++ elfeed-summary
++ evil-owl
++ flyspell-correct
++ fortran-mode
++ freeze-it
++ forge
++ git-walktree
++ goggles
++ highlight-defined
++ highlight-escape-sequences (~hes-mode~)
++ icomplete-vertical
++ i3wm-config-mode
++ lin
++ minibuffer-line
++ no-emoji
++ org-remark
++ parrot
++ perl-mode
++ php-mode
++ pulsar
++ rjsx-mode
++ side-hustle
++ spell-fu
++ swift-mode
++ tab-bar-echo-area
++ tide
++ undo-hl
++ vdiff
++ vertico-indexed
++ vertico-mouse
++ xref
+
+* Notes on individual packages
+:properties:
+:custom_id: h:4c4d901a-84d7-4f20-bd99-0808c2b06eba
+:end:
+
+This section covers information that may be of interest to users of
+individual packages.
+
+** Note on calendar.el weekday and weekend colors
+:properties:
+:custom_id: h:b2db46fb-32f4-44fd-8e11-d2b261cf51ae
+:end:
+
+By default, the {{{kbd(M-x calendar)}}} interface differentiates weekdays from
+weekends by applying a gray color to the former and a faint red to the
+latter. The idea for this approach is that the weekend should serve as
+a subtle warning that no work is supposed to be done on that day, per
+the design of traditional calendars.
+
+Users who prefer all days to look the same can configure the variable
+~calendar-weekend-days~ to either use gray of weekdays or the faint red of
+weekends uniformly.
+
+#+begin_src emacs-lisp
+;; All are treated like weekdays (gray color)
+(setq calendar-weekend-days nil)
+
+;; All are treated like weekends (red-faint color)
+(setq calendar-weekend-days (number-sequence 0 6))
+
+;; The default marks the Saturday and Sunday as the weekend
+(setq calendar-weekend-days '(0 6))
+#+end_src
+
+For changes to take effect, the Calendar buffer needs to be generated
+anew.
+
+** Note on git-gutter in Doom Emacs
+:PROPERTIES:
+:CUSTOM_ID: h:a195e37c-e58c-4148-b254-8ba1ed8a731a
+:END:
+
+The ~git-gutter~ and ~git-gutter-fr~ packages default to drawing
+bitmaps for the indicators they display (e.g. bitmap of a plus sign
+for added lines). In Doom Emacs, these bitmaps are replaced with
+contiguous lines which may look nicer, but require a change to the
+foreground of the relevant faces to yield the desired color
+combinations.
+
+Since this is Doom-specific, we urge users to apply changes in their
+local setup. Below is some sample code, based on what we cover at
+length elsewhere in this manual:
+
+[[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]].
+
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with modus-themes-with-colors]].
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Make foreground the same as background for a uniform bar on
+ ;; Doom Emacs.
+ ;;
+ ;; Doom should not be implementing such hacks because themes
+ ;; cannot support them:
+ ;; <https://protesilaos.com/codelog/2022-08-04-doom-git-gutter-modus-themes/>.
+ `(git-gutter-fr:added ((,c :foreground ,bg-added-fringe)))
+ `(git-gutter-fr:deleted ((,c :foreground ,bg-removed-fringe)))
+ `(git-gutter-fr:modified ((,c :foreground ,bg-changed-fringe))))))
+
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+#+end_src
+
+As always, re-load the theme for changes to take effect.
+
+If the above does not work, try this instead:
+
+#+begin_src emacs-lisp
+(after! modus-themes
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Make foreground the same as background for a uniform bar on
+ ;; Doom Emacs.
+ ;;
+ ;; Doom should not be implementing such hacks because themes
+ ;; cannot support them:
+ ;; <https://protesilaos.com/codelog/2022-08-04-doom-git-gutter-modus-themes/>.
+ `(git-gutter-fr:added ((,c :foreground ,bg-added-intense)))
+ `(git-gutter-fr:deleted ((,c :foreground ,bg-removed-intense)))
+ `(git-gutter-fr:modified ((,c :foreground ,bg-changed-intense))))))
+#+end_src
+
+** Note on php-mode multiline comments
+:PROPERTIES:
+:CUSTOM_ID: h:d0a3157b-9c04-46e8-8742-5fb2a7ae8798
+:END:
+
+Depending on your build of Emacs and/or the environment it runs in,
+multiline comments in PHP with the ~php-mode~ package use the
+~font-lock-doc-face~ instead of ~font-lock-comment-face~.
+
+This seems to make all comments use the appropriate face:
+
+#+begin_src emacs-lisp
+(defun my-multine-comments ()
+ (setq-local c-doc-face-name 'font-lock-comment-face))
+
+(add-hook 'php-mode-hook #'my-multine-comments)
+#+end_src
+
+As always, re-load the theme for changes to take effect.
+
+** Note on underlines in compilation buffers
+:properties:
+:custom_id: h:420f5a33-c7a9-4112-9b04-eaf2cbad96bd
+:end:
+
+Various buffers that produce compilation results or run tests on code
+apply an underline to the file names they reference or to relevant
+messages. Users may consider this unnecessary or excessive.
+
+To outright disable the effect, use this (buffers need to be generated
+anew):
+
+#+begin_src emacs-lisp
+(setq compilation-message-face nil)
+#+end_src
+
+If some element of differentiation is still desired, a good option is to
+render the affected text with the ~italic~ face:
+
+#+begin_src emacs-lisp
+(setq compilation-message-face 'italic)
+#+end_src
+
+[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
+
+** Note on inline Latex in Org buffers
+:properties:
+:custom_id: h:dd8478da-f56a-45cd-b199-b836c85c3c5a
+:end:
+
+Org can work with inline latex and related syntax. To actually fontify
+those constructs, set the variable ~org-highlight-latex-and-related~ to
+the desired list of values (per its doc string). For example:
+
+#+begin_src emacs-lisp
+(setq org-highlight-latex-and-related '(latex script))
+#+end_src
+
+Remember to use {{{kbd(M-x org-mode-restart)}}} for changes to take effect.
+
+** Note on dimmer.el
+:properties:
+:custom_id: h:8eb4b758-d318-4480-9ead-357a571beb93
+:end:
+
+The {{{file(dimmer.el)}}} library by Neil Okamoto can be configured to
+automatically dim the colors of inactive Emacs windows. To guarantee
+consistent results with the Modus themes, we suggest some tweaks to the
+default styles, such as in this minimal setup:
+
+#+begin_src emacs-lisp
+(use-package dimmer
+ :config
+ (setq dimmer-fraction 0.3)
+ (setq dimmer-adjustment-mode :foreground)
+ (setq dimmer-use-colorspace :rgb)
+
+ (dimmer-mode 1))
+#+end_src
+
+Of the above, we strongly recommend the RGB color space because it is
+the one that remains faithful to the hueness of the colors used by the
+themes. Whereas the default CIELAB space has a tendency to distort
+colors in addition to applying the dim effect, which can be somewhat
+disorienting.
+
+The value of the ~dimmer-fraction~ has been selected empirically. Users
+might prefer to tweak it further (increasing it makes the dim effect
+more pronounced).
+
+Changing the ~dimmer-adjustment-mode~ is a matter of preference. Though
+because the Modus themes use black and white as their base colors, any
+other value for that variable will turn the main background gray. This
+inadvertently leads to the opposite of the intended utility of this
+package: it draws too much attention to unfocused windows.
+
+** Note on display-fill-column-indicator-mode
+:properties:
+:custom_id: h:2a602816-bc1b-45bf-9675-4cbbd7bf6cab
+:end:
+
+The ~display-fill-column-indicator-mode~ uses a typographic character to
+draw its line. This has the downside of creating a dashed line. The
+dashes are further apart depending on how tall the font's glyph height
+is and what integer the ~line-spacing~ is set to.
+
+At the theme level we eliminate this effect by making the character one
+pixel tall: the line is contiguous. Users who prefer the dashed line
+are advised to change the ~fill-column-indicator~ face, as explained
+elsewhere in this document. For example:
+
+#+begin_src emacs-lisp
+(modus-themes-with-colors
+ (custom-set-faces
+ `(fill-column-indicator ((,c :foreground ,bg-active)))))
+#+end_src
+
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with modus-themes-with-colors]].
+
+To make the line thicker, set the height to be equal to the base font
+size instead of the one pixel we use. This is done by specifying a rate
+instead of an absolute number, as in =:height 1.0= versus =:height 1=.
+For example:
+
+#+begin_src emacs-lisp
+(modus-themes-with-colors
+ (custom-set-faces
+ `(fill-column-indicator ((,c :height 1.0 :background ,bg-inactive :foreground ,bg-inactive)))))
+#+end_src
+
+** Note on highlight-parentheses.el
+:PROPERTIES:
+:CUSTOM_ID: h:24bab397-dcb2-421d-aa6e-ec5bd622b913
+:END:
+
+The ~highlight-parentheses~ package provides contextual coloration of
+surrounding parentheses, highlighting only those which are around the
+point. The package expects users to customize the applicable colors
+on their own by configuring certain variables.
+
+To make the Modus themes work as expected with this, we need to use some
+of the techniques that are discussed at length in the various
+"Do-It-Yourself" (DIY) sections, which provide insight into the more
+advanced customization options of the themes.
+
+[[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]].
+
+In the following example, we are assuming that the user wants to (i)
+re-use color variables provided by the themes, (ii) be able to retain
+their tweaks while switching between ~modus-operandi~ and ~modus-vivendi~,
+and (iii) have the option to highlight either the foreground of the
+parentheses or the background as well.
+
+We start by defining our own variable, which will serve as a toggle
+between foreground and background coloration styles:
+
+#+begin_src emacs-lisp
+(defvar my-highlight-parentheses-use-background t
+ "Prefer `highlight-parentheses-background-colors'.")
+#+end_src
+
+Then we can update our preference with this:
+
+#+begin_src emacs-lisp
+;; Set to nil to disable backgrounds.
+(setq my-highlight-parentheses-use-background nil)
+#+end_src
+
+To re-use colors from the themes, we must wrap our code in the
+~modus-themes-with-colors~ macro. Our implementation must interface with
+the variables ~highlight-parentheses-background-colors~ and/or
+~highlight-parentheses-colors~.
+
+So we can have something like this (the doc string of
+~modus-themes-with-colors~ explains where the names of the colors can be
+found):
+
+#+begin_src emacs-lisp
+(modus-themes-with-colors
+ ;; Our preference for setting either background or foreground
+ ;; styles, depending on `my-highlight-parentheses-use-background'.
+ (if my-highlight-parentheses-use-background
+
+ ;; Here we set color combinations that involve both a background
+ ;; and a foreground value.
+ (setq highlight-parentheses-background-colors (list bg-cyan-intense
+ bg-magenta-intense
+ bg-green-intense
+ bg-yellow-intense)
+ highlight-parentheses-colors (list cyan
+ magenta
+ green
+ yellow))
+
+ ;; And here we pass only foreground colors while disabling any
+ ;; backgrounds.
+ (setq highlight-parentheses-colors (list green-intense
+ magenta-intense
+ blue-intense
+ red-intense)
+ highlight-parentheses-background-colors nil)))
+
+;; Include this if you also want to make the parentheses bold:
+(set-face-attribute 'highlight-parentheses-highlight nil :inherit 'bold)
+
+;; Our changes must be evaluated before enabling the relevant mode, so
+;; this comes last.
+(global-highlight-parentheses-mode 1)
+#+end_src
+
+For our changes to persist while switching between the Modus themes, we
+need to include them in a function which can then get passed to
+~modus-themes-after-load-theme-hook~. This is the complete
+implementation:
+
+#+begin_src emacs-lisp
+;; Configurations for `highlight-parentheses':
+(require 'highlight-parentheses)
+
+(defvar my-highlight-parentheses-use-background t
+ "Prefer `highlight-parentheses-background-colors'.")
+
+(setq my-highlight-parentheses-use-background nil) ; Set to nil to disable backgrounds
+
+(defun my-modus-themes-highlight-parentheses ()
+ (modus-themes-with-colors
+ ;; Our preference for setting either background or foreground
+ ;; styles, depending on `my-highlight-parentheses-use-background'.
+ (if my-highlight-parentheses-use-background
+
+ ;; Here we set color combinations that involve both a background
+ ;; and a foreground value.
+ (setq highlight-parentheses-background-colors (list bg-cyan-intense
+ bg-magenta-intense
+ bg-green-intense
+ bg-yellow-intense)
+ highlight-parentheses-colors (list cyan
+ magenta
+ green
+ yellow))
+
+ ;; And here we pass only foreground colors while disabling any
+ ;; backgrounds.
+ (setq highlight-parentheses-colors (list green-intense
+ magenta-intense
+ blue-intense
+ red-intense)
+ highlight-parentheses-background-colors nil)))
+
+ ;; Include this if you also want to make the parentheses bold:
+ (set-face-attribute 'highlight-parentheses-highlight nil :inherit 'bold)
+
+ ;; Our changes must be evaluated before enabling the relevant mode, so
+ ;; this comes last.
+ (global-highlight-parentheses-mode 1))
+
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-highlight-parentheses)
+#+end_src
+
+As always, re-load the theme for changes to take effect.
+
+** Note on mmm-mode.el background colors
+:properties:
+:custom_id: h:99cf0d6c-e478-4e26-9932-3bf3427d13f6
+:end:
+
+The faces used by {{{file(mmm-mode.el)}}} are expected to have a colorful
+background, while they should not touch any foreground value. The idea
+is that they must not interfere with existing fontification. Those
+background colors need to be distinct from each other, such as an
+unambiguous red juxtaposed with a clear blue.
+
+While this design may be internally consistent with the raison d'être of
+that library, it inevitably produces inaccessible color combinations.
+
+There are two competing goals at play:
+
+1. Legibility of the text, understood as the contrast ratio between the
+ background and the foreground.
+
+2. Semantic precision of each face which entails faithfulness to
+ color-coding of the underlying background.
+
+As the Modus themes are designed with the express purpose of conforming
+with the first point, we have to forgo the apparent color-coding of the
+background elements. Instead we use subtle colors that do not undermine
+the legibility of the affected text while they still offer a sense of
+added context.
+
+Users who might prefer to fall below the minimum 7:1 contrast ratio in
+relative luminance (the accessibility target we conform with), can opt
+to configure the relevant faces on their own.
+
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with modus-themes-with-colors]].
+
+This example uses more vivid background colors, though it comes at the
+very high cost of degraded legibility.
+
+#+begin_src emacs-lisp
+(modus-themes-with-colors
+ (custom-set-faces
+ `(mmm-cleanup-submode-face ((,c :background ,bg-yellow-intense)))
+ `(mmm-code-submode-face ((,c :background ,bg-inactive)))
+ `(mmm-comment-submode-face ((,c :background ,bg-blue-intense)))
+ `(mmm-declaration-submode-face ((,c :background ,bg-cyan-intense)))
+ `(mmm-default-submode-face ((,c :background ,bg-dim)))
+ `(mmm-init-submode-face ((,c :background ,bg-magenta-intense)))
+ `(mmm-output-submode-face ((,c :background ,bg-red-intense)))
+ `(mmm-special-submode-face ((,c :background ,bg-green-intense)))))
+#+end_src
+
+** Note on prism.el
+:properties:
+:alt_title: Note for prism
+:custom_id: h:a94272e0-99da-4149-9e80-11a7e67a2cf2
+:end:
+
+This package by Adam Porter, aka "alphapapa" or "github-alphapapa",
+implements an alternative to the typical coloration of code. Instead of
+highlighting the syntactic constructs, it applies color to different
+levels of depth in the code structure.
+
+As {{{file(prism.el)}}} offers a broad range of customizations, we
+cannot style it directly at the theme level: that would run contrary
+to the spirit of the package. Instead, we may offer preset color
+schemes. Those should offer a starting point for users to adapt to
+their needs.
+
+In the following code snippets, we employ the ~modus-themes-with-colors~
+macro: [[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Use theme colors in code with modus-themes-with-colors]].
+
+These are the minimum recommended settings with 16 colors:
+
+#+begin_src emacs-lisp
+(setq prism-num-faces 16)
+
+(prism-set-colors
+ :desaturations '(0) ; do not change---may lower the contrast ratio
+ :lightens '(0) ; same
+ :colors (modus-themes-with-colors
+ (list fg-main
+ magenta
+ cyan-cooler
+ magenta-cooler
+ blue
+ magenta-warmer
+ cyan-warmer
+ red-cooler
+ green
+ fg-main
+ cyan
+ yellow
+ blue-warmer
+ red-warmer
+ green-cooler
+ yellow-faint)))
+#+end_src
+
+With 8 colors:
+
+#+begin_src emacs-lisp
+(setq prism-num-faces 8)
+
+(prism-set-colors
+ :desaturations '(0) ; do not change---may lower the contrast ratio
+ :lightens '(0) ; same
+ :colors (modus-themes-with-colors
+ (list blue
+ magenta
+ magenta-cooler
+ cyan-cooler
+ fg-main
+ blue-warmer
+ red-cooler
+ cyan)))
+#+end_src
+
+And this is with 4 colors, which produces results that are the closest
+to the themes' default aesthetic:
+
+#+begin_src emacs-lisp
+(setq prism-num-faces 4)
+
+(prism-set-colors
+ :desaturations '(0) ; do not change---may lower the contrast ratio
+ :lightens '(0) ; same
+ :colors (modus-themes-with-colors
+ (list blue
+ magenta
+ magenta-cooler
+ green-warmer)))
+#+end_src
+
+If you need to apply desaturation and lightening, you can use what the
+{{{file(prism.el)}}} documentation recommends, like this (adapting to the
+examples with the 4, 8, 16 colors):
+
+#+begin_src emacs-lisp
+(prism-set-colors
+ :desaturations (cl-loop for i from 0 below 16 collect (* i 2.5))
+ :lightens (cl-loop for i from 0 below 16 collect (* i 2.5))
+ :colors (modus-themes-with-colors
+ (list fg-main
+ cyan-cooler
+ magenta-cooler
+ magenta)))
+#+end_src
+
+** Note on company-mode overlay pop-up
+:properties:
+:custom_id: h:20cef8c4-d11f-4053-8b2c-2872925780b1
+:end:
+
+By default, the ~company-mode~ pop-up that lists completion candidates is
+drawn using an overlay. This creates alignment issues every time it is
+placed above a piece of text that has a different height than the
+default.
+
+The solution recommended by the project's maintainer is to use an
+alternative front-end for drawing the pop-up which draws child frames
+instead of overlays.[fn::
+https://github.com/company-mode/company-mode/issues/1010][fn::
+https://github.com/tumashu/company-posframe/]
+
+Also consider the ~corfu~ package.
+
+** Note on ERC escaped color sequences
+:properties:
+:custom_id: h:98bdf319-1e32-4469-8a01-771200fba65c
+:end:
+
+The built-in IRC client ~erc~ has the ability to colorize any text using
+escape sequences that start with =^C= (inserted with {{{kbd(C-q C-c)}}}) and are
+followed by a number for the foreground and background.[fn:: This page
+explains the basics, though it is not specific to Emacs:
+https://www.mirc.com/colors.html] Possible numbers are 0-15, with the
+first entry being the foreground and the second the background,
+separated by a comma. Like this =^C1,6=. The minimum setup is this:
+
+#+begin_src emacs-lisp
+(add-to-list 'erc-modules 'irccontrols)
+(setq erc-interpret-controls-p t
+ erc-interpret-mirc-color t)
+#+end_src
+
+As this allows users the chance to make arbitrary combinations, it is
+impossible to guarantee a consistently high contrast ratio. All we can
+we do is provide guidance on the combinations that satisfy the
+accessibility standard of the themes:
+
++ Modus Operandi :: Use foreground color 1 for all backgrounds from
+ 2-15. Like so: {{{kbd(C-q C-c1,N)}}} where =N= is the background.
+
++ Modus Vivendi :: Use foreground color 0 for all backgrounds from
+ 2-13. Use foreground =1= for backgrounds 14, 15.
+
+Colors 0 and 1 are white and black respectively. So combine them
+together, if you must.
+
+** Note on powerline or spaceline
+:properties:
+:custom_id: h:9130a8ba-d8e3-41be-a58b-3cb1eb7b6d17
+:end:
+
+Both Powerline and Spaceline package users will likely need to use the
+command ~powerline-reset~ whenever they make changes to their themes
+and/or mode line setup.
+
+** Note on SHR colors
+:properties:
+:custom_id: h:4cc767dc-ffef-4c5c-9f10-82eb7b8921bf
+:end:
+
+Emacs' HTML rendering library ({{{file(shr.el)}}}) may need explicit
+configuration to respect the theme's colors instead of whatever
+specifications the webpage provides.
+
+Consult the doc string of ~shr-use-colors~.
+
+** Note on SHR fonts
+:properties:
+:custom_id: h:e6c5451f-6763-4be7-8fdb-b4706a422a4c
+:end:
+#+cindex: Fonts in EWW, Elfeed, Ement, and SHR
+
+By default, packages that build on top of the Simple HTML Remember
+(~shr~) use proportionately spaced fonts. This is controlled by the
+user option ~shr-use-fonts~, which is set to non-~nil~ by default. To
+use the standard font instead, set that variable to ~nil~.
+
+[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and others]].
+
+Packages affected by this are:
+
++ elfeed
++ ement
++ eww
+
+This is a non-exhaustive list.
+
+** Note on Ement colors and fonts
+:properties:
+:custom_id: h:8e636056-356c-4ca7-bc78-ebe61031f585
+:end:
+
+The {{{file(ement.el)}}} library by Adam Porter (also known as
+"alphapapa") defaults to a method of colorizing usernames in a rainbow
+style. This is controlled by the user option ~ement-room-prism~ and
+can be disabled with:
+
+#+begin_src emacs-lisp
+(setq ement-room-prism nil)
+#+end_src
+
+The contrast ratio of these colors is governed by another user option:
+~ement-room-prism-minimum-contrast~. By default, it is set to 6 which is
+slightly below our nominal target. Try this instead:
+
+#+begin_src emacs-lisp
+(setq ement-room-prism-minimum-contrast 7)
+#+end_src
+
+With regard to fonts, Ement depends on ~shr~ ([[#h:e6c5451f-6763-4be7-8fdb-b4706a422a4c][Note on SHR fonts]]).
+
+Since we are here, here is an excerpt from Ement's source code:
+
+#+begin_src emacs-lisp
+(defcustom ement-room-prism-minimum-contrast 6
+ "Attempt to enforce this minimum contrast ratio for user faces.
+This should be a reasonable number from, e.g. 0-7 or so."
+ ;; Prot would almost approve of this default. :) I would go all the way
+ ;; to 7, but 6 already significantly dilutes the colors in some cases.
+ :type 'number)
+#+end_src
+
+Yes, I do approve of that default. Even a 4.5 (the WCAG AA rating)
+would be a good baseline for many themes and/or user configurations.
+Our target is the highest of the sort, though we do not demand that
+everyone conforms with it.
+
+** Note on pdf-tools link hints
+:properties:
+:custom_id: h:2659d13e-b1a5-416c-9a89-7c3ce3a76574
+:end:
+
+Hints are drawn by [[https://imagemagick.org/][ImageMagick]], not Emacs, i.e., ImageMagick doesn't
+know about the hint face unless you tell ImageMagick about it. By
+default, only the foreground and background color attributes are
+passed. The below snippet adds to those the various font attributes. As
+it queries various faces, specifically ~pdf-links-read-link~ and the faces
+it inherits, it needs to be added to your initialization file after
+you've customized any faces.
+
+#+begin_src emacs-lisp
+(use-package pdf-links
+ :config
+ (let ((spec
+ (apply #'append
+ (mapcar
+ (lambda (name)
+ (list name
+ (face-attribute 'pdf-links-read-link
+ name nil 'default)))
+ '(:family :width :weight :slant)))))
+ (setq pdf-links-read-link-convert-commands
+ `("-density" "96"
+ "-family" ,(plist-get spec :family)
+ "-stretch" ,(let* ((width (plist-get spec :width))
+ (name (symbol-name width)))
+ (replace-regexp-in-string "-" ""
+ (capitalize name)))
+ "-weight" ,(pcase (plist-get spec :weight)
+ ('ultra-light "Thin")
+ ('extra-light "ExtraLight")
+ ('light "Light")
+ ('semi-bold "SemiBold")
+ ('bold "Bold")
+ ('extra-bold "ExtraBold")
+ ('ultra-bold "Black")
+ (_weight "Normal"))
+ "-style" ,(pcase (plist-get spec :slant)
+ ('italic "Italic")
+ ('oblique "Oblique")
+ (_slant "Normal"))
+ "-pointsize" "%P"
+ "-undercolor" "%f"
+ "-fill" "%b"
+ "-draw" "text %X,%Y '%c'"))))
+#+end_src
+
+** Note on the Notmuch logo
+:properties:
+:custom_id: h:636af312-54a5-4918-84a6-0698e85a3c6d
+:end:
+
+By default, the "hello" buffer of Notmuch includes a header with the
+programs' logo and a couple of buttons. The logo has the effect of
+enlarging the height of the line, which negatively impacts the shape of
+those buttons. Disabling the logo fixes the problem:
+
+#+begin_src emacs-lisp
+(setq notmuch-show-logo nil)
+#+end_src
+
+** Note on goto-address-mode faces
+:PROPERTIES:
+:CUSTOM_ID: h:2d74236a-e41c-4616-8735-75f949a67334
+:END:
+
+The built-in ~goto-address-mode~ uses heuristics to identify URLs and
+email addresses in the current buffer. It then applies a face to them
+to change their style. Some packages, such as ~notmuch~, use this
+minor-mode automatically.
+
+The faces are not declared with ~defface~, meaning that it is better
+that the theme does not modify them. The user is thus encouraged to
+consider including (or equivalent) this in their setup:
+
+#+begin_src emacs-lisp
+(setq goto-address-url-face 'link
+ goto-address-url-mouse-face 'highlight
+ goto-address-mail-face 'link
+ goto-address-mail-mouse-face 'highlight)
+#+end_src
+
+My personal preference is to set ~goto-address-mail-face~ to ~nil~, as
+it otherwise adds too much visual noise to the buffer (email addresses
+stand out more, due to the use of the uncommon =@= character but also
+because they are often enclosed in angled brackets).
+
+* Frequently Asked Questions
+:properties:
+:custom_id: h:b3384767-30d3-4484-ba7f-081729f03a47
+:end:
+#+cindex: Frequently Asked Questions
+
+In this section we provide answers related to some aspects of the Modus
+themes' design and application.
+
+** Is the contrast ratio about adjacent colors?
+:properties:
+:custom_id: h:5ce7ae2e-9348-4e55-b4cf-9302345b1826
+:end:
+#+cindex: Contrast between adjacent colors
+
+The minimum contrast ratio in relative luminance that the themes conform
+with always refers to any given combination of background and foreground
+colors. If we have some blue colored text next to a magenta one, both
+against a white background, we do not mean to imply that blue:magenta is
+7:1 in terms of relative luminance. Rather, we state that blue:white
+and magenta:white each are 7:1 or higher.
+
+The point of reference is always the background. Because colors have
+about the same minimum distance in luminance from their backdrop, they
+necessarily are fairly close to each other in this measure. A possible
+blue:magenta combination would naturally be around 1:1 in contrast of
+the sort here considered.
+
+To differentiate between sequential colors, we rely on hueness by
+mapping contrasting hues to adjacent constructs, while avoiding
+exaggerations. A blue next to a magenta can be told apart regardless of
+their respective contrast ratio against their common background.
+Exceptions would be tiny characters in arguably not so realistic cases,
+such as two dots drawn side-by-side which for some reason would need to
+be colored differently. They would still be legible though, which is
+the primary objective of the Modus themes.
+
+** What does it mean to avoid exaggerations?
+:properties:
+:custom_id: h:44284e1f-fab8-4c4f-92f0-544728a7c91e
+:end:
+#+cindex: Avoiding exaggerations in design
+
+The Modus themes are designed with restraint, so that their default
+looks do not overdo it with the application of color.
+
+[[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]].
+
+This is the non-quantifiable aspect of the themes' design: the artistic
+part, if you will. There are a lot of cases where color can be used
+inconsiderately, without accounting for layout, typographic, or other
+properties of the presentation. For example, two headings with distinct
+markers, such as leading asterisks in Org buffers, do not have to have
+highly contrasting hues between them in order to be told apart: the
+added element of contrast in hueness does not contribute significantly
+more to the distinction between the headings than colors whose hues are
+relatively closer to each other in the color space.
+
+Exaggerations can be hard to anticipate or identify. Multiple shades of
+blue and magenta in the same context may not seem optimal: one might
+think that it would be better to use highly contrasting hues to ensure
+that all colors stand out, such as by placing blue next to yellow, next
+to magenta, and green. That would, however, be a case of design for its
+own sake; a case where color is being applied without consideration of
+its end results in the given context. Too many contrasting hues in
+close proximity force an erratic rate to how the eye jumps from one
+piece of text to the next. Whereas multiple shades of, say, blue and
+magenta can suffice to tell things apart and avoid excess coloration: a
+harmonious rhythm.
+
+** Why are colors mostly variants of blue, magenta, cyan?
+:properties:
+:custom_id: h:0b26cb47-9733-4cb1-87d9-50850cb0386e
+:end:
+#+cindex: Innate color qualities of the palette
+
+Due to the innate properties of color, some options are better than
+others for the accessibility purposes of the themes, the stylistic
+consistency between ~modus-operandi~ and ~modus-vivendi~, and the avoidance
+of exaggerations in design.
+
+[[#h:44284e1f-fab8-4c4f-92f0-544728a7c91e][What does it mean to avoid exaggerations?]]
+
+What we describe as color is a function of three distinct channels of
+light: red, green, blue. In hexadecimal RGB notation, a color value is
+read as three pairs of red, green, and blue light: =#RRGGBB=. Of those
+three, the most luminant is green, while the least luminant is blue.
+
+The three basic colors represent each of the channels of light. They
+can be intermixed to give us six colors: red and green derive yellow,
+green and blue make cyan, red and blue turn into magenta.
+
+We can test the luminance of each of those against white and black to
+get a sense of how not all colors are equally good for accessibility
+(white is =#ffffff=, which means that all three light channels are fully
+luminated, while black is =#000000= meaning that no light is present
+(notwithstanding display technology)).
+
+#+begin_example
+| Name | | #ffffff | #000000 |
+|---------+---------+---------+---------|
+| red | #ff0000 | 4.00 | 5.25 |
+| yellow | #ffff00 | 1.07 | 19.56 |
+| green | #00ff00 | 1.37 | 15.30 |
+| cyan | #00ffff | 1.25 | 16.75 |
+| blue | #0000ff | 8.59 | 2.44 |
+| magenta | #ff00ff | 3.14 | 6.70 |
+#+end_example
+
+[[#h:02e25930-e71a-493d-828a-8907fc80f874][Measure color contrast]].
+
+By reading this table we learn that every color that has a high level of
+green light (green, yellow, cyan) is virtually unreadable against a
+white background and, conversely, can be easily read against black.
+
+We can then infer that red and blue, in different combinations, with
+green acting as calibrator for luminance, will give us fairly moderate
+colors that pass the 7:1 target. Blue with a bit of green produce
+appropriate variants of cyan. Similarly, blue combined with some red
+and hints of green give us suitable shades of purple.
+
+Due to the need of maintaining some difference in hueness between
+adjacent colors, it is not possible to make red, green, and yellow the
+main colors, because blue cannot be used to control their luminance and,
+thus the relevant space will shrink considerably.
+
+[[#h:5ce7ae2e-9348-4e55-b4cf-9302345b1826][Is the contrast ratio about adjacent colors?]]
+
+This phenomenon is best illustrated by the following table that measures
+the relative luminance of shades of red, yellow, magenta against white:
+
+#+begin_example
+| | #ffffff |
+|---------+---------|
+| #990000 | 8.92 |
+| #995500 | 5.75 |
+| #990099 | 7.46 |
+#+end_example
+
+We notice that equal values of red and blue light in =#990099= (magenta
+shade) do not lead to a considerable change in luminance compared with
+=#990000= (red variant). Whereas less amount of green light in =#995500=
+leads to a major drop in luminance relative to white. It follows that
+using the green channel of light to calibrate the luminance of colors is
+more effective than trying to do the same with either red or blue (the
+latter is the least effective in that regard).
+
+When we need to work with several colors, it is always better to have
+sufficient manoeuvring space, especially since we cannot pick arbitrary
+colors but only those that satisfy the accessibility objectives of the
+themes.
+
+As for why we do not mostly use green, yellow, cyan for the dark theme,
+it is because those colors are far more luminant than their counterparts
+on the other side of the spectrum, so to ensure that they all have about
+the same contrast ratios we would have to alter their hueness
+considerably. In short, the effect would not be optimal as it would
+lead to exaggerations. Plus, it would make ~modus-vivendi~ look
+completely different than ~modus-operandi~, to the effect that the two
+could not be properly considered part of the same project.
+
+** What is the best setup for legibility?
+:properties:
+:custom_id: h:f60cc2ae-129d-47c0-9849-4f6bbd87d8be
+:end:
+#+cindex: General setup for readability
+
+The Modus themes can be conceptually simplified as combinations of color
+values that account for relative luminance and inner harmony. Those
+qualities do not guarantee that every end-user will have the same
+experience, due to differences between people, but also because of
+variances in hardware capabilities and configurations. For the purposes
+of this document, we may only provide suggestions pertaining to the
+latter case.
+
+~modus-operandi~ is best used outdoors or in a room that either gets
+direct sunlight or has plenty of light. Whereas ~modus-vivendi~ works
+better when there is not a lot of sunshine or the room has a source of
+light that is preferably a faint and/or warm one. It is possible to use
+~modus-operandi~ at night and ~modus-vivendi~ during the day, though that
+will depend on several variables, such as one's overall perception of
+color, the paint on the walls and how that contributes to the impression
+of lightness in the room, the sense of space within the eye's peripheral
+vision, hardware specifications, and environmental factors.
+
+In general, an additional source of light other than that of the monitor
+can help reduce eye strain: the eyes are more relaxed when they do not
+have to focus on one point to gather light.
+
+The monitor's display settings must be accounted for. Gamma values, in
+particular, need to be calibrated to neither amplify nor distort the
+perception of black. Same principle for sharpness, brightness, and
+contrast as determined by the hardware, which all have an effect on how
+text is read on the screen.
+
+There are software level methods on offer, such as the XrandR utility
+for the X Window System (X.org), which can make gamma corrections for
+each of the three channels of light (red, green, blue). For example:
+
+: xrandr --output LVDS1 --brightness 1.0 --gamma 0.76:0.75:0.68
+
+Typography is another variable. Some font families are blurry at small
+point sizes. Others may have a regular weight that is lighter (thiner)
+than that of their peers which may, under certain circumstances, cause a
+halo effect around each glyph.
+
+The gist is that legibility cannot be fully solved at the theme level.
+The color combinations may have been optimized for accessibility, though
+the remaining contributing factors in each case need to be considered in
+full.
+
+** Are these color schemes?
+:properties:
+:custom_id: h:a956dbd3-8fd2-4f5d-8b01-5f881268cf2b
+:end:
+#+cindex: Themes, not color schemes
+
+No, the Modus themes are not color schemes.
+
+A color scheme is a collection of colors. A good color scheme is a
+combination of colors with an inner logic or abstract structure.
+
+A theme is a set of patterns that are applied across different contexts.
+A good theme is one that does so with consistency, though not
+uniformity.
+
+In practical terms, a color scheme is what one uses when, for example,
+they replace the first sixteen escape sequences of a terminal emulator
+with color values of their preference. The terminal offers the option
+to choose, say, the exact value of what counts as "red", but does not
+provide the means to control where that is mapped to and whether it
+should also have other qualities such as a bold weight for the
+underlying text or an added background color. In contradistinction,
+Emacs uses constructs known as "faces" which allow the user/developer
+to specify where a given color will be used and whether it should be
+accompanied by other typographic or stylistic attributes.
+
+By configuring the multitude of faces on offer we thus control both
+which colors are applied and how they appear in their context. When a
+package wants to render each instance of "foo" with the "bar" face, it
+is not requesting a specific color, which makes things considerably more
+flexible as we can treat "bar" in its own right without necessarily
+having to use some color value that we hardcoded somewhere.
+
+Which brings us to the distinction between consistency and uniformity
+where our goal is always the former: we want things to look similar
+across all interfaces, but we must never force a visual identity where
+that runs contrary to the functionality of the given interface. For
+instance, all links are underlined by default yet there are cases such
+as when viewing listings of emails in Gnus (and Mu4e, Notmuch) where (i)
+it is already understood that one must follow the indicator or headline
+to view its contents and (ii) underlining everything would make the
+interface virtually unusable.
+
+Again, one must exercise judgement in order to avoid discrimination,
+where "discrimination" refers to:
+
++ The treatment of substantially different magnitudes as if they were of
+ the same class.
++ Or the treatment of the same class of magnitudes as if they were of a
+ different class.
+
+(To treat similar things differently; to treat dissimilar things alike.)
+
+If, in other words, one is to enforce uniformity without accounting
+for the particular requirements of each case---the contextual demands
+for usability beyond matters of color---they are making a
+not-so-obvious error of treating different cases as if they were the
+same.
+
+The Modus themes prioritize "thematic consistency" over abstract harmony
+or regularity among their applicable colors. In concrete terms, we do
+not claim that, say, our yellows are the best complements for our blues
+because we generally avoid using complementary colors side-by-side, so
+it is wrong to optimize for a decontextualised blue+yellow combination.
+Not to imply that our colors do not work well together because they do,
+just to clarify that consistency of context is what themes must strive
+for, and that requires widening the scope of the design beyond the
+particularities of a color scheme.
+
+Long story short: color schemes and themes have different requirements.
+Please do not conflate the two.
+
+** Port the Modus themes to other platforms?
+:properties:
+:custom_id: h:7156b949-917d-488e-9a72-59f70d80729c
+:end:
+#+cindex: Porting the themes to other editors
+
+There is no plan to port the themes to other platforms or text editors.
+I (Protesilaos) only use GNU Emacs and thus cannot maintain code that
+targets software I am either not familiar with or am not using on a
+daily basis.
+
+While it is possible to produce a simulacrum based on a given template,
+doing so would run contrary to how this project is maintained where
+details matter greatly.
+
+Each program has its own requirements so it won't always be
+possible---or indeed desirable---to have 1:1 correspondence between
+what applies to Emacs and what should be done elsewhere. No port
+should ever strive to be a copy of the Emacs implementation, as no
+other program is an Emacs equivalent, but instead try to follow the
+spirit of the design. For example, some of the customization options
+accept a list as their value, or an alist, which may not be possible
+to reproduce on other platforms.
+
+[[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization options]].
+
+In other words, if something must be done differently on a certain
+editor then that is acceptable so long as (i) the accessibility
+standards are not compromised and (ii) the overall character of the
+themes remains consistent.
+
+The former criterion should be crystal clear as it pertains to the
+scientific foundations of the themes: high legibility and taking care
+of the needs of users with red-green/blue-yellow color deficiency
+(deuteranopia and tritanopia) by avoiding red+green color coding
+paradigms and/or by providing yellow+blue variants for deuteranopia
+and red+cyan for tritanopia ([[#h:f0f3dbcb-602d-40cf-b918-8f929c441baf][Overview]]).
+
+The latter criterion is the "je ne sais quoi" of the artistic aspect of
+the themes, which is partially fleshed out in this manual.
+
+[[#h:b3384767-30d3-4484-ba7f-081729f03a47][Frequently Asked Questions]].
+
+With regard to the artistic aspect (where "art" qua skill may amount to
+an imprecise science), there is no hard-and-fast rule in effect as it
+requires one to exercize discretion and make decisions based on
+context-dependent information or constraints. As is true with most
+things in life, when in doubt, do not cling on to the letter of the law
+but try to understand its spirit.
+
+For a trivial example: the curly underline that Emacs draws for spelling
+errors is thinner than, e.g., what a graphical web browser has, so if I
+was to design for an editor than has a thicker curly underline I would
+make the applicable colors less intense to counterbalance the
+typographic intensity of the added thickness.
+
+With those granted, if anyone is willing to develop a port of the
+themes, they are welcome to contact me and I will do my best to help
+them in their efforts.
+
+* Contributing
+:properties:
+:custom_id: h:9c3cd842-14b7-44d7-84b2-a5c8bc3fc3b1
+:end:
+
+This section documents the canonical sources of the themes and the ways
+in which you can contribute to their ongoing development.
+
+** Sources of the themes
+:properties:
+:custom_id: h:89504f1c-c9a1-4bd9-ab39-78fd0eddb47c
+:end:
+#+cindex: Sources of the themes
+
++ Package name (GNU ELPA): ~modus-themes~
++ Official manual: <https://protesilaos.com/emacs/modus-themes>
++ Change log: <https://protesilaos.com/emacs/modus-themes-changelog>
++ Color palette: <https://protesilaos.com/emacs/modus-themes-colors>
++ Sample pictures: <https://protesilaos.com/emacs/modus-themes-pictures>
++ 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>
++ Backronym: My Old Display Unexpectedly Sharpened ... themes
+
+** Issues you can help with
+:properties:
+:custom_id: h:6536c8d5-3f98-43ab-a787-b94120e735e8
+:end:
+#+cindex: Contributing
+
+A few tasks you can help with by sending an email to the general
+[[https://lists.sr.ht/~protesilaos/modus-themes][modus-themes public mailing list]].
+
++ Suggest refinements to packages that are covered.
++ Report packages not covered thus far.
++ Report bugs, inconsistencies, shortcomings.
++ Help expand the documentation of covered-but-not-styled packages.
++ Suggest refinements to the color palette.
++ Help expand this document or any other piece of documentation.
++ Send patches for code refinements (if you need, ask me for help with
+ Git---we all start out as beginners).
+
+[[#h:111773e2-f26f-4b68-8c4f-9794ca6b9633][Patches require copyright assignment to the FSF]].
+
+It is preferable that your feedback includes some screenshots, GIFs, or
+short videos, as well as further instructions to reproduce a given
+setup. Though this is not a requirement.
+
+Whatever you do, bear in mind the overarching objective of the Modus
+themes: to keep a contrast ratio that is greater or equal to 7:1 between
+background and foreground colors. If a compromise is ever necessary
+between aesthetics and accessibility, it shall always be made in the
+interest of the latter.
+
+** Patches require copyright assignment to the FSF
+:properties:
+:custom_id: h:111773e2-f26f-4b68-8c4f-9794ca6b9633
+:end:
+
+Code contributions are most welcome. For any major edit (more than 15
+lines, or so, in aggregate per person), you need to make a copyright
+assignment to the Free Software Foundation. This is necessary because
+the themes are part of the upstream Emacs distribution: the FSF must at
+all times be in a position to enforce the GNU General Public License.
+
+Copyright assignment is a simple process. Check the request form below
+(please adapt it accordingly). You must write an email to the address
+mentioned in the form and then wait for the FSF to send you a legal
+agreement. Sign the document and file it back to them. This could all
+happen via email and take about a week. You are encouraged to go
+through this process. You only need to do it once. It will allow you
+to make contributions to Emacs in general.
+
+#+begin_example text
+Please email the following information to assign@gnu.org, and we
+will send you the assignment form for your past and future changes.
+
+Please use your full legal name (in ASCII characters) as the subject
+line of the message.
+
+REQUEST: SEND FORM FOR PAST AND FUTURE CHANGES
+
+[What is the name of the program or package you're contributing to?]
+
+GNU Emacs
+
+[Did you copy any files or text written by someone else in these changes?
+Even if that material is free software, we need to know about it.]
+
+Copied a few snippets from the same files I edited. Their author,
+Protesilaos Stavrou, has already assigned copyright to the Free Software
+Foundation.
+
+[Do you have an employer who might have a basis to claim to own
+your changes? Do you attend a school which might make such a claim?]
+
+
+[For the copyright registration, what country are you a citizen of?]
+
+
+[What year were you born?]
+
+
+[Please write your email address here.]
+
+
+[Please write your postal address here.]
+
+
+
+
+
+[Which files have you changed so far, and which new files have you written
+so far?]
+
+#+end_example
+
+* Acknowledgements
+:properties:
+:custom_id: h:95c3da23-217f-404e-b5f3-56c75760ebcf
+:end:
+#+cindex: Contributors
+
+The Modus themes are a collective effort. Every bit of work matters.
+
++ Author/maintainer :: Protesilaos Stavrou.
+
++ Contributions to code or documentation :: Aleksei Gusev, Alex
+ Griffin, Anders Johansson, Antonio Ruiz, Basil L.{{{space()}}}
+ Contovounesios, Björn Lindström, Carlo Zancanaro, Christian Tietze,
+ Daniel Mendler, David Edmondson, Eli Zaretskii, Fritz Grabo, Gautier
+ Ponsinet, Illia Ostapyshyn, Kévin Le Gouguec, Koen van Greevenbroek,
+ Kostadin Ninev, Madhavan Krishnan, Manuel Giraud, Markus Beppler,
+ Matthew Stevenson, Mauro Aranda, Nacho Barrientos, Nicolas De
+ Jaeghere, Paul David, Philip Kaludercic, Pierre Téchoueyres, Rudolf
+ Adamkovič, Sergey Nichiporchik, Shreyas Ragavan, Stefan Kangas,
+ Stephen Berman, Stephen Gildea, Steve Downey, Tomasz Hołubowicz,
+ Utkarsh Singh, Vincent Murphy, Xinglu Chen, Yuanchen Xie, fluentpwn,
+ okamsn.
+
++ Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers,
+ Adrian Manea, Aleksei Pirogov, Alex Griffin, Alex Koen, Alex
+ Peitsinis, Alexey Shmalko, Alok Singh, Anders Johansson, André
+ Alexandre Gomes, Andrew Tropin, Antonio Hernández Blas, Arif Rezai,
+ Augusto Stoffel, Basil L.{{{space()}}} Contovounesios, Bernd
+ Rellermeyer, Burgess Chang, Charlotte Van Petegem, Christian Tietze,
+ Christopher Dimech, Christopher League, Damien Cassou, Daniel
+ Mendler, Dario Gjorgjevski, David Edmondson, Davor Rotim, Divan
+ Santana, Eliraz Kedmi, Emanuele Michele Alberto Monterosso, Farasha
+ Euker, Feng Shu, Gautier Ponsinet, Gerry Agbobada, Gianluca Recchia,
+ Gonçalo Marrafa, Guilherme Semente, Gustavo Barros, Hörmetjan
+ Yiltiz, Ilja Kocken, Imran Khan, Iris Garcia, Ivan Popovych, James
+ Ferguson, Jeremy Friesen, Jerry Zhang, Johannes Grødem, John Haman,
+ Jonas Collberg, Jorge Morais, Joshua O'Connor, Julio C. Villasante,
+ Kenta Usami, Kevin Fleming, Kévin Le Gouguec, Kevin Kainan Li,
+ Kostadin Ninev, Laith Bahodi, Lasse Lindner, Len Trigg, Lennart
+ C. Karssen, Luis Miguel Castañeda, Magne Hov, Manuel Giraud, Manuel
+ Uberti, Mark Bestley, Mark Burton, Mark Simpson, Marko Kocic, Markus
+ Beppler, Matt Armstrong, Matthias Fuchs, Mattias Engdegård, Mauro
+ Aranda, Maxime Tréca, Michael Goldenberg, Morgan Smith, Morgan
+ Willcock, Murilo Pereira, Nicky van Foreest, Nicolas De Jaeghere,
+ Nicolas Semrau, Olaf Meeuwissen, Oliver Epper, Pablo Stafforini,
+ Paul Poloskov, Pengji Zhang, Pete Kazmier, Peter Wu, Philip
+ Kaludercic, Pierre Téchoueyres, Przemysław Kryger, Robert Hepple,
+ Roman Rudakov, Russell Sim, Ryan Phillips, Rytis Paškauskas, Rudolf
+ Adamkovič, Sam Kleinman, Samuel Culpepper, Saša Janiška, Shreyas
+ Ragavan, Simon Pugnet, Steve Downey, Tassilo Horn, Thanos Apollo,
+ Thibaut Verron, Thomas Heartman, Togan Muftuoglu, Tony Zorman, Trey
+ Merkley, Tomasz Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh,
+ Vincent Foley, Zoltan Kiraly. As well as users: Ben, CsBigDataHub1,
+ Emacs Contrib, Eugene, Fourchaux, Fredrik, Moesasji, Nick, Summer
+ Emacs, TheBlob42, TitusMu, Trey, bepolymathe, bit9tream,
+ bangedorrunt, derek-upham, doolio, fleimgruber, gitrj95, iSeeU,
+ jixiuf, okamsn, pRot0ta1p, soaringbird, tumashu, wakamenod.
+
++ Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii,
+ Glenn Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core
+ Emacs), Stefan Monnier (GNU Elpa), André Alexandre Gomes, Andrew
+ Tropin, Dimakakos Dimos, Morgan Smith, Nicolas Goaziou (Guix), Dhavan
+ Vaidya (Debian).
+
++ Inspiration for certain features :: Bozhidar Batsov (zenburn-theme),
+ Fabrice Niessen (leuven-theme).
+
+Special thanks (from A-Z) to Daniel Mendler, Gustavo Barros, Manuel
+Uberti, Nicolas De Jaeghere, and Omar Antolín Camarena for their long
+time contributions and insightful commentary on key aspects of the
+themes' design and/or aspects of their functionality.
+
+All errors are my own.
+
+* GNU Free Documentation License
+:properties:
+:appendix: t
+:custom_id: h:3077c3d2-7f90-4228-8f0a-73124f4026f6
+:end:
+
+#+texinfo: @include doclicense.texi
+
+#+begin_export html
+<pre>
+
+ GNU Free Documentation License
+ Version 1.3, 3 November 2008
+
+
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+0. PREAMBLE
+
+The purpose of this License is to make a manual, textbook, or other
+functional and useful document "free" in the sense of freedom: to
+assure everyone the effective freedom to copy and redistribute it,
+with or without modifying it, either commercially or noncommercially.
+Secondarily, this License preserves for the author and publisher a way
+to get credit for their work, while not being considered responsible
+for modifications made by others.
+
+This License is a kind of "copyleft", which means that derivative
+works of the document must themselves be free in the same sense. It
+complements the GNU General Public License, which is a copyleft
+license designed for free software.
+
+We have designed this License in order to use it for manuals for free
+software, because free software needs free documentation: a free
+program should come with manuals providing the same freedoms that the
+software does. But this License is not limited to software manuals;
+it can be used for any textual work, regardless of subject matter or
+whether it is published as a printed book. We recommend this License
+principally for works whose purpose is instruction or reference.
+
+
+1. APPLICABILITY AND DEFINITIONS
+
+This License applies to any manual or other work, in any medium, that
+contains a notice placed by the copyright holder saying it can be
+distributed under the terms of this License. Such a notice grants a
+world-wide, royalty-free license, unlimited in duration, to use that
+work under the conditions stated herein. The "Document", below,
+refers to any such manual or work. Any member of the public is a
+licensee, and is addressed as "you". You accept the license if you
+copy, modify or distribute the work in a way requiring permission
+under copyright law.
+
+A "Modified Version" of the Document means any work containing the
+Document or a portion of it, either copied verbatim, or with
+modifications and/or translated into another language.
+
+A "Secondary Section" is a named appendix or a front-matter section of
+the Document that deals exclusively with the relationship of the
+publishers or authors of the Document to the Document's overall
+subject (or to related matters) and contains nothing that could fall
+directly within that overall subject. (Thus, if the Document is in
+part a textbook of mathematics, a Secondary Section may not explain
+any mathematics.) The relationship could be a matter of historical
+connection with the subject or with related matters, or of legal,
+commercial, philosophical, ethical or political position regarding
+them.
+
+The "Invariant Sections" are certain Secondary Sections whose titles
+are designated, as being those of Invariant Sections, in the notice
+that says that the Document is released under this License. If a
+section does not fit the above definition of Secondary then it is not
+allowed to be designated as Invariant. The Document may contain zero
+Invariant Sections. If the Document does not identify any Invariant
+Sections then there are none.
+
+The "Cover Texts" are certain short passages of text that are listed,
+as Front-Cover Texts or Back-Cover Texts, in the notice that says that
+the Document is released under this License. A Front-Cover Text may
+be at most 5 words, and a Back-Cover Text may be at most 25 words.
+
+A "Transparent" copy of the Document means a machine-readable copy,
+represented in a format whose specification is available to the
+general public, that is suitable for revising the document
+straightforwardly with generic text editors or (for images composed of
+pixels) generic paint programs or (for drawings) some widely available
+drawing editor, and that is suitable for input to text formatters or
+for automatic translation to a variety of formats suitable for input
+to text formatters. A copy made in an otherwise Transparent file
+format whose markup, or absence of markup, has been arranged to thwart
+or discourage subsequent modification by readers is not Transparent.
+An image format is not Transparent if used for any substantial amount
+of text. A copy that is not "Transparent" is called "Opaque".
+
+Examples of suitable formats for Transparent copies include plain
+ASCII without markup, Texinfo input format, LaTeX input format, SGML
+or XML using a publicly available DTD, and standard-conforming simple
+HTML, PostScript or PDF designed for human modification. Examples of
+transparent image formats include PNG, XCF and JPG. Opaque formats
+include proprietary formats that can be read and edited only by
+proprietary word processors, SGML or XML for which the DTD and/or
+processing tools are not generally available, and the
+machine-generated HTML, PostScript or PDF produced by some word
+processors for output purposes only.
+
+The "Title Page" means, for a printed book, the title page itself,
+plus such following pages as are needed to hold, legibly, the material
+this License requires to appear in the title page. For works in
+formats which do not have any title page as such, "Title Page" means
+the text near the most prominent appearance of the work's title,
+preceding the beginning of the body of the text.
+
+The "publisher" means any person or entity that distributes copies of
+the Document to the public.
+
+A section "Entitled XYZ" means a named subunit of the Document whose
+title either is precisely XYZ or contains XYZ in parentheses following
+text that translates XYZ in another language. (Here XYZ stands for a
+specific section name mentioned below, such as "Acknowledgements",
+"Dedications", "Endorsements", or "History".) To "Preserve the Title"
+of such a section when you modify the Document means that it remains a
+section "Entitled XYZ" according to this definition.
+
+The Document may include Warranty Disclaimers next to the notice which
+states that this License applies to the Document. These Warranty
+Disclaimers are considered to be included by reference in this
+License, but only as regards disclaiming warranties: any other
+implication that these Warranty Disclaimers may have is void and has
+no effect on the meaning of this License.
+
+2. VERBATIM COPYING
+
+You may copy and distribute the Document in any medium, either
+commercially or noncommercially, provided that this License, the
+copyright notices, and the license notice saying this License applies
+to the Document are reproduced in all copies, and that you add no
+other conditions whatsoever to those of this License. You may not use
+technical measures to obstruct or control the reading or further
+copying of the copies you make or distribute. However, you may accept
+compensation in exchange for copies. If you distribute a large enough
+number of copies you must also follow the conditions in section 3.
+
+You may also lend copies, under the same conditions stated above, and
+you may publicly display copies.
+
+
+3. COPYING IN QUANTITY
+
+If you publish printed copies (or copies in media that commonly have
+printed covers) of the Document, numbering more than 100, and the
+Document's license notice requires Cover Texts, you must enclose the
+copies in covers that carry, clearly and legibly, all these Cover
+Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on
+the back cover. Both covers must also clearly and legibly identify
+you as the publisher of these copies. The front cover must present
+the full title with all words of the title equally prominent and
+visible. You may add other material on the covers in addition.
+Copying with changes limited to the covers, as long as they preserve
+the title of the Document and satisfy these conditions, can be treated
+as verbatim copying in other respects.
+
+If the required texts for either cover are too voluminous to fit
+legibly, you should put the first ones listed (as many as fit
+reasonably) on the actual cover, and continue the rest onto adjacent
+pages.
+
+If you publish or distribute Opaque copies of the Document numbering
+more than 100, you must either include a machine-readable Transparent
+copy along with each Opaque copy, or state in or with each Opaque copy
+a computer-network location from which the general network-using
+public has access to download using public-standard network protocols
+a complete Transparent copy of the Document, free of added material.
+If you use the latter option, you must take reasonably prudent steps,
+when you begin distribution of Opaque copies in quantity, to ensure
+that this Transparent copy will remain thus accessible at the stated
+location until at least one year after the last time you distribute an
+Opaque copy (directly or through your agents or retailers) of that
+edition to the public.
+
+It is requested, but not required, that you contact the authors of the
+Document well before redistributing any large number of copies, to
+give them a chance to provide you with an updated version of the
+Document.
+
+
+4. MODIFICATIONS
+
+You may copy and distribute a Modified Version of the Document under
+the conditions of sections 2 and 3 above, provided that you release
+the Modified Version under precisely this License, with the Modified
+Version filling the role of the Document, thus licensing distribution
+and modification of the Modified Version to whoever possesses a copy
+of it. In addition, you must do these things in the Modified Version:
+
+A. Use in the Title Page (and on the covers, if any) a title distinct
+ from that of the Document, and from those of previous versions
+ (which should, if there were any, be listed in the History section
+ of the Document). You may use the same title as a previous version
+ if the original publisher of that version gives permission.
+B. List on the Title Page, as authors, one or more persons or entities
+ responsible for authorship of the modifications in the Modified
+ Version, together with at least five of the principal authors of the
+ Document (all of its principal authors, if it has fewer than five),
+ unless they release you from this requirement.
+C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+D. Preserve all the copyright notices of the Document.
+E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+F. Include, immediately after the copyright notices, a license notice
+ giving the public permission to use the Modified Version under the
+ terms of this License, in the form shown in the Addendum below.
+G. Preserve in that license notice the full lists of Invariant Sections
+ and required Cover Texts given in the Document's license notice.
+H. Include an unaltered copy of this License.
+I. Preserve the section Entitled "History", Preserve its Title, and add
+ to it an item stating at least the title, year, new authors, and
+ publisher of the Modified Version as given on the Title Page. If
+ there is no section Entitled "History" in the Document, create one
+ stating the title, year, authors, and publisher of the Document as
+ given on its Title Page, then add an item describing the Modified
+ Version as stated in the previous sentence.
+J. Preserve the network location, if any, given in the Document for
+ public access to a Transparent copy of the Document, and likewise
+ the network locations given in the Document for previous versions
+ it was based on. These may be placed in the "History" section.
+ You may omit a network location for a work that was published at
+ least four years before the Document itself, or if the original
+ publisher of the version it refers to gives permission.
+K. For any section Entitled "Acknowledgements" or "Dedications",
+ Preserve the Title of the section, and preserve in the section all
+ the substance and tone of each of the contributor acknowledgements
+ and/or dedications given therein.
+L. Preserve all the Invariant Sections of the Document,
+ unaltered in their text and in their titles. Section numbers
+ or the equivalent are not considered part of the section titles.
+M. Delete any section Entitled "Endorsements". Such a section
+ may not be included in the Modified Version.
+N. Do not retitle any existing section to be Entitled "Endorsements"
+ or to conflict in title with any Invariant Section.
+O. Preserve any Warranty Disclaimers.
+
+If the Modified Version includes new front-matter sections or
+appendices that qualify as Secondary Sections and contain no material
+copied from the Document, you may at your option designate some or all
+of these sections as invariant. To do this, add their titles to the
+list of Invariant Sections in the Modified Version's license notice.
+These titles must be distinct from any other section titles.
+
+You may add a section Entitled "Endorsements", provided it contains
+nothing but endorsements of your Modified Version by various
+parties--for example, statements of peer review or that the text has
+been approved by an organization as the authoritative definition of a
+standard.
+
+You may add a passage of up to five words as a Front-Cover Text, and a
+passage of up to 25 words as a Back-Cover Text, to the end of the list
+of Cover Texts in the Modified Version. Only one passage of
+Front-Cover Text and one of Back-Cover Text may be added by (or
+through arrangements made by) any one entity. If the Document already
+includes a cover text for the same cover, previously added by you or
+by arrangement made by the same entity you are acting on behalf of,
+you may not add another; but you may replace the old one, on explicit
+permission from the previous publisher that added the old one.
+
+The author(s) and publisher(s) of the Document do not by this License
+give permission to use their names for publicity for or to assert or
+imply endorsement of any Modified Version.
+
+
+5. COMBINING DOCUMENTS
+
+You may combine the Document with other documents released under this
+License, under the terms defined in section 4 above for modified
+versions, provided that you include in the combination all of the
+Invariant Sections of all of the original documents, unmodified, and
+list them all as Invariant Sections of your combined work in its
+license notice, and that you preserve all their Warranty Disclaimers.
+
+The combined work need only contain one copy of this License, and
+multiple identical Invariant Sections may be replaced with a single
+copy. If there are multiple Invariant Sections with the same name but
+different contents, make the title of each such section unique by
+adding at the end of it, in parentheses, the name of the original
+author or publisher of that section if known, or else a unique number.
+Make the same adjustment to the section titles in the list of
+Invariant Sections in the license notice of the combined work.
+
+In the combination, you must combine any sections Entitled "History"
+in the various original documents, forming one section Entitled
+"History"; likewise combine any sections Entitled "Acknowledgements",
+and any sections Entitled "Dedications". You must delete all sections
+Entitled "Endorsements".
+
+
+6. COLLECTIONS OF DOCUMENTS
+
+You may make a collection consisting of the Document and other
+documents released under this License, and replace the individual
+copies of this License in the various documents with a single copy
+that is included in the collection, provided that you follow the rules
+of this License for verbatim copying of each of the documents in all
+other respects.
+
+You may extract a single document from such a collection, and
+distribute it individually under this License, provided you insert a
+copy of this License into the extracted document, and follow this
+License in all other respects regarding verbatim copying of that
+document.
+
+
+7. AGGREGATION WITH INDEPENDENT WORKS
+
+A compilation of the Document or its derivatives with other separate
+and independent documents or works, in or on a volume of a storage or
+distribution medium, is called an "aggregate" if the copyright
+resulting from the compilation is not used to limit the legal rights
+of the compilation's users beyond what the individual works permit.
+When the Document is included in an aggregate, this License does not
+apply to the other works in the aggregate which are not themselves
+derivative works of the Document.
+
+If the Cover Text requirement of section 3 is applicable to these
+copies of the Document, then if the Document is less than one half of
+the entire aggregate, the Document's Cover Texts may be placed on
+covers that bracket the Document within the aggregate, or the
+electronic equivalent of covers if the Document is in electronic form.
+Otherwise they must appear on printed covers that bracket the whole
+aggregate.
+
+
+8. TRANSLATION
+
+Translation is considered a kind of modification, so you may
+distribute translations of the Document under the terms of section 4.
+Replacing Invariant Sections with translations requires special
+permission from their copyright holders, but you may include
+translations of some or all Invariant Sections in addition to the
+original versions of these Invariant Sections. You may include a
+translation of this License, and all the license notices in the
+Document, and any Warranty Disclaimers, provided that you also include
+the original English version of this License and the original versions
+of those notices and disclaimers. In case of a disagreement between
+the translation and the original version of this License or a notice
+or disclaimer, the original version will prevail.
+
+If a section in the Document is Entitled "Acknowledgements",
+"Dedications", or "History", the requirement (section 4) to Preserve
+its Title (section 1) will typically require changing the actual
+title.
+
+
+9. TERMINATION
+
+You may not copy, modify, sublicense, or distribute the Document
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense, or distribute it is void, and
+will automatically terminate your rights under this License.
+
+However, if you cease all violation of this License, then your license
+from a particular copyright holder is reinstated (a) provisionally,
+unless and until the copyright holder explicitly and finally
+terminates your license, and (b) permanently, if the copyright holder
+fails to notify you of the violation by some reasonable means prior to
+60 days after the cessation.
+
+Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, receipt of a copy of some or all of the same material does
+not give you any rights to use it.
+
+
+10. FUTURE REVISIONS OF THIS LICENSE
+
+The Free Software Foundation may publish new, revised versions of the
+GNU Free Documentation License from time to time. Such new versions
+will be similar in spirit to the present version, but may differ in
+detail to address new problems or concerns. See
+https://www.gnu.org/licenses/.
+
+Each version of the License is given a distinguishing version number.
+If the Document specifies that a particular numbered version of this
+License "or any later version" applies to it, you have the option of
+following the terms and conditions either of that specified version or
+of any later version that has been published (not as a draft) by the
+Free Software Foundation. If the Document does not specify a version
+number of this License, you may choose any version ever published (not
+as a draft) by the Free Software Foundation. If the Document
+specifies that a proxy can decide which future versions of this
+License can be used, that proxy's public statement of acceptance of a
+version permanently authorizes you to choose that version for the
+Document.
+
+11. RELICENSING
+
+"Massive Multiauthor Collaboration Site" (or "MMC Site") means any
+World Wide Web server that publishes copyrightable works and also
+provides prominent facilities for anybody to edit those works. A
+public wiki that anybody can edit is an example of such a server. A
+"Massive Multiauthor Collaboration" (or "MMC") contained in the site
+means any set of copyrightable works thus published on the MMC site.
+
+"CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
+license published by Creative Commons Corporation, a not-for-profit
+corporation with a principal place of business in San Francisco,
+California, as well as future copyleft versions of that license
+published by that same organization.
+
+"Incorporate" means to publish or republish a Document, in whole or in
+part, as part of another Document.
+
+An MMC is "eligible for relicensing" if it is licensed under this
+License, and if all works that were first published under this License
+somewhere other than this MMC, and subsequently incorporated in whole or
+in part into the MMC, (1) had no cover texts or invariant sections, and
+(2) were thus incorporated prior to November 1, 2008.
+
+The operator of an MMC Site may republish an MMC contained in the site
+under CC-BY-SA on the same site at any time before August 1, 2009,
+provided the MMC is eligible for relicensing.
+
+
+ADDENDUM: How to use this License for your documents
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and
+license notices just after the title page:
+
+ Copyright (c) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
+ A copy of the license is included in the section entitled "GNU
+ Free Documentation License".
+
+If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts,
+replace the "with...Texts." line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with the
+ Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST.
+
+If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of
+free software license, such as the GNU General Public License,
+to permit their use in free software.
+</pre>
+#+end_export
+
+#+html: <!--
+
+* Indices
+:properties:
+:custom_id: h:55104b26-8e94-46cf-9975-43ea00316489
+:end:
+
+** Function index
+:properties:
+:index: fn
+:custom_id: h:6bec5005-529c-4521-ae05-3d990baffb5b
+:end:
+
+** Variable index
+:properties:
+:index: vr
+:custom_id: h:16ad8df6-b015-40a9-9259-03d4f7a23ee4
+:end:
+
+** Concept index
+:properties:
+:index: cp
+:custom_id: h:6aa7a656-884b-4c39-b759-087e412eec13
+:end:
+
+#+html: -->
diff --git a/elpa/modus-themes-4.3.0/modus-operandi-deuteranopia-theme.el b/elpa/modus-themes-4.3.0/modus-operandi-deuteranopia-theme.el
@@ -0,0 +1,486 @@
+;;; modus-operandi-deuteranopia-theme.el --- Deuteranopia-optimized theme with a white background -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+;; Keywords: faces, theme, accessibility
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA). Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(eval-and-compile
+ (unless (and (fboundp 'require-theme)
+ load-file-name
+ (equal (file-name-directory load-file-name)
+ (expand-file-name "themes/" data-directory))
+ (require-theme 'modus-themes t))
+ (require 'modus-themes))
+
+;;;###theme-autoload
+ (deftheme modus-operandi-deuteranopia
+ "Deuteranopia-optimized theme with a white background.
+This variant is optimized for users with red-green color
+deficiency (deuteranopia). It conforms with the highest
+legibility standard for color contrast between background and
+foreground in any given piece of text, which corresponds to a
+minimum contrast in relative luminance of 7:1 (WCAG AAA
+standard)."
+ :background-mode 'light
+ :kind 'color-scheme
+ :family 'modus)
+
+ (defconst modus-operandi-deuteranopia-palette
+ '(
+;;; Basic values
+
+ (bg-main "#ffffff")
+ (bg-dim "#f2f2f2")
+ (fg-main "#000000")
+ (fg-dim "#595959")
+ (fg-alt "#193668")
+ (bg-active "#c4c4c4")
+ (bg-inactive "#e0e0e0")
+ (border "#9f9f9f")
+
+;;; Common accent foregrounds
+
+ (red "#a60000")
+ (red-warmer "#972500")
+ (red-cooler "#a0132f")
+ (red-faint "#7f0000")
+ (red-intense "#d00000")
+ (green "#006800")
+ (green-warmer "#316500")
+ (green-cooler "#00663f")
+ (green-faint "#2a5045")
+ (green-intense "#008900")
+ (yellow "#695500")
+ (yellow-warmer "#973300")
+ (yellow-cooler "#77492f")
+ (yellow-faint "#624416")
+ (yellow-intense "#808000")
+ (blue "#0031a9")
+ (blue-warmer "#3548cf")
+ (blue-cooler "#0000b0")
+ (blue-faint "#003497")
+ (blue-intense "#0000ff")
+ (magenta "#721045")
+ (magenta-warmer "#8f0075")
+ (magenta-cooler "#531ab6")
+ (magenta-faint "#7c318f")
+ (magenta-intense "#dd22dd")
+ (cyan "#005e8b")
+ (cyan-warmer "#3f578f")
+ (cyan-cooler "#005f5f")
+ (cyan-faint "#005077")
+ (cyan-intense "#008899")
+
+;;; Uncommon accent foregrounds
+
+ (rust "#8a290f")
+ (gold "#80601f")
+ (olive "#56692d")
+ (slate "#2f3f83")
+ (indigo "#4a3a8a")
+ (maroon "#731c52")
+ (pink "#7b435c")
+
+;;; Common accent backgrounds
+
+ (bg-red-intense "#ff8f88")
+ (bg-green-intense "#8adf80")
+ (bg-yellow-intense "#f3d000")
+ (bg-blue-intense "#bfc9ff")
+ (bg-magenta-intense "#dfa0f0")
+ (bg-cyan-intense "#a4d5f9")
+
+ (bg-red-subtle "#ffcfbf")
+ (bg-green-subtle "#b3fabf")
+ (bg-yellow-subtle "#fff576")
+ (bg-blue-subtle "#ccdfff")
+ (bg-magenta-subtle "#ffddff")
+ (bg-cyan-subtle "#bfefff")
+
+ (bg-red-nuanced "#fff1f0")
+ (bg-green-nuanced "#ecf7ed")
+ (bg-yellow-nuanced "#fff3da")
+ (bg-blue-nuanced "#f3f3ff")
+ (bg-magenta-nuanced "#fdf0ff")
+ (bg-cyan-nuanced "#ebf6fa")
+
+;;; Uncommon accent backgrounds
+
+ (bg-ochre "#f0e0cc")
+ (bg-lavender "#dfdbfa")
+ (bg-sage "#c0e7d4")
+
+;;; Graphs
+
+ (bg-graph-red-0 "#d0b029")
+ (bg-graph-red-1 "#e0cab4")
+ (bg-graph-green-0 "#8ad080")
+ (bg-graph-green-1 "#afdfa5")
+ (bg-graph-yellow-0 "#ffcf00")
+ (bg-graph-yellow-1 "#f9ff00")
+ (bg-graph-blue-0 "#7f9fff")
+ (bg-graph-blue-1 "#9fc6ff")
+ (bg-graph-magenta-0 "#b0b0d0")
+ (bg-graph-magenta-1 "#d0dfdf")
+ (bg-graph-cyan-0 "#6faad9")
+ (bg-graph-cyan-1 "#bfe0ff")
+
+;;; Special purpose
+
+ (bg-completion "#c0deff")
+ (bg-hover "#b2e4dc")
+ (bg-hover-secondary "#f5d0a0")
+ (bg-hl-line "#dae5ec")
+ (bg-region "#bdbdbd")
+ (fg-region "#000000")
+
+ (bg-char-0 "#7feaff")
+ (bg-char-1 "#ffaaff")
+ (bg-char-2 "#dff000")
+
+ (bg-mode-line-active "#d0d6ff")
+ (fg-mode-line-active "#0f0f0f")
+ (border-mode-line-active "#4f4f74")
+ (bg-mode-line-inactive "#e6e6e6")
+ (fg-mode-line-inactive "#585858")
+ (border-mode-line-inactive "#a3a3a3")
+
+ (modeline-err "#603a00")
+ (modeline-warning "#454500")
+ (modeline-info "#023d92")
+
+ (bg-tab-bar "#dfdfdf")
+ (bg-tab-current "#ffffff")
+ (bg-tab-other "#c2c2c2")
+
+;;; Diffs
+
+ (bg-added "#d5d7ff")
+ (bg-added-faint "#e6e6ff")
+ (bg-added-refine "#babcef")
+ (bg-added-fringe "#275acc")
+ (fg-added "#303099")
+ (fg-added-intense "#0303cc")
+
+ (bg-changed "#eecfdf")
+ (bg-changed-faint "#f0dde5")
+ (bg-changed-refine "#e0b0d0")
+ (bg-changed-fringe "#9f6ab0")
+ (fg-changed "#6f1343")
+ (fg-changed-intense "#7f0f9f")
+
+ (bg-removed "#f4f099")
+ (bg-removed-faint "#f6f6b7")
+ (bg-removed-refine "#ede06f")
+ (bg-removed-fringe "#c0b200")
+ (fg-removed "#553d00")
+ (fg-removed-intense "#7f6f00")
+
+ (bg-diff-context "#f3f3f3")
+
+;;; Paren match
+
+ (bg-paren-match "#5fcfff")
+ (bg-paren-expression "#efd3f5")
+ (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+ (fringe bg-dim)
+ (cursor blue-intense)
+
+ (keybind blue-cooler)
+ (name blue-cooler)
+ (identifier yellow-faint)
+
+ (err yellow-warmer)
+ (warning yellow)
+ (info blue)
+
+ (underline-err yellow-intense)
+ (underline-warning magenta-faint)
+ (underline-note cyan)
+
+ (bg-prominent-err bg-yellow-intense)
+ (fg-prominent-err fg-main)
+ (bg-prominent-warning bg-magenta-intense)
+ (fg-prominent-warning fg-main)
+ (bg-prominent-note bg-cyan-intense)
+ (fg-prominent-note fg-main)
+
+;;;; Code mappings
+
+ (builtin magenta-warmer)
+ (comment yellow-cooler)
+ (constant blue-cooler)
+ (docstring green-faint)
+ (docmarkup magenta-faint)
+ (fnname magenta)
+ (keyword magenta-cooler)
+ (preprocessor red-cooler)
+ (string blue-warmer)
+ (type cyan-cooler)
+ (variable cyan)
+ (rx-construct yellow-cooler)
+ (rx-backslash blue-cooler)
+
+;;;; Accent mappings
+
+ (accent-0 blue)
+ (accent-1 yellow-warmer)
+ (accent-2 cyan)
+ (accent-3 magenta-cooler)
+
+;;;; Button mappings
+
+ (fg-button-active fg-main)
+ (fg-button-inactive fg-dim)
+ (bg-button-active bg-active)
+ (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+ (fg-completion-match-0 blue)
+ (fg-completion-match-1 yellow-warmer)
+ (fg-completion-match-2 cyan)
+ (fg-completion-match-3 magenta-cooler)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+ (date-common cyan)
+ (date-deadline yellow-warmer)
+ (date-event fg-alt)
+ (date-holiday yellow-warmer)
+ (date-holiday-other blue)
+ (date-now blue-faint)
+ (date-range fg-alt)
+ (date-scheduled yellow-cooler)
+ (date-weekday cyan)
+ (date-weekend yellow-faint)
+
+;;;; Line number mappings
+
+ (fg-line-number-inactive fg-dim)
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive bg-dim)
+ (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+ (fg-link blue-warmer)
+ (bg-link unspecified)
+ (underline-link blue-warmer)
+
+ (fg-link-symbolic cyan)
+ (bg-link-symbolic unspecified)
+ (underline-link-symbolic cyan)
+
+ (fg-link-visited yellow-faint)
+ (bg-link-visited unspecified)
+ (underline-link-visited yellow-faint)
+
+;;;; Mail mappings
+
+ (mail-cite-0 blue-warmer)
+ (mail-cite-1 yellow)
+ (mail-cite-2 cyan-faint)
+ (mail-cite-3 yellow-faint)
+ (mail-part blue)
+ (mail-recipient blue)
+ (mail-subject yellow-cooler)
+ (mail-other cyan-faint)
+
+;;;; Mark mappings
+
+ (bg-mark-delete bg-yellow-subtle)
+ (fg-mark-delete yellow)
+ (bg-mark-select bg-cyan-subtle)
+ (fg-mark-select cyan)
+ (bg-mark-other bg-magenta-subtle)
+ (fg-mark-other magenta)
+
+;;;; Prompt mappings
+
+ (fg-prompt blue)
+ (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+ (prose-block fg-dim)
+ (prose-code cyan-cooler)
+ (prose-done blue)
+ (prose-macro magenta-cooler)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-tag magenta-faint)
+ (prose-todo yellow-warmer)
+ (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+ (rainbow-0 blue)
+ (rainbow-1 yellow)
+ (rainbow-2 blue-warmer)
+ (rainbow-3 yellow-cooler)
+ (rainbow-4 blue-cooler)
+ (rainbow-5 yellow-warmer)
+ (rainbow-6 blue-faint)
+ (rainbow-7 yellow-faint)
+ (rainbow-8 cyan)
+
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+ (bg-space-err bg-yellow-intense)
+
+;;;; Terminal mappings
+
+ (bg-term-black "black")
+ (fg-term-black "black")
+ (bg-term-black-bright "gray35")
+ (fg-term-black-bright "gray35")
+
+ (bg-term-red red)
+ (fg-term-red red)
+ (bg-term-red-bright red-warmer)
+ (fg-term-red-bright red-warmer)
+
+ (bg-term-green green)
+ (fg-term-green green)
+ (bg-term-green-bright green-cooler)
+ (fg-term-green-bright green-cooler)
+
+ (bg-term-yellow yellow)
+ (fg-term-yellow yellow)
+ (bg-term-yellow-bright yellow-warmer)
+ (fg-term-yellow-bright yellow-warmer)
+
+ (bg-term-blue blue)
+ (fg-term-blue blue)
+ (bg-term-blue-bright blue-warmer)
+ (fg-term-blue-bright blue-warmer)
+
+ (bg-term-magenta magenta)
+ (fg-term-magenta magenta)
+ (bg-term-magenta-bright magenta-cooler)
+ (fg-term-magenta-bright magenta-cooler)
+
+ (bg-term-cyan cyan)
+ (fg-term-cyan cyan)
+ (bg-term-cyan-bright cyan-cooler)
+ (fg-term-cyan-bright cyan-cooler)
+
+ (bg-term-white "gray65")
+ (fg-term-white "gray65")
+ (bg-term-white-bright "white")
+ (fg-term-white-bright "white")
+
+;;;; Heading mappings
+
+ (fg-heading-0 cyan-cooler)
+ (fg-heading-1 fg-main)
+ (fg-heading-2 yellow-faint)
+ (fg-heading-3 fg-alt)
+ (fg-heading-4 magenta)
+ (fg-heading-5 green-faint)
+ (fg-heading-6 red-faint)
+ (fg-heading-7 cyan-warmer)
+ (fg-heading-8 fg-dim)
+
+ (bg-heading-0 unspecified)
+ (bg-heading-1 unspecified)
+ (bg-heading-2 unspecified)
+ (bg-heading-3 unspecified)
+ (bg-heading-4 unspecified)
+ (bg-heading-5 unspecified)
+ (bg-heading-6 unspecified)
+ (bg-heading-7 unspecified)
+ (bg-heading-8 unspecified)
+
+ (overline-heading-0 unspecified)
+ (overline-heading-1 unspecified)
+ (overline-heading-2 unspecified)
+ (overline-heading-3 unspecified)
+ (overline-heading-4 unspecified)
+ (overline-heading-5 unspecified)
+ (overline-heading-6 unspecified)
+ (overline-heading-7 unspecified)
+ (overline-heading-8 unspecified))
+ "The entire palette of the `modus-operandi-deuteranopia' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols. The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.")
+
+ (defcustom modus-operandi-deuteranopia-palette-overrides nil
+ "Overrides for `modus-operandi-deuteranopia-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red. Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type '(repeat (list symbol (choice symbol string)))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Palette overrides"))
+
+ (modus-themes-theme modus-operandi-deuteranopia
+ modus-operandi-deuteranopia-palette
+ modus-operandi-deuteranopia-palette-overrides)
+
+ (provide-theme 'modus-operandi-deuteranopia))
+
+;;; modus-operandi-deuteranopia-theme.el ends here
diff --git a/elpa/modus-themes-4.3.0/modus-operandi-theme.el b/elpa/modus-themes-4.3.0/modus-operandi-theme.el
@@ -0,0 +1,484 @@
+;;; modus-operandi-theme.el --- Elegant, highly legible theme with a white background -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+;; Keywords: faces, theme, accessibility
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA). Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(eval-and-compile
+ (unless (and (fboundp 'require-theme)
+ load-file-name
+ (equal (file-name-directory load-file-name)
+ (expand-file-name "themes/" data-directory))
+ (require-theme 'modus-themes t))
+ (require 'modus-themes))
+
+;;;###theme-autoload
+ (deftheme modus-operandi
+ "Elegant, highly legible theme with a white background.
+Conforms with the highest legibility standard for color contrast
+between background and foreground in any given piece of text,
+which corresponds to a minimum contrast in relative luminance of
+7:1 (WCAG AAA standard)."
+ :background-mode 'light
+ :kind 'color-scheme
+ :family 'modus)
+
+ (defconst modus-operandi-palette
+ '(
+;;; Basic values
+
+ (bg-main "#ffffff")
+ (bg-dim "#f2f2f2")
+ (fg-main "#000000")
+ (fg-dim "#595959")
+ (fg-alt "#193668")
+ (bg-active "#c4c4c4")
+ (bg-inactive "#e0e0e0")
+ (border "#9f9f9f")
+
+;;; Common accent foregrounds
+
+ (red "#a60000")
+ (red-warmer "#972500")
+ (red-cooler "#a0132f")
+ (red-faint "#7f0000")
+ (red-intense "#d00000")
+ (green "#006800")
+ (green-warmer "#316500")
+ (green-cooler "#00663f")
+ (green-faint "#2a5045")
+ (green-intense "#008900")
+ (yellow "#6f5500")
+ (yellow-warmer "#884900")
+ (yellow-cooler "#7a4f2f")
+ (yellow-faint "#624416")
+ (yellow-intense "#808000")
+ (blue "#0031a9")
+ (blue-warmer "#3548cf")
+ (blue-cooler "#0000b0")
+ (blue-faint "#003497")
+ (blue-intense "#0000ff")
+ (magenta "#721045")
+ (magenta-warmer "#8f0075")
+ (magenta-cooler "#531ab6")
+ (magenta-faint "#7c318f")
+ (magenta-intense "#dd22dd")
+ (cyan "#005e8b")
+ (cyan-warmer "#3f578f")
+ (cyan-cooler "#005f5f")
+ (cyan-faint "#005077")
+ (cyan-intense "#008899")
+
+;;; Uncommon accent foregrounds
+
+ (rust "#8a290f")
+ (gold "#80601f")
+ (olive "#56692d")
+ (slate "#2f3f83")
+ (indigo "#4a3a8a")
+ (maroon "#731c52")
+ (pink "#7b435c")
+
+;;; Common accent backgrounds
+
+ (bg-red-intense "#ff8f88")
+ (bg-green-intense "#8adf80")
+ (bg-yellow-intense "#f3d000")
+ (bg-blue-intense "#bfc9ff")
+ (bg-magenta-intense "#dfa0f0")
+ (bg-cyan-intense "#a4d5f9")
+
+ (bg-red-subtle "#ffcfbf")
+ (bg-green-subtle "#b3fabf")
+ (bg-yellow-subtle "#fff576")
+ (bg-blue-subtle "#ccdfff")
+ (bg-magenta-subtle "#ffddff")
+ (bg-cyan-subtle "#bfefff")
+
+ (bg-red-nuanced "#fff1f0")
+ (bg-green-nuanced "#ecf7ed")
+ (bg-yellow-nuanced "#fff3da")
+ (bg-blue-nuanced "#f3f3ff")
+ (bg-magenta-nuanced "#fdf0ff")
+ (bg-cyan-nuanced "#ebf6fa")
+
+;;; Uncommon accent backgrounds
+
+ (bg-ochre "#f0e0cc")
+ (bg-lavender "#dfdbfa")
+ (bg-sage "#c0e7d4")
+
+;;; Graphs
+
+ (bg-graph-red-0 "#ef7969")
+ (bg-graph-red-1 "#ffaab4")
+ (bg-graph-green-0 "#2fe029")
+ (bg-graph-green-1 "#75ef30")
+ (bg-graph-yellow-0 "#ffcf00")
+ (bg-graph-yellow-1 "#f9ff00")
+ (bg-graph-blue-0 "#7f90ff")
+ (bg-graph-blue-1 "#9fc6ff")
+ (bg-graph-magenta-0 "#e07fff")
+ (bg-graph-magenta-1 "#fad0ff")
+ (bg-graph-cyan-0 "#70d3f0")
+ (bg-graph-cyan-1 "#afefff")
+
+;;; Special purpose
+
+ (bg-completion "#c0deff")
+ (bg-hover "#b2e4dc")
+ (bg-hover-secondary "#f5d0a0")
+ (bg-hl-line "#dae5ec")
+ (bg-region "#bdbdbd")
+ (fg-region "#000000")
+
+ (bg-char-0 "#7feaff")
+ (bg-char-1 "#ffaaff")
+ (bg-char-2 "#dff000")
+
+ (bg-mode-line-active "#c8c8c8")
+ (fg-mode-line-active "#000000")
+ (border-mode-line-active "#5a5a5a")
+ (bg-mode-line-inactive "#e6e6e6")
+ (fg-mode-line-inactive "#585858")
+ (border-mode-line-inactive "#a3a3a3")
+
+ (modeline-err "#7f0000")
+ (modeline-warning "#5f0070")
+ (modeline-info "#002580")
+
+ (bg-tab-bar "#dfdfdf")
+ (bg-tab-current "#ffffff")
+ (bg-tab-other "#c2c2c2")
+
+;;; Diffs
+
+ (bg-added "#c1f2d1")
+ (bg-added-faint "#d8f8e1")
+ (bg-added-refine "#aee5be")
+ (bg-added-fringe "#6cc06c")
+ (fg-added "#005000")
+ (fg-added-intense "#006700")
+
+ (bg-changed "#ffdfa9")
+ (bg-changed-faint "#ffefbf")
+ (bg-changed-refine "#fac090")
+ (bg-changed-fringe "#d7c20a")
+ (fg-changed "#553d00")
+ (fg-changed-intense "#655000")
+
+ (bg-removed "#ffd8d5")
+ (bg-removed-faint "#ffe9e9")
+ (bg-removed-refine "#f3b5af")
+ (bg-removed-fringe "#d84a4f")
+ (fg-removed "#8f1313")
+ (fg-removed-intense "#aa2222")
+
+ (bg-diff-context "#f3f3f3")
+
+;;; Paren match
+
+ (bg-paren-match "#5fcfff")
+ (bg-paren-expression "#efd3f5")
+ (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+ (fringe bg-dim)
+ (cursor fg-main)
+
+ (keybind blue-cooler)
+ (name magenta)
+ (identifier yellow-cooler)
+
+ (err red)
+ (warning yellow-warmer)
+ (info cyan-cooler)
+
+ (underline-err red-intense)
+ (underline-warning yellow-intense)
+ (underline-note cyan-intense)
+
+ (bg-prominent-err bg-red-intense)
+ (fg-prominent-err fg-main)
+ (bg-prominent-warning bg-yellow-intense)
+ (fg-prominent-warning fg-main)
+ (bg-prominent-note bg-cyan-intense)
+ (fg-prominent-note fg-main)
+
+;;;; Code mappings
+
+ (builtin magenta-warmer)
+ (comment fg-dim)
+ (constant blue-cooler)
+ (docstring green-faint)
+ (docmarkup magenta-faint)
+ (fnname magenta)
+ (keyword magenta-cooler)
+ (preprocessor red-cooler)
+ (string blue-warmer)
+ (type cyan-cooler)
+ (variable cyan)
+ (rx-construct green-cooler)
+ (rx-backslash magenta)
+
+;;;; Accent mappings
+
+ (accent-0 blue)
+ (accent-1 magenta-warmer)
+ (accent-2 cyan)
+ (accent-3 red)
+
+;;;; Button mappings
+
+ (fg-button-active fg-main)
+ (fg-button-inactive fg-dim)
+ (bg-button-active bg-active)
+ (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+ (fg-completion-match-0 blue)
+ (fg-completion-match-1 magenta-warmer)
+ (fg-completion-match-2 cyan)
+ (fg-completion-match-3 red)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+ (date-common cyan)
+ (date-deadline red)
+ (date-event fg-alt)
+ (date-holiday red-cooler)
+ (date-holiday-other blue)
+ (date-now fg-main)
+ (date-range fg-alt)
+ (date-scheduled yellow-warmer)
+ (date-weekday cyan)
+ (date-weekend red-faint)
+
+;;;; Line number mappings
+
+ (fg-line-number-inactive fg-dim)
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive bg-dim)
+ (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+ (fg-link blue-warmer)
+ (bg-link unspecified)
+ (underline-link blue-warmer)
+
+ (fg-link-symbolic cyan)
+ (bg-link-symbolic unspecified)
+ (underline-link-symbolic cyan)
+
+ (fg-link-visited magenta)
+ (bg-link-visited unspecified)
+ (underline-link-visited magenta)
+
+;;;; Mail mappings
+
+ (mail-cite-0 blue-faint)
+ (mail-cite-1 yellow-warmer)
+ (mail-cite-2 cyan-cooler)
+ (mail-cite-3 red-cooler)
+ (mail-part cyan)
+ (mail-recipient magenta-cooler)
+ (mail-subject magenta-warmer)
+ (mail-other magenta-faint)
+
+;;;; Mark mappings
+
+ (bg-mark-delete bg-red-subtle)
+ (fg-mark-delete red)
+ (bg-mark-select bg-cyan-subtle)
+ (fg-mark-select cyan)
+ (bg-mark-other bg-yellow-subtle)
+ (fg-mark-other yellow)
+
+;;;; Prompt mappings
+
+ (fg-prompt cyan-cooler)
+ (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+ (prose-block fg-dim)
+ (prose-code green-cooler)
+ (prose-done green)
+ (prose-macro magenta-cooler)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-tag magenta-faint)
+ (prose-todo red)
+ (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+ (rainbow-0 fg-main)
+ (rainbow-1 magenta-intense)
+ (rainbow-2 cyan-intense)
+ (rainbow-3 red-warmer)
+ (rainbow-4 yellow-intense)
+ (rainbow-5 magenta-cooler)
+ (rainbow-6 green-intense)
+ (rainbow-7 blue-warmer)
+ (rainbow-8 magenta-warmer)
+
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+ (bg-space-err bg-red-intense)
+
+;;;; Terminal mappings
+
+ (bg-term-black "black")
+ (fg-term-black "black")
+ (bg-term-black-bright "gray35")
+ (fg-term-black-bright "gray35")
+
+ (bg-term-red red)
+ (fg-term-red red)
+ (bg-term-red-bright red-warmer)
+ (fg-term-red-bright red-warmer)
+
+ (bg-term-green green)
+ (fg-term-green green)
+ (bg-term-green-bright green-cooler)
+ (fg-term-green-bright green-cooler)
+
+ (bg-term-yellow yellow)
+ (fg-term-yellow yellow)
+ (bg-term-yellow-bright yellow-warmer)
+ (fg-term-yellow-bright yellow-warmer)
+
+ (bg-term-blue blue)
+ (fg-term-blue blue)
+ (bg-term-blue-bright blue-warmer)
+ (fg-term-blue-bright blue-warmer)
+
+ (bg-term-magenta magenta)
+ (fg-term-magenta magenta)
+ (bg-term-magenta-bright magenta-cooler)
+ (fg-term-magenta-bright magenta-cooler)
+
+ (bg-term-cyan cyan)
+ (fg-term-cyan cyan)
+ (bg-term-cyan-bright cyan-cooler)
+ (fg-term-cyan-bright cyan-cooler)
+
+ (bg-term-white "gray65")
+ (fg-term-white "gray65")
+ (bg-term-white-bright "white")
+ (fg-term-white-bright "white")
+
+;;;; Heading mappings
+
+ (fg-heading-0 cyan-cooler)
+ (fg-heading-1 fg-main)
+ (fg-heading-2 yellow-faint)
+ (fg-heading-3 fg-alt)
+ (fg-heading-4 magenta)
+ (fg-heading-5 green-faint)
+ (fg-heading-6 red-faint)
+ (fg-heading-7 cyan-warmer)
+ (fg-heading-8 fg-dim)
+
+ (bg-heading-0 unspecified)
+ (bg-heading-1 unspecified)
+ (bg-heading-2 unspecified)
+ (bg-heading-3 unspecified)
+ (bg-heading-4 unspecified)
+ (bg-heading-5 unspecified)
+ (bg-heading-6 unspecified)
+ (bg-heading-7 unspecified)
+ (bg-heading-8 unspecified)
+
+ (overline-heading-0 unspecified)
+ (overline-heading-1 unspecified)
+ (overline-heading-2 unspecified)
+ (overline-heading-3 unspecified)
+ (overline-heading-4 unspecified)
+ (overline-heading-5 unspecified)
+ (overline-heading-6 unspecified)
+ (overline-heading-7 unspecified)
+ (overline-heading-8 unspecified))
+ "The entire palette of the `modus-operandi' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols. The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.")
+
+ (defcustom modus-operandi-palette-overrides nil
+ "Overrides for `modus-operandi-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red. Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type '(repeat (list symbol (choice symbol string)))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Palette overrides"))
+
+ (modus-themes-theme modus-operandi
+ modus-operandi-palette
+ modus-operandi-palette-overrides)
+
+ (provide-theme 'modus-operandi))
+
+;;; modus-operandi-theme.el ends here
diff --git a/elpa/modus-themes-4.3.0/modus-operandi-tinted-theme.el b/elpa/modus-themes-4.3.0/modus-operandi-tinted-theme.el
@@ -0,0 +1,483 @@
+;;; modus-operandi-tinted-theme.el --- Elegant, highly legible theme with a light ochre background -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA). Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(eval-and-compile
+ (unless (and (fboundp 'require-theme)
+ load-file-name
+ (equal (file-name-directory load-file-name)
+ (expand-file-name "themes/" data-directory))
+ (require-theme 'modus-themes t))
+ (require 'modus-themes))
+
+;;;###theme-autoload
+ (deftheme modus-operandi-tinted
+ "Elegant, highly legible theme with a light ochre background.
+Conforms with the highest legibility standard for color contrast
+between background and foreground in any given piece of text,
+which corresponds to a minimum contrast in relative luminance of
+7:1 (WCAG AAA standard)."
+ :background-mode 'light
+ :kind 'color-scheme
+ :family 'modus)
+
+ (defconst modus-operandi-tinted-palette
+ '(
+;;; Basic values
+
+ (bg-main "#fbf7f0")
+ (bg-dim "#efe9dd")
+ (fg-main "#000000")
+ (fg-dim "#595959")
+ (fg-alt "#193668")
+ (bg-active "#c9b9b0")
+ (bg-inactive "#dfd5cf")
+ (border "#9f9690")
+
+;;; Common accent foregrounds
+
+ (red "#a60000")
+ (red-warmer "#972500")
+ (red-cooler "#a0132f")
+ (red-faint "#7f0000")
+ (red-intense "#d00000")
+ (green "#006800")
+ (green-warmer "#316500")
+ (green-cooler "#00663f")
+ (green-faint "#2a5045")
+ (green-intense "#008900")
+ (yellow "#6f5500")
+ (yellow-warmer "#884900")
+ (yellow-cooler "#7a4f2f")
+ (yellow-faint "#624416")
+ (yellow-intense "#808000")
+ (blue "#0031a9")
+ (blue-warmer "#3548cf")
+ (blue-cooler "#0000b0")
+ (blue-faint "#003497")
+ (blue-intense "#0000ff")
+ (magenta "#721045")
+ (magenta-warmer "#8f0075")
+ (magenta-cooler "#531ab6")
+ (magenta-faint "#7c318f")
+ (magenta-intense "#dd22dd")
+ (cyan "#005e8b")
+ (cyan-warmer "#3f578f")
+ (cyan-cooler "#005f5f")
+ (cyan-faint "#005077")
+ (cyan-intense "#008899")
+
+;;; Uncommon accent foregrounds
+
+ (rust "#8a290f")
+ (gold "#80601f")
+ (olive "#56692d")
+ (slate "#2f3f83")
+ (indigo "#4a3a8a")
+ (maroon "#731c52")
+ (pink "#7b435c")
+
+;;; Common accent backgrounds
+
+ (bg-red-intense "#ff8f88")
+ (bg-green-intense "#8adf80")
+ (bg-yellow-intense "#f3d000")
+ (bg-blue-intense "#bfc9ff")
+ (bg-magenta-intense "#dfa0f0")
+ (bg-cyan-intense "#a4d5f9")
+
+ (bg-red-subtle "#ffcfbf")
+ (bg-green-subtle "#b3fabf")
+ (bg-yellow-subtle "#fff576")
+ (bg-blue-subtle "#ccdfff")
+ (bg-magenta-subtle "#ffddff")
+ (bg-cyan-subtle "#bfefff")
+
+ (bg-red-nuanced "#ffe8f0")
+ (bg-green-nuanced "#e0f5e0")
+ (bg-yellow-nuanced "#f9ead0")
+ (bg-blue-nuanced "#ebebff")
+ (bg-magenta-nuanced "#f6e7ff")
+ (bg-cyan-nuanced "#e1f3fc")
+
+;;; Uncommon accent backgrounds
+
+ (bg-ochre "#f0e0cc")
+ (bg-lavender "#dfdbfa")
+ (bg-sage "#c0e7d4")
+
+;;; Graphs
+
+ (bg-graph-red-0 "#ef7969")
+ (bg-graph-red-1 "#ffaab4")
+ (bg-graph-green-0 "#2fe029")
+ (bg-graph-green-1 "#75ef30")
+ (bg-graph-yellow-0 "#ffcf00")
+ (bg-graph-yellow-1 "#f9ff00")
+ (bg-graph-blue-0 "#7f90ff")
+ (bg-graph-blue-1 "#9fc6ff")
+ (bg-graph-magenta-0 "#e07fff")
+ (bg-graph-magenta-1 "#fad0ff")
+ (bg-graph-cyan-0 "#70d3f0")
+ (bg-graph-cyan-1 "#afefff")
+
+;;; Special purpose
+
+ (bg-completion "#f0c1cf")
+ (bg-hover "#b2e4dc")
+ (bg-hover-secondary "#f5d0a0")
+ (bg-hl-line "#f1d5d0")
+ (bg-region "#c2bcb5")
+ (fg-region "#000000")
+
+ (bg-char-0 "#7feaff")
+ (bg-char-1 "#ffaaff")
+ (bg-char-2 "#dff000")
+
+ (bg-mode-line-active "#cab9b2")
+ (fg-mode-line-active "#000000")
+ (border-mode-line-active "#545454")
+ (bg-mode-line-inactive "#dfd9cf")
+ (fg-mode-line-inactive "#585858")
+ (border-mode-line-inactive "#a59a94")
+
+ (modeline-err "#7f0000")
+ (modeline-warning "#5f0070")
+ (modeline-info "#002580")
+
+ (bg-tab-bar "#e0d4ce")
+ (bg-tab-current "#fbf7f0")
+ (bg-tab-other "#c8b8b2")
+
+;;; Diffs
+
+ (bg-added "#c3ebc1")
+ (bg-added-faint "#dcf8d1")
+ (bg-added-refine "#acd6a5")
+ (bg-added-fringe "#6cc06c")
+ (fg-added "#005000")
+ (fg-added-intense "#006700")
+
+ (bg-changed "#ffdfa9")
+ (bg-changed-faint "#ffefbf")
+ (bg-changed-refine "#fac090")
+ (bg-changed-fringe "#c0b200")
+ (fg-changed "#553d00")
+ (fg-changed-intense "#655000")
+
+ (bg-removed "#f4d0cf")
+ (bg-removed-faint "#ffe9e5")
+ (bg-removed-refine "#f3b5a7")
+ (bg-removed-fringe "#d84a4f")
+ (fg-removed "#8f1313")
+ (fg-removed-intense "#aa2222")
+
+ (bg-diff-context "#efe9df")
+
+;;; Paren match
+
+ (bg-paren-match "#7fdfcf")
+ (bg-paren-expression "#efd3f5")
+ (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+ (fringe bg-dim)
+ (cursor red)
+
+ (keybind blue-cooler)
+ (name magenta)
+ (identifier yellow-cooler)
+
+ (err red)
+ (warning yellow-warmer)
+ (info cyan-cooler)
+
+ (underline-err red-intense)
+ (underline-warning yellow-intense)
+ (underline-note cyan-intense)
+
+ (bg-prominent-err bg-red-intense)
+ (fg-prominent-err fg-main)
+ (bg-prominent-warning bg-yellow-intense)
+ (fg-prominent-warning fg-main)
+ (bg-prominent-note bg-cyan-intense)
+ (fg-prominent-note fg-main)
+
+;;;; Code mappings
+
+ (builtin magenta-warmer)
+ (comment red-faint)
+ (constant blue-cooler)
+ (docstring green-faint)
+ (docmarkup magenta-faint)
+ (fnname magenta)
+ (keyword magenta-cooler)
+ (preprocessor red-cooler)
+ (string blue-warmer)
+ (type cyan-cooler)
+ (variable cyan)
+ (rx-construct green-cooler)
+ (rx-backslash magenta)
+
+;;;; Accent mappings
+
+ (accent-0 blue)
+ (accent-1 magenta-warmer)
+ (accent-2 cyan)
+ (accent-3 red)
+
+;;;; Button mappings
+
+ (fg-button-active fg-main)
+ (fg-button-inactive fg-dim)
+ (bg-button-active bg-active)
+ (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+ (fg-completion-match-0 blue)
+ (fg-completion-match-1 magenta-warmer)
+ (fg-completion-match-2 cyan)
+ (fg-completion-match-3 red)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+ (date-common cyan)
+ (date-deadline red)
+ (date-event fg-alt)
+ (date-holiday red-cooler)
+ (date-holiday-other blue)
+ (date-now fg-main)
+ (date-range fg-alt)
+ (date-scheduled yellow-warmer)
+ (date-weekday cyan)
+ (date-weekend red-faint)
+
+;;;; Line number mappings
+
+ (fg-line-number-inactive fg-dim)
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive bg-dim)
+ (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+ (fg-link blue-warmer)
+ (bg-link unspecified)
+ (underline-link blue-warmer)
+
+ (fg-link-symbolic cyan)
+ (bg-link-symbolic unspecified)
+ (underline-link-symbolic cyan)
+
+ (fg-link-visited magenta)
+ (bg-link-visited unspecified)
+ (underline-link-visited magenta)
+
+;;;; Mail mappings
+
+ (mail-cite-0 blue-faint)
+ (mail-cite-1 yellow-warmer)
+ (mail-cite-2 cyan-cooler)
+ (mail-cite-3 red-cooler)
+ (mail-part cyan)
+ (mail-recipient magenta-cooler)
+ (mail-subject magenta-warmer)
+ (mail-other magenta-faint)
+
+;;;; Mark mappings
+
+ (bg-mark-delete bg-red-subtle)
+ (fg-mark-delete red)
+ (bg-mark-select bg-cyan-subtle)
+ (fg-mark-select cyan)
+ (bg-mark-other bg-yellow-subtle)
+ (fg-mark-other yellow)
+
+;;;; Prompt mappings
+
+ (fg-prompt cyan-cooler)
+ (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+ (prose-block fg-dim)
+ (prose-code green-cooler)
+ (prose-done green)
+ (prose-macro magenta-cooler)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-tag magenta-faint)
+ (prose-todo red)
+ (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+ (rainbow-0 fg-main)
+ (rainbow-1 magenta-intense)
+ (rainbow-2 cyan-intense)
+ (rainbow-3 red-warmer)
+ (rainbow-4 yellow-intense)
+ (rainbow-5 magenta-cooler)
+ (rainbow-6 green-intense)
+ (rainbow-7 blue-warmer)
+ (rainbow-8 magenta-warmer)
+
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+ (bg-space-err bg-red-intense)
+
+;;;; Terminal mappings
+
+ (bg-term-black "black")
+ (fg-term-black "black")
+ (bg-term-black-bright "gray35")
+ (fg-term-black-bright "gray35")
+
+ (bg-term-red red)
+ (fg-term-red red)
+ (bg-term-red-bright red-warmer)
+ (fg-term-red-bright red-warmer)
+
+ (bg-term-green green)
+ (fg-term-green green)
+ (bg-term-green-bright green-cooler)
+ (fg-term-green-bright green-cooler)
+
+ (bg-term-yellow yellow)
+ (fg-term-yellow yellow)
+ (bg-term-yellow-bright yellow-warmer)
+ (fg-term-yellow-bright yellow-warmer)
+
+ (bg-term-blue blue)
+ (fg-term-blue blue)
+ (bg-term-blue-bright blue-warmer)
+ (fg-term-blue-bright blue-warmer)
+
+ (bg-term-magenta magenta)
+ (fg-term-magenta magenta)
+ (bg-term-magenta-bright magenta-cooler)
+ (fg-term-magenta-bright magenta-cooler)
+
+ (bg-term-cyan cyan)
+ (fg-term-cyan cyan)
+ (bg-term-cyan-bright cyan-cooler)
+ (fg-term-cyan-bright cyan-cooler)
+
+ (bg-term-white "gray65")
+ (fg-term-white "gray65")
+ (bg-term-white-bright "white")
+ (fg-term-white-bright "white")
+
+;;;; Heading mappings
+
+ (fg-heading-0 cyan-cooler)
+ (fg-heading-1 fg-main)
+ (fg-heading-2 yellow-faint)
+ (fg-heading-3 fg-alt)
+ (fg-heading-4 magenta)
+ (fg-heading-5 green-faint)
+ (fg-heading-6 red-faint)
+ (fg-heading-7 cyan-warmer)
+ (fg-heading-8 fg-dim)
+
+ (bg-heading-0 unspecified)
+ (bg-heading-1 unspecified)
+ (bg-heading-2 unspecified)
+ (bg-heading-3 unspecified)
+ (bg-heading-4 unspecified)
+ (bg-heading-5 unspecified)
+ (bg-heading-6 unspecified)
+ (bg-heading-7 unspecified)
+ (bg-heading-8 unspecified)
+
+ (overline-heading-0 unspecified)
+ (overline-heading-1 unspecified)
+ (overline-heading-2 unspecified)
+ (overline-heading-3 unspecified)
+ (overline-heading-4 unspecified)
+ (overline-heading-5 unspecified)
+ (overline-heading-6 unspecified)
+ (overline-heading-7 unspecified)
+ (overline-heading-8 unspecified))
+ "The entire palette of the `modus-operandi-tinted' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols. The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.")
+
+ (defcustom modus-operandi-tinted-palette-overrides nil
+ "Overrides for `modus-operandi-tinted-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red. Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type '(repeat (list symbol (choice symbol string)))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Palette overrides"))
+
+ (modus-themes-theme modus-operandi-tinted
+ modus-operandi-tinted-palette
+ modus-operandi-tinted-palette-overrides)
+
+ (provide-theme 'modus-operandi-tinted))
+
+;;; modus-operandi-tinted-theme.el ends here
diff --git a/elpa/modus-themes-4.3.0/modus-operandi-tritanopia-theme.el b/elpa/modus-themes-4.3.0/modus-operandi-tritanopia-theme.el
@@ -0,0 +1,486 @@
+;;; modus-operandi-tritanopia-theme.el --- Tritanopia-optimized theme with a white background -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+;; Keywords: faces, theme, accessibility
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA). Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(eval-and-compile
+ (unless (and (fboundp 'require-theme)
+ load-file-name
+ (equal (file-name-directory load-file-name)
+ (expand-file-name "themes/" data-directory))
+ (require-theme 'modus-themes t))
+ (require 'modus-themes))
+
+;;;###theme-autoload
+ (deftheme modus-operandi-tritanopia
+ "Tritanopia-optimized theme with a white background.
+This variant is optimized for users with blue-yellow color
+deficiency (tritanopia). It conforms with the highest
+legibility standard for color contrast between background and
+foreground in any given piece of text, which corresponds to a
+minimum contrast in relative luminance of 7:1 (WCAG AAA
+standard)."
+ :background-mode 'light
+ :kind 'color-scheme
+ :family 'modus)
+
+ (defconst modus-operandi-tritanopia-palette
+ '(
+;;; Basic values
+
+ (bg-main "#ffffff")
+ (bg-dim "#f2f2f2")
+ (fg-main "#000000")
+ (fg-dim "#595959")
+ (fg-alt "#193668")
+ (bg-active "#c4c4c4")
+ (bg-inactive "#e0e0e0")
+ (border "#9f9f9f")
+
+;;; Common accent foregrounds
+
+ (red "#a60000")
+ (red-warmer "#b21100")
+ (red-cooler "#a0132f")
+ (red-faint "#702000")
+ (red-intense "#d00000")
+ (green "#006800")
+ (green-warmer "#316500")
+ (green-cooler "#00663f")
+ (green-faint "#2a5045")
+ (green-intense "#008900")
+ (yellow "#695500")
+ (yellow-warmer "#973300")
+ (yellow-cooler "#77492f")
+ (yellow-faint "#624416")
+ (yellow-intense "#808000")
+ (blue "#0031a9")
+ (blue-warmer "#3548cf")
+ (blue-cooler "#0000b0")
+ (blue-faint "#003497")
+ (blue-intense "#0000ff")
+ (magenta "#721045")
+ (magenta-warmer "#8f0075")
+ (magenta-cooler "#531ab6")
+ (magenta-faint "#7c318f")
+ (magenta-intense "#cd22bd")
+ (cyan "#005e8b")
+ (cyan-warmer "#3f578f")
+ (cyan-cooler "#005f5f")
+ (cyan-faint "#004f5f")
+ (cyan-intense "#008899")
+
+;;; Uncommon accent foregrounds
+
+ (rust "#8a290f")
+ (gold "#80601f")
+ (olive "#56692d")
+ (slate "#2f3f83")
+ (indigo "#4a3a8a")
+ (maroon "#731c52")
+ (pink "#7b435c")
+
+;;; Common accent backgrounds
+
+ (bg-red-intense "#ff8f88")
+ (bg-green-intense "#8adf80")
+ (bg-yellow-intense "#f3d000")
+ (bg-blue-intense "#bfc9ff")
+ (bg-magenta-intense "#dfa0f0")
+ (bg-cyan-intense "#a4d5f9")
+
+ (bg-red-subtle "#ffcfbf")
+ (bg-green-subtle "#b3fabf")
+ (bg-yellow-subtle "#fff576")
+ (bg-blue-subtle "#ccdfff")
+ (bg-magenta-subtle "#ffddff")
+ (bg-cyan-subtle "#bfefff")
+
+ (bg-red-nuanced "#fff1f0")
+ (bg-green-nuanced "#ecf7ed")
+ (bg-yellow-nuanced "#fff3da")
+ (bg-blue-nuanced "#f3f3ff")
+ (bg-magenta-nuanced "#fdf0ff")
+ (bg-cyan-nuanced "#ebf6fa")
+
+;;; Uncommon accent backgrounds
+
+ (bg-ochre "#f0e0cc")
+ (bg-lavender "#dfdbfa")
+ (bg-sage "#c0e7d4")
+
+;;; Graphs
+
+ (bg-graph-red-0 "#ef7969")
+ (bg-graph-red-1 "#ffaab4")
+ (bg-graph-green-0 "#70c3b0")
+ (bg-graph-green-1 "#a3dfe5")
+ (bg-graph-yellow-0 "#d99f9f")
+ (bg-graph-yellow-1 "#ffb58f")
+ (bg-graph-blue-0 "#80a0df")
+ (bg-graph-blue-1 "#9fcaff")
+ (bg-graph-magenta-0 "#efafcf")
+ (bg-graph-magenta-1 "#ffdaef")
+ (bg-graph-cyan-0 "#7fd3ed")
+ (bg-graph-cyan-1 "#afefff")
+
+;;; Special purpose
+
+ (bg-completion "#afdfef")
+ (bg-hover "#ffafbc")
+ (bg-hover-secondary "#9fdfff")
+ (bg-hl-line "#dfeaec")
+ (bg-region "#bdbdbd")
+ (fg-region "#000000")
+
+ (bg-char-0 "#ff908f")
+ (bg-char-1 "#bfbfff")
+ (bg-char-2 "#5fcfdf")
+
+ (bg-mode-line-active "#afe0f2")
+ (fg-mode-line-active "#0f0f0f")
+ (border-mode-line-active "#2f4f44")
+ (bg-mode-line-inactive "#e6e6e6")
+ (fg-mode-line-inactive "#585858")
+ (border-mode-line-inactive "#a3a3a3")
+
+ (modeline-err "#8f0000")
+ (modeline-warning "#6f306f")
+ (modeline-info "#00445f")
+
+ (bg-tab-bar "#dfdfdf")
+ (bg-tab-current "#ffffff")
+ (bg-tab-other "#c2c2c2")
+
+;;; Diffs
+
+ (bg-added "#b5e7ff")
+ (bg-added-faint "#c6f6ff")
+ (bg-added-refine "#9adcef")
+ (bg-added-fringe "#1782cc")
+ (fg-added "#005079")
+ (fg-added-intense "#0043aa")
+
+ (bg-changed "#eecfdf")
+ (bg-changed-faint "#f0dde5")
+ (bg-changed-refine "#e0b0d0")
+ (bg-changed-fringe "#9f6ab0")
+ (fg-changed "#6f1343")
+ (fg-changed-intense "#7f0f9f")
+
+ (bg-removed "#ffd8d5")
+ (bg-removed-faint "#ffe9e9")
+ (bg-removed-refine "#f3b5af")
+ (bg-removed-fringe "#d84a4f")
+ (fg-removed "#8f1313")
+ (fg-removed-intense "#aa2222")
+
+ (bg-diff-context "#f3f3f3")
+
+;;; Paren match
+
+ (bg-paren-match "#5fcfff")
+ (bg-paren-expression "#efd3f5")
+ (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+ (fringe bg-dim)
+ (cursor red-intense)
+
+ (keybind red)
+ (name red-cooler)
+ (identifier red-faint)
+
+ (err red-warmer)
+ (warning magenta)
+ (info cyan)
+
+ (underline-err red-intense)
+ (underline-warning magenta-intense)
+ (underline-note cyan-intense)
+
+ (bg-prominent-err bg-red-intense)
+ (fg-prominent-err fg-main)
+ (bg-prominent-warning bg-magenta-intense)
+ (fg-prominent-warning fg-main)
+ (bg-prominent-note bg-cyan-intense)
+ (fg-prominent-note fg-main)
+
+;;;; Code mappings
+
+ (builtin magenta)
+ (comment red-faint)
+ (constant green-cooler)
+ (docstring fg-alt)
+ (docmarkup magenta-faint)
+ (fnname cyan-warmer)
+ (keyword red-cooler)
+ (preprocessor red-warmer)
+ (string cyan)
+ (type blue-warmer)
+ (variable cyan-cooler)
+ (rx-construct red)
+ (rx-backslash magenta)
+
+;;;; Accent mappings
+
+ (accent-0 cyan)
+ (accent-1 red-warmer)
+ (accent-2 cyan-cooler)
+ (accent-3 magenta)
+
+;;;; Button mappings
+
+ (fg-button-active fg-main)
+ (fg-button-inactive fg-dim)
+ (bg-button-active bg-active)
+ (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+ (fg-completion-match-0 cyan)
+ (fg-completion-match-1 red-warmer)
+ (fg-completion-match-2 magenta)
+ (fg-completion-match-3 cyan-cooler)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+ (date-common cyan-cooler)
+ (date-deadline red)
+ (date-event fg-alt)
+ (date-holiday red)
+ (date-holiday-other cyan)
+ (date-now fg-main)
+ (date-range fg-alt)
+ (date-scheduled magenta)
+ (date-weekday cyan)
+ (date-weekend red-faint)
+
+;;;; Line number mappings
+
+ (fg-line-number-inactive fg-dim)
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive bg-dim)
+ (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+ (fg-link cyan)
+ (bg-link unspecified)
+ (underline-link cyan)
+
+ (fg-link-symbolic cyan-cooler)
+ (bg-link-symbolic unspecified)
+ (underline-link-symbolic cyan-cooler)
+
+ (fg-link-visited magenta)
+ (bg-link-visited unspecified)
+ (underline-link-visited magenta)
+
+;;;; Mail mappings
+
+ (mail-cite-0 cyan-faint)
+ (mail-cite-1 red-faint)
+ (mail-cite-2 magenta-warmer)
+ (mail-cite-3 cyan-warmer)
+ (mail-part cyan-cooler)
+ (mail-recipient cyan)
+ (mail-subject red-cooler)
+ (mail-other cyan)
+
+;;;; Mark mappings
+
+ (bg-mark-delete bg-red-subtle)
+ (fg-mark-delete red)
+ (bg-mark-select bg-cyan-subtle)
+ (fg-mark-select cyan)
+ (bg-mark-other bg-magenta-subtle)
+ (fg-mark-other magenta)
+
+;;;; Prompt mappings
+
+ (fg-prompt cyan-cooler)
+ (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+ (prose-block fg-dim)
+ (prose-code cyan)
+ (prose-done cyan)
+ (prose-macro red-warmer)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-tag fg-alt)
+ (prose-todo red)
+ (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+ (rainbow-0 cyan)
+ (rainbow-1 red)
+ (rainbow-2 cyan-warmer)
+ (rainbow-3 red-cooler)
+ (rainbow-4 cyan-cooler)
+ (rainbow-5 magenta)
+ (rainbow-6 cyan-faint)
+ (rainbow-7 magenta-faint)
+ (rainbow-8 red-faint)
+
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+ (bg-space-err bg-red-intense)
+
+;;;; Terminal mappings
+
+ (bg-term-black "black")
+ (fg-term-black "black")
+ (bg-term-black-bright "gray35")
+ (fg-term-black-bright "gray35")
+
+ (bg-term-red red)
+ (fg-term-red red)
+ (bg-term-red-bright red-warmer)
+ (fg-term-red-bright red-warmer)
+
+ (bg-term-green green)
+ (fg-term-green green)
+ (bg-term-green-bright green-cooler)
+ (fg-term-green-bright green-cooler)
+
+ (bg-term-yellow yellow)
+ (fg-term-yellow yellow)
+ (bg-term-yellow-bright yellow-warmer)
+ (fg-term-yellow-bright yellow-warmer)
+
+ (bg-term-blue blue)
+ (fg-term-blue blue)
+ (bg-term-blue-bright blue-warmer)
+ (fg-term-blue-bright blue-warmer)
+
+ (bg-term-magenta magenta)
+ (fg-term-magenta magenta)
+ (bg-term-magenta-bright magenta-cooler)
+ (fg-term-magenta-bright magenta-cooler)
+
+ (bg-term-cyan cyan)
+ (fg-term-cyan cyan)
+ (bg-term-cyan-bright cyan-cooler)
+ (fg-term-cyan-bright cyan-cooler)
+
+ (bg-term-white "gray65")
+ (fg-term-white "gray65")
+ (bg-term-white-bright "white")
+ (fg-term-white-bright "white")
+
+;;;; Heading mappings
+
+ (fg-heading-0 cyan-cooler)
+ (fg-heading-1 fg-main)
+ (fg-heading-2 red-faint)
+ (fg-heading-3 cyan-faint)
+ (fg-heading-4 magenta)
+ (fg-heading-5 green-faint)
+ (fg-heading-6 magenta-faint)
+ (fg-heading-7 cyan-warmer)
+ (fg-heading-8 fg-dim)
+
+ (bg-heading-0 unspecified)
+ (bg-heading-1 unspecified)
+ (bg-heading-2 unspecified)
+ (bg-heading-3 unspecified)
+ (bg-heading-4 unspecified)
+ (bg-heading-5 unspecified)
+ (bg-heading-6 unspecified)
+ (bg-heading-7 unspecified)
+ (bg-heading-8 unspecified)
+
+ (overline-heading-0 unspecified)
+ (overline-heading-1 unspecified)
+ (overline-heading-2 unspecified)
+ (overline-heading-3 unspecified)
+ (overline-heading-4 unspecified)
+ (overline-heading-5 unspecified)
+ (overline-heading-6 unspecified)
+ (overline-heading-7 unspecified)
+ (overline-heading-8 unspecified))
+ "The entire palette of the `modus-operandi-tritanopia' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols. The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.")
+
+ (defcustom modus-operandi-tritanopia-palette-overrides nil
+ "Overrides for `modus-operandi-tritanopia-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red. Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type '(repeat (list symbol (choice symbol string)))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Palette overrides"))
+
+ (modus-themes-theme modus-operandi-tritanopia
+ modus-operandi-tritanopia-palette
+ modus-operandi-tritanopia-palette-overrides)
+
+ (provide-theme 'modus-operandi-tritanopia))
+
+;;; modus-operandi-tritanopia-theme.el ends here
diff --git a/elpa/modus-themes-4.3.0/modus-themes-autoloads.el b/elpa/modus-themes-4.3.0/modus-themes-autoloads.el
@@ -0,0 +1,60 @@
+;;; modus-themes-autoloads.el --- automatically extracted autoloads (do not edit) -*- lexical-binding: t -*-
+;; Generated by the `loaddefs-generate' function.
+
+;; This file is part of GNU Emacs.
+
+;;; Code:
+
+(add-to-list 'load-path (or (and load-file-name (directory-file-name (file-name-directory load-file-name))) (car load-path)))
+
+
+
+;;; Generated autoloads from modus-themes.el
+
+(autoload 'modus-themes-contrast "modus-themes" "\
+Measure WCAG contrast ratio between C1 and C2.
+C1 and C2 are color values written in hexadecimal RGB.
+
+(fn C1 C2)")
+(autoload 'modus-themes-select "modus-themes" "\
+Load a Modus THEME using minibuffer completion.
+Run `modus-themes-after-load-theme-hook' after loading the theme.
+Disable other themes per `modus-themes-disable-other-themes'.
+
+(fn THEME)" t)
+(autoload 'modus-themes-toggle "modus-themes" "\
+Toggle between the two `modus-themes-to-toggle'.
+If `modus-themes-to-toggle' does not specify two Modus themes,
+prompt with completion for a theme among our collection (this is
+practically the same as the `modus-themes-select' command).
+
+Run `modus-themes-after-load-theme-hook' after loading the theme.
+Disable other themes per `modus-themes-disable-other-themes'." t)
+(autoload 'modus-themes-theme "modus-themes" "\
+Bind NAME's color PALETTE around face specs and variables.
+Face specifications are passed to `custom-theme-set-faces'.
+While variables are handled by `custom-theme-set-variables'.
+Those are stored in `modus-themes-faces' and
+`modus-themes-custom-variables' respectively.
+
+Optional OVERRIDES are appended to PALETTE, overriding
+corresponding entries.
+
+(fn NAME PALETTE &optional OVERRIDES)" nil t)
+(function-put 'modus-themes-theme 'lisp-indent-function 0)
+(when load-file-name (let ((dir (file-name-directory load-file-name))) (unless (equal dir (expand-file-name "themes/" data-directory)) (add-to-list 'custom-theme-load-path dir))))
+(register-definition-prefixes "modus-themes" '("modus-themes-"))
+
+;;; End of scraped data
+
+(provide 'modus-themes-autoloads)
+
+;; Local Variables:
+;; version-control: never
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; no-native-compile: t
+;; coding: utf-8-emacs-unix
+;; End:
+
+;;; modus-themes-autoloads.el ends here
diff --git a/elpa/modus-themes-4.3.0/modus-themes-pkg.el b/elpa/modus-themes-4.3.0/modus-themes-pkg.el
@@ -0,0 +1,2 @@
+;; Generated package description from modus-themes.el -*- no-byte-compile: t -*-
+(define-package "modus-themes" "4.3.0" "Elegant, highly legible and customizable themes" '((emacs "27.1")) :commit "fe08a02c4c0501a984b15af3f8c3c5e4769b93ad" :authors '(("Protesilaos Stavrou" . "info@protesilaos.com")) :maintainer '("Modus-Themes Development" . "~protesilaos/modus-themes@lists.sr.ht") :keywords '("faces" "theme" "accessibility") :url "https://git.sr.ht/~protesilaos/modus-themes")
diff --git a/elpa/modus-themes-4.3.0/modus-themes.el b/elpa/modus-themes-4.3.0/modus-themes.el
@@ -0,0 +1,4237 @@
+;;; modus-themes.el --- Elegant, highly legible and customizable themes -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+;; Version: 4.3.0
+;; Package-Requires: ((emacs "27.1"))
+;; Keywords: faces, theme, accessibility
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA). Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(eval-when-compile
+ (require 'cl-lib)
+ (require 'subr-x))
+
+(defgroup modus-themes ()
+ "User options for the Modus themes.
+The Modus themes conform with the WCAG AAA standard for color
+contrast between background and foreground combinations (a
+minimum contrast of 7:1---the highest standard of its kind).
+
+The Modus themes collection includes themes that are optimized
+for people with red-green or blue-yellow color
+deficiency (deuteranopia or tritanopia, respectively)."
+ :group 'faces
+ :link '(info-link "(modus-themes) Top")
+ :link '(url-link :tag "Homepage" "https://protesilaos.com/emacs/modus-themes")
+ :link '(url-link :tag "Sample pictures" "https://protesilaos.com/emacs/modus-themes-pictures")
+ :prefix "modus-themes-"
+ :tag "Modus Themes")
+
+(defgroup modus-themes-faces ()
+ "Faces defined by the Modus themes."
+ :group 'modus-themes
+ :link '(info-link "(modus-themes) Top")
+ :link '(url-link :tag "Homepage" "https://protesilaos.com/emacs/modus-themes")
+ :link '(url-link :tag "Sample pictures" "https://protesilaos.com/emacs/modus-themes-pictures")
+ :prefix "modus-themes-"
+ :tag "Modus Themes Faces")
+
+(make-obsolete-variable 'modus-themes-operandi-colors nil "4.0.0")
+(make-obsolete-variable 'modus-themes-vivendi-colors nil "4.0.0")
+(make-obsolete-variable 'modus-themes-version nil "4.0.0")
+(make-obsolete 'modus-themes-report-bug nil "4.0.0")
+
+
+
+;;;; Custom faces
+
+;; These faces are used internally to ensure consistency between various
+;; groups and to streamline the evaluation of relevant customization
+;; options.
+
+(dolist (color '( red green blue yellow magenta cyan
+ red-warmer green-warmer blue-warmer yellow-warmer magenta-warmer cyan-warmer
+ red-cooler green-cooler blue-cooler yellow-cooler magenta-cooler cyan-cooler
+ red-faint green-faint blue-faint yellow-faint magenta-faint cyan-faint
+ red-intense green-intense blue-intense yellow-intense magenta-intense cyan-intense))
+ (custom-declare-face
+ (intern (format "modus-themes-fg-%s" color))
+ nil (format "Face with %s foreground." color)
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces))
+
+(dolist (color '(red green yellow blue magenta cyan))
+ (custom-declare-face
+ (intern (format "modus-themes-nuanced-%s" color))
+ nil (format "Nuanced %s background." color)
+ :package-version '(modus-themes . "4.1.0")
+ :version "30.1"
+ :group 'modus-themes-faces))
+
+(dolist (color '(red green yellow blue magenta cyan))
+ (custom-declare-face
+ (intern (format "modus-themes-subtle-%s" color))
+ nil (format "Subtle %s background." color)
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces))
+
+(dolist (color '(red green yellow blue magenta cyan))
+ (custom-declare-face
+ (intern (format "modus-themes-intense-%s" color))
+ nil (format "Intense %s background." color)
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces))
+
+(dolist (scope '(alt del sel))
+ (custom-declare-face
+ (intern (format "modus-themes-mark-%s" scope))
+ nil (format "Mark of type %s." scope)
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces))
+
+(dolist (scope '(note warning error))
+ (custom-declare-face
+ (intern (format "modus-themes-lang-%s" scope))
+ nil (format "Linter or spell check of type %s." scope)
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces))
+
+(dolist (scope '(note warning error))
+ (custom-declare-face
+ (intern (format "modus-themes-prominent-%s" scope))
+ nil (format "Prominent notification of type %s." scope)
+ :package-version '(modus-themes . "4.2.0")
+ :version "30.1"
+ :group 'modus-themes-faces))
+
+(dolist (scope '(current lazy))
+ (custom-declare-face
+ (intern (format "modus-themes-search-%s" scope))
+ nil (format "Search of type %s." scope)
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces))
+
+(define-obsolete-variable-alias
+ 'modus-themes-search-success
+ 'modus-themes-search-current
+ "4.0.0")
+
+(define-obsolete-variable-alias
+ 'modus-themes-search-success-lazy
+ 'modus-themes-search-lazy
+ "4.0.0")
+
+(dolist (scope '(code macro verbatim))
+ (custom-declare-face
+ (intern (format "modus-themes-prose-%s" scope))
+ nil (format "Construct of type %s for prose." scope)
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces))
+
+(define-obsolete-variable-alias
+ 'modus-themes-markup-code
+ 'modus-themes-prose-code
+ "4.0.0")
+
+(define-obsolete-variable-alias
+ 'modus-themes-markup-macro
+ 'modus-themes-prose-macro
+ "4.0.0")
+
+(define-obsolete-variable-alias
+ 'modus-themes-markup-verbatim
+ 'modus-themes-prose-verbatim
+ "4.0.0")
+
+(dotimes (n 9)
+ (custom-declare-face
+ (intern (format "modus-themes-heading-%d" n))
+ nil (format "Level %d heading." n)
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces))
+
+(defface modus-themes-bold nil
+ "Generic face for applying a conditional bold weight.
+This behaves in accordance with `modus-themes-bold-constructs'."
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces)
+
+(defface modus-themes-slant nil
+ "Generic face for applying a conditional slant (italics).
+This behaves in accordance with `modus-themes-italic-constructs'."
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces)
+
+(defface modus-themes-key-binding nil
+ "Face for key bindings."
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces)
+
+(defface modus-themes-fixed-pitch nil
+ "Face for `fixed-pitch' if `modus-themes-mixed-fonts' is non-nil."
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces)
+
+(defface modus-themes-ui-variable-pitch nil
+ "Face for `variable-pitch' if `modus-themes-variable-pitch-ui' is non-nil."
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces)
+
+(defface modus-themes-reset-soft nil
+ "Generic face to set most face properties to nil.
+
+This is intended to be inherited by faces that should not retain
+properties from their context (e.g. an overlay over an underlined
+text should not be underlined as well) yet still blend in."
+ :group 'modus-themes-faces)
+
+(defface modus-themes-prompt nil
+ "Generic face for command prompts."
+ :group 'modus-themes-faces)
+
+(defface modus-themes-completion-selected nil
+ "Face for current selection in completion UIs."
+ :group 'modus-themes-faces)
+
+(defface modus-themes-button nil
+ "Face for graphical buttons."
+ :group 'modus-themes-faces)
+
+(dotimes (n 4)
+ (custom-declare-face
+ (intern (format "modus-themes-completion-match-%d" n))
+ nil (format "Completions match level %d." n)
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :group 'modus-themes-faces))
+
+(make-obsolete-variable 'modus-themes-reset-hard nil "4.0.0")
+(make-obsolete-variable 'modus-themes-subtle-neutral nil "4.0.0")
+(make-obsolete-variable 'modus-themes-intense-neutral nil "4.0.0")
+(make-obsolete-variable 'modus-themes-refine-red nil "4.0.0")
+(make-obsolete-variable 'modus-themes-refine-green nil "4.0.0")
+(make-obsolete-variable 'modus-themes-refine-yellow nil "4.0.0")
+(make-obsolete-variable 'modus-themes-refine-blue nil "4.0.0")
+(make-obsolete-variable 'modus-themes-refine-magenta nil "4.0.0")
+(make-obsolete-variable 'modus-themes-refine-cyan nil "4.0.0")
+(make-obsolete-variable 'modus-themes-active-red nil "4.0.0")
+(make-obsolete-variable 'modus-themes-active-green nil "4.0.0")
+(make-obsolete-variable 'modus-themes-active-yellow nil "4.0.0")
+(make-obsolete-variable 'modus-themes-active-blue nil "4.0.0")
+(make-obsolete-variable 'modus-themes-active-magenta nil "4.0.0")
+(make-obsolete-variable 'modus-themes-active-cyan nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringe-red nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringe-green nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringe-yellow nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringe-blue nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringe-magenta nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringe-cyan nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-red-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-green-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-yellow-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-blue-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-magenta-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-cyan-nuanced nil "4.0.0")
+(make-obsolete-variable 'modus-themes-special-calm nil "4.0.0")
+(make-obsolete-variable 'modus-themes-special-cold nil "4.0.0")
+(make-obsolete-variable 'modus-themes-special-mild nil "4.0.0")
+(make-obsolete-variable 'modus-themes-special-warm nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-added nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-changed nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-removed nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-refine-added nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-refine-changed nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-refine-removed nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-focus-added nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-focus-changed nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-focus-removed nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diff-heading nil "4.0.0")
+(make-obsolete-variable 'modus-themes-pseudo-header nil "4.0.0")
+(make-obsolete-variable 'modus-themes-mark-symbol nil "4.0.0")
+(make-obsolete-variable 'modus-themes-hl-line nil "4.0.0")
+(make-obsolete-variable 'modus-themes-search-success-modeline nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue-active nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue-background-active nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue-background-intense nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue-background-subtle nil "4.0.0")
+(make-obsolete-variable 'modus-themes-grue-background-refine nil "4.0.0")
+(make-obsolete-variable 'modus-themes-link-broken nil "4.0.0")
+(make-obsolete-variable 'modus-themes-link-symlink nil "4.0.0")
+(make-obsolete-variable 'modus-themes-tab-backdrop nil "4.0.0")
+(make-obsolete-variable 'modus-themes-tab-active nil "4.0.0")
+(make-obsolete-variable 'modus-themes-tab-inactive nil "4.0.0")
+(make-obsolete-variable 'modus-themes-completion-selected-popup nil "4.0.0")
+(make-obsolete-variable 'modus-themes-box-button nil "4.0.0")
+(make-obsolete-variable 'modus-themes-box-button-pressed nil "4.0.0")
+
+
+
+;;;; Customization variables
+
+(defcustom modus-themes-custom-auto-reload t
+ "Automatically reload theme after setting options with Customize.
+
+All theme user options take effect when a theme is loaded. Any
+subsequent changes require the theme to be reloaded.
+
+When this variable has a non-nil value, any change made via the
+Custom UI or related functions such as `customize-set-variable'
+and `setopt' (Emacs 29), will trigger a reload automatically.
+
+With a nil value, changes to user options have no further
+consequences. The user must manually reload the theme."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type 'boolean
+ :link '(info-link "(modus-themes) Custom reload theme"))
+
+(make-obsolete-variable 'modus-themes-inhibit-reload 'modus-themes-custom-auto-reload "4.0.0")
+
+(defun modus-themes--set-option (sym val)
+ "Custom setter for theme related user options.
+Will set SYM to VAL, and reload the current theme, unless
+`modus-themes-custom-auto-reload' is nil."
+ (set-default sym val)
+ (when (and modus-themes-custom-auto-reload
+ ;; Check if a theme is being loaded, in which case we
+ ;; don't want to reload a theme if the setter is
+ ;; invoked. `custom--inhibit-theme-enable' is set to nil
+ ;; by `enable-theme'.
+ (bound-and-true-p custom--inhibit-theme-enable))
+ (when-let* ((modus-themes-custom-auto-reload t)
+ (theme (modus-themes--current-theme)))
+ (modus-themes-load-theme theme))))
+
+(defcustom modus-themes-disable-other-themes t
+ "Disable all other themes when loading a Modus theme.
+
+When the value is non-nil, the commands `modus-themes-toggle' and
+`modus-themes-select', as well as the `modus-themes-load-theme'
+function, will disable all other themes while loading the
+specified Modus theme. This is done to ensure that Emacs does
+not blend two or more themes: such blends lead to awkward results
+that undermine the work of the designer.
+
+When the value is nil, the aforementioned commands and function
+will only disable other themes within the Modus collection.
+
+This option is provided because Emacs themes are not necessarily
+limited to colors/faces: they can consist of an arbitrary set of
+customizations. Users who use such customization bundles must
+set this variable to a nil value."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.1.0")
+ :version "30.1"
+ :type 'boolean
+ :link '(info-link "(modus-themes) Disable other themes"))
+
+(defvaralias 'modus-themes-collection 'modus-themes-items
+ "Alias of `modus-themes-items'.")
+
+(defconst modus-themes-items
+ '( modus-operandi modus-vivendi
+ modus-operandi-tinted modus-vivendi-tinted
+ modus-operandi-deuteranopia modus-vivendi-deuteranopia
+ modus-operandi-tritanopia modus-vivendi-tritanopia)
+ "Symbols of the Modus themes.")
+
+(defcustom modus-themes-to-toggle '(modus-operandi modus-vivendi)
+ "Specify two Modus themes for `modus-themes-toggle' command.
+The variable `modus-themes-items' contains the symbols of all
+official themes that form part of this collection.
+
+The default value of this user option includes the original
+themes: `modus-operandi' (light) and `modus-vivendi' (dark).
+
+If the value is nil or otherwise does not specify two valid Modus
+themes, the command `modus-themes-toggle' reverts to selecting a
+theme from the list of available Modus themes. In effect, it is
+the same as using the command `modus-themes-select'."
+ :type `(choice
+ (const :tag "No toggle" nil)
+ (list :tag "Pick two themes to toggle between"
+ (choice :tag "Theme one of two"
+ ,@(mapcar (lambda (theme)
+ (list 'const theme))
+ modus-themes-items))
+ (choice :tag "Theme two of two"
+ ,@(mapcar (lambda (theme)
+ (list 'const theme))
+ modus-themes-items))))
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :group 'modus-themes)
+
+(defvaralias 'modus-themes-post-load-hook 'modus-themes-after-load-theme-hook)
+
+(defcustom modus-themes-after-load-theme-hook nil
+ "Hook that runs after loading a Modus theme.
+This is used by the command `modus-themes-toggle'."
+ :type 'hook
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :group 'modus-themes)
+
+(make-obsolete-variable 'modus-themes-operandi-color-overrides nil "4.0.0")
+(make-obsolete-variable 'modus-themes-vivendi-color-overrides nil "4.0.0")
+
+(defvaralias 'modus-themes-slanted-constructs 'modus-themes-italic-constructs)
+
+(defcustom modus-themes-italic-constructs nil
+ "Use italic font forms in more code constructs."
+ :group 'modus-themes
+ :package-version '(modus-themes . "1.5.0")
+ :version "28.1"
+ :type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Italic constructs"))
+
+(defcustom modus-themes-bold-constructs nil
+ "Use bold text in more code constructs."
+ :group 'modus-themes
+ :package-version '(modus-themes . "1.0.0")
+ :version "28.1"
+ :type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Bold constructs"))
+
+(defcustom modus-themes-variable-pitch-ui nil
+ "Use proportional fonts (variable-pitch) in UI elements.
+This includes the mode line, header line, tab bar, and tab line."
+ :group 'modus-themes
+ :package-version '(modus-themes . "1.1.0")
+ :version "28.1"
+ :type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) UI typeface"))
+
+(defcustom modus-themes-mixed-fonts nil
+ "Non-nil to enable inheritance from `fixed-pitch' in some faces.
+
+This is done to allow spacing-sensitive constructs, such as Org
+tables and code blocks, to remain monospaced when users opt for
+something like the command `variable-pitch-mode'.
+
+Users may need to explicitly configure the font family of
+`fixed-pitch' in order to get a consistent experience with their
+typography (also check the `fontaine' package on GNU ELPA (by
+Protesilaos))."
+ :group 'modus-themes
+ :package-version '(modus-themes . "1.7.0")
+ :version "29.1"
+ :type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Mixed fonts"))
+
+(make-obsolete-variable 'modus-themes-intense-mouseovers nil "4.0.0")
+
+(defconst modus-themes--weight-widget
+ '(choice :tag "Font weight (must be supported by the typeface)"
+ (const :tag "Unspecified (use whatever the default is)" nil)
+ (const :tag "Thin" thin)
+ (const :tag "Ultra-light" ultralight)
+ (const :tag "Extra-light" extralight)
+ (const :tag "Light" light)
+ (const :tag "Semi-light" semilight)
+ (const :tag "Regular" regular)
+ (const :tag "Medium" medium)
+ (const :tag "Semi-bold" semibold)
+ (const :tag "Bold" bold)
+ (const :tag "Extra-bold" extrabold)
+ (const :tag "Ultra-bold" ultrabold))
+ "List of supported font weights used by `defcustom' forms.")
+
+(defconst modus-themes--headings-widget
+ `(set :tag "Properties" :greedy t
+ (const :tag "Proportionately spaced font (variable-pitch)" variable-pitch)
+ ,modus-themes--weight-widget
+ (radio :tag "Height"
+ (float :tag "Floating point to adjust height by")
+ (cons :tag "Cons cell of `(height . FLOAT)'"
+ (const :tag "The `height' key (constant)" height)
+ (float :tag "Floating point"))))
+ "Refer to the doc string of `modus-themes-headings'.
+This is a helper variable intended for internal use.")
+
+(defcustom modus-themes-headings nil
+ "Heading styles with optional list of values per heading level.
+
+This is an alist that accepts a (KEY . LIST-OF-VALUES)
+combination. The KEY is either a number, representing the
+heading's level (0-8) or t, which pertains to the fallback style.
+The named keys `agenda-date' and `agenda-structure' apply to the
+Org agenda.
+
+Level 0 is used for what counts as a document title or
+equivalent, such as the #+title construct we find in Org files.
+Levels 1-8 are regular headings.
+
+The LIST-OF-VALUES covers symbols that refer to properties, as
+described below. Here is a complete sample with various
+stylistic combinations, followed by a presentation of all
+available properties:
+
+ (setq modus-themes-headings
+ (quote ((1 . (variable-pitch 1.5))
+ (2 . (1.3))
+ (agenda-date . (1.3))
+ (agenda-structure . (variable-pitch light 1.8))
+ (t . (1.1)))))
+
+By default (a nil value for this variable), all headings have a
+bold typographic weight, use a desaturated text color, have a
+font family that is the same as the `default' face (typically
+monospaced), and a height that is equal to the `default' face's
+height.
+
+A `variable-pitch' property changes the font family of the
+heading to that of the `variable-pitch' face (normally a
+proportionately spaced typeface).
+
+The symbol of a weight attribute adjusts the font of the heading
+accordingly, such as `light', `semibold', etc. Valid symbols are
+defined in the variable `modus-themes-weights'. The absence of a
+weight means that bold will be used by virtue of inheriting the
+`bold' face (check the manual for tweaking bold and italic
+faces).
+
+A number, expressed as a floating point (e.g. 1.5), adjusts the
+height of the heading to that many times the base font size. The
+default height is the same as 1.0, though it need not be
+explicitly stated. Instead of a floating point, an acceptable
+value can be in the form of a cons cell like (height . FLOAT)
+or (height FLOAT), where FLOAT is the given number.
+
+Combinations of any of those properties are expressed as a list,
+like in these examples:
+
+ (semibold)
+ (variable-pitch semibold 1.3)
+ (variable-pitch semibold (height 1.3)) ; same as above
+ (variable-pitch semibold (height . 1.3)) ; same as above
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+ (setq modus-themes-headings
+ (quote ((1 . (variable-pitch 1.5))
+ (2 . (1.3))
+ (agenda-date . (1.3))
+ (agenda-structure . (variable-pitch light 1.8))
+ (t . (1.1)))))
+
+When defining the styles per heading level, it is possible to
+pass a non-nil value (t) instead of a list of properties. This
+will retain the original aesthetic for that level. For example:
+
+ (setq modus-themes-headings
+ (quote ((1 . t) ; keep the default style
+ (2 . (semibold 1.2))
+ (t . (variable-pitch))))) ; style for all other headings
+
+ (setq modus-themes-headings
+ (quote ((1 . (variable-pitch extrabold 1.5))
+ (2 . (semibold))
+ (t . t)))) ; default style for all other levels
+
+Note that the text color of headings, of their background, and
+overline can all be set via the overrides. It is possible to
+have any color combination for any heading level (something that
+could not be done in older versions of the themes).
+
+Read Info node `(modus-themes) Option for palette overrides' as
+well as Info node `(modus-themes) Make headings more or less
+colorful'. Else check `modus-themes-common-palette-overrides'
+and related user options."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type `(alist
+ :options ,(mapcar (lambda (el)
+ (list el modus-themes--headings-widget))
+ '(0 1 2 3 4 5 6 7 8 t agenda-date agenda-structure))
+ :key-type symbol
+ :value-type ,modus-themes--headings-widget)
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Heading styles"))
+
+(make-obsolete-variable 'modus-themes-org-agenda nil "4.0.0")
+(make-obsolete-variable 'modus-themes-fringes nil "4.0.0")
+(make-obsolete-variable 'modus-themes-lang-checkers nil "4.0.0")
+
+(defcustom modus-themes-org-blocks nil
+ "Set the overall style of Org code blocks, quotes, and the like.
+
+Nil (the default) means that the block has no background of its
+own: it uses the one that applies to the rest of the buffer. In
+this case, the delimiter lines have a gray color for their text,
+making them look exactly like all other Org properties.
+
+Option `gray-background' applies a subtle gray background to the
+block's contents. It also affects the begin and end lines of the
+block as they get another shade of gray as their background,
+which differentiates them from the contents of the block. All
+background colors extend to the edge of the window, giving the
+area a rectangular, \"blocky\" presentation. If the begin/end
+lines do not extend in this way, check the value of the Org user
+option `org-fontify-whole-block-delimiter-line'.
+
+Option `tinted-background' uses a colored background for the
+contents of the block. The exact color value will depend on the
+programming language and is controlled by the variable
+`org-src-block-faces' (refer to the theme's source code for the
+current association list). For this to take effect, the Org
+buffer needs to be restarted with `org-mode-restart'.
+
+Code blocks use their major mode's fontification (syntax
+highlighting) only when the variable `org-src-fontify-natively'
+is non-nil. While quote/verse blocks require setting
+`org-fontify-quote-and-verse-blocks' to a non-nil value."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type '(choice
+ (const :format "[%v] %t\n" :tag "No Org block background (default)" nil)
+ (const :format "[%v] %t\n" :tag "Subtle gray block background" gray-background)
+ (const :format "[%v] %t\n" :tag "Color-coded background per programming language" tinted-background))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Org mode blocks"))
+
+(make-obsolete-variable 'modus-themes-mode-line nil "4.0.0")
+(make-obsolete-variable 'modus-themes-diffs nil "4.0.0")
+
+(defcustom modus-themes-completions nil
+ "Control the style of completion user interfaces.
+
+This affects Company, Corfu, Flx, Icomplete/Fido, Ido, Ivy,
+Orderless, Vertico, and the standard *Completions* buffer. The
+value is an alist of expressions, each of which takes the form
+of (KEY . LIST-OF-PROPERTIES). KEY is a symbol, while PROPERTIES
+is a list. Here is a sample, followed by a description of the
+particularities:
+
+ (setq modus-themes-completions
+ (quote ((matches . (extrabold underline))
+ (selection . (semibold italic)))))
+
+The `matches' key refers to the highlighted characters that
+correspond to the user's input. When its properties are nil or
+an empty list, matching characters in the user interface will
+have a bold weight and a colored foreground. The list of
+properties may include any of the following symbols regardless of
+the order they may appear in:
+
+- `underline' to draw a line below the characters;
+
+- `italic' to use a slanted font (italic or oblique forms);
+
+- The symbol of a font weight attribute such as `light',
+ `semibold', et cetera. Valid symbols are defined in the
+ variable `modus-themes-weights'. The absence of a weight means
+ that bold will be used.
+
+The `selection' key applies to the current line or currently
+matched candidate, depending on the specifics of the user
+interface. When its properties are nil or an empty list, it has
+a subtle gray background, a bold weight, and the base foreground
+value for the text. The list of properties it accepts is as
+follows (order is not significant):
+
+- `underline' to draw a line below the characters;
+
+- `italic' to use a slanted font (italic or oblique forms);
+
+- The symbol of a font weight attribute such as `light',
+ `semibold', et cetera. Valid symbols are defined in the
+ variable `modus-themes-weights'. The absence of a weight means
+ that bold will be used.
+
+Apart from specifying each key separately, a catch-all list is
+accepted. This is only useful when the desired aesthetic is the
+same across all keys that are not explicitly referenced. For
+example, this:
+
+ (setq modus-themes-completions
+ (quote ((t . (extrabold underline)))))
+
+Is the same as:
+
+ (setq modus-themes-completions
+ (quote ((matches . (extrabold underline))
+ (selection . (extrabold underline)))))"
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type `(set
+ (cons :tag "Matches"
+ (const matches)
+ (set :tag "Style of matches" :greedy t
+ ,modus-themes--weight-widget
+ (const :tag "Italic font (oblique or slanted forms)" italic)
+ (const :tag "Underline" underline)))
+ (cons :tag "Selection"
+ (const selection)
+ (set :tag "Style of selection" :greedy t
+ ,modus-themes--weight-widget
+ (const :tag "Italic font (oblique or slanted forms)" italic)
+ (const :tag "Underline" underline)))
+ (cons :tag "Fallback for both matches and selection"
+ (const t)
+ (set :tag "Style of both matches and selection" :greedy t
+ ,modus-themes--weight-widget
+ (const :tag "Italic font (oblique or slanted forms)" italic)
+ (const :tag "Underline" underline))))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Completion UIs"))
+
+(defcustom modus-themes-prompts nil
+ "Use subtle or intense styles for minibuffer and REPL prompts.
+
+The value is a list of properties, each designated by a symbol.
+The default (a nil value or an empty list) means to only use a
+subtle colored foreground color.
+
+The `italic' property adds a slant to the font's forms (italic or
+oblique forms, depending on the typeface).
+
+The symbol of a font weight attribute such as `light', `semibold',
+et cetera, adds the given weight to links. Valid symbols are
+defined in the variable `modus-themes-weights'. The absence of a
+weight means that the one of the underlying text will be used.
+
+Combinations of any of those properties are expressed as a list,
+like in these examples:
+
+ (bold italic)
+ (italic semibold)
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+ (setq modus-themes-prompts (quote (extrabold italic)))"
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type `(set :tag "Properties" :greedy t
+ (const :tag "Italic font slant" italic)
+ ,modus-themes--weight-widget)
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Command prompts"))
+
+(make-obsolete-variable 'modus-themes-subtle-line-numbers nil "4.0.0")
+(make-obsolete-variable 'modus-themes-markup nil "4.0.0")
+(make-obsolete-variable 'modus-themes-paren-match nil "4.0.0")
+(make-obsolete-variable 'modus-themes-syntax nil "4.0.0")
+(make-obsolete-variable 'modus-themes-links nil "4.0.0")
+(make-obsolete-variable 'modus-themes-region nil "4.0.0")
+(make-obsolete-variable 'modus-themes-deuteranopia nil "4.0.0")
+(make-obsolete-variable 'modus-themes-mail-citations nil "4.0.0")
+(make-obsolete-variable 'modus-themes-tabs-accented nil "4.0.0")
+(make-obsolete-variable 'modus-themes-box-buttons nil "4.0.0")
+
+(defcustom modus-themes-common-palette-overrides nil
+ "Set palette overrides for all the Modus themes.
+
+Mirror the elements of a theme's palette, overriding their value.
+The palette variables are named THEME-NAME-palette, while
+individual theme overrides are THEME-NAME-palette-overrides. The
+THEME-NAME is one of the symbols in `modus-themes-items'. For
+example:
+
+- `modus-operandi-palette'
+- `modus-operandi-palette-overrides'
+
+Individual theme overrides take precedence over these common
+overrides.
+
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red. Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type '(repeat (list symbol (choice symbol string)))
+ ;; ;; NOTE 2023-01-07: The following is a functioning version of the
+ ;; ;; intended :type. However, I think the Custom UI is really
+ ;; ;; awkward for this specific case. Maybe the generic type I have
+ ;; ;; above is better, as it encourages the user to write out the
+ ;; ;; code and read the manual. Counter-arguments are welcome.
+ ;;
+ ;; :type `(repeat (list (radio :tag "Palette key to override"
+ ;; ,@(mapcar (lambda (x)
+ ;; (list 'const x))
+ ;; (mapcar #'car (modus-themes--current-theme-palette))))
+ ;; (choice :tag "Value to assign" :value unspecified
+ ;; (const :tag "`unspecified' (remove the original color)" unspecified)
+ ;; (string :tag "String with color name (e.g. \"gray50\") or hex RGB (e.g. \"#123456\")"
+ ;; :match-inline (color-supported-p val))
+ ;; (radio :tag "Palette key to map to"
+ ;; ,@(mapcar (lambda (x)
+ ;; (list 'const x))
+ ;; (mapcar #'car (modus-themes--current-theme-palette)))))))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Palette overrides"))
+
+
+
+;;;; Presets of palette overrides
+
+(defvar modus-themes-preset-overrides-faint
+ '((bg-completion bg-inactive)
+ (bg-hl-line bg-dim)
+ (bg-paren-match bg-cyan-subtle)
+ (bg-region bg-active)
+
+ (bg-mode-line-active bg-inactive)
+ (border-mode-line-active fg-dim)
+ (bg-mode-line-inactive bg-dim)
+ (border-mode-line-inactive bg-active)
+
+ (bg-tab-bar bg-inactive)
+ (bg-tab-current bg-main)
+ (bg-tab-other bg-active)
+
+ (fringe unspecified)
+ (builtin maroon)
+ (comment fg-dim)
+ (constant blue-faint)
+ (docstring fg-alt)
+ (docmarkup magenta-faint)
+ (fnname pink)
+ (keyword indigo)
+ (preprocessor rust)
+ (string slate)
+ (type cyan-faint)
+ (variable cyan-faint)
+ (rx-construct gold)
+ (rx-backslash olive)
+
+ (underline-err red-faint)
+ (underline-warning yellow-faint)
+ (underline-note cyan-faint)
+
+ (bg-button-active bg-main)
+ (fg-button-active fg-main)
+ (bg-button-inactive bg-inactive)
+ (fg-button-inactive "gray50")
+
+ (date-common cyan-faint)
+ (date-deadline red-faint)
+ (date-event fg-alt)
+ (date-holiday magenta)
+ (date-now fg-main)
+ (date-scheduled yellow-faint)
+ (date-weekday fg-dim)
+ (date-weekend fg-dim)
+
+ (name maroon)
+ (identifier fg-dim)
+
+ (fg-line-number-active fg-main)
+ (fg-line-number-inactive "gray50")
+ (bg-line-number-active unspecified)
+ (bg-line-number-inactive unspecified)
+
+ (fg-link blue-faint)
+ (bg-link unspecified)
+ (underline-link bg-active)
+
+ (fg-link-symbolic cyan-faint)
+ (bg-link-symbolic unspecified)
+ (underline-link-symbolic bg-active)
+
+ (fg-link-visited magenta-faint)
+ (bg-link-visited unspecified)
+ (underline-link-visited bg-active)
+
+ (mail-cite-0 cyan-faint)
+ (mail-cite-1 yellow-faint)
+ (mail-cite-2 green-faint)
+ (mail-cite-3 red-faint)
+ (mail-part olive)
+ (mail-recipient indigo)
+ (mail-subject maroon)
+ (mail-other slate)
+
+ (fg-prompt cyan-faint)
+
+ (prose-code olive)
+ (prose-done green-faint)
+ (prose-macro indigo)
+ (prose-tag rust)
+ (prose-todo red-faint)
+ (prose-verbatim maroon)
+
+ (rainbow-0 fg-main)
+ (rainbow-1 magenta)
+ (rainbow-2 cyan)
+ (rainbow-3 red-faint)
+ (rainbow-4 yellow-faint)
+ (rainbow-5 magenta-cooler)
+ (rainbow-6 green)
+ (rainbow-7 blue-warmer)
+ (rainbow-8 magenta-faint))
+ "Preset for palette overrides with faint coloration.
+
+This changes many parts of the theme to make them look less
+colorful/intense. Grays are toned down, gray backgrounds are
+removed from some contexts, and almost all accent colors are
+desaturated.
+
+All the preset overrides the themes provide (including this one):
+
+- `modus-themes-preset-overrides-faint'
+- `modus-themes-preset-overrides-intense'
+- `modus-themes-preset-overrides-cooler'
+- `modus-themes-preset-overrides-warmer'
+
+To set a preset, assign its symbol without a quote as the value
+of the `modus-themes-common-palette-overrides' or as the value of
+theme-specific options such as `modus-operandi-palette-overrides'.
+
+For overriding named colors and/or semantic color mappings read
+Info node `(modus-themes) Option for palette overrides'.")
+
+(defvar modus-themes-preset-overrides-intense
+ '((bg-region bg-cyan-intense)
+
+ (bg-completion bg-cyan-subtle)
+ (bg-hover bg-yellow-intense)
+ (bg-hover-secondary bg-magenta-intense)
+ (bg-hl-line bg-cyan-subtle)
+
+ (bg-mode-line-active bg-blue-subtle)
+ (fg-mode-line-active fg-main)
+ (border-mode-line-active blue-intense)
+
+ (fringe bg-inactive)
+ (comment red-faint)
+
+ (date-common cyan)
+ (date-deadline red)
+ (date-event blue)
+ (date-holiday magenta-warmer)
+ (date-now blue-faint)
+ (date-range blue)
+ (date-scheduled yellow-warmer)
+ (date-weekday fg-main)
+ (date-weekend red-faint)
+
+ (keybind blue-intense)
+
+ (mail-cite-0 blue)
+ (mail-cite-1 yellow)
+ (mail-cite-2 green)
+ (mail-cite-3 magenta)
+ (mail-part magenta-cooler)
+ (mail-recipient cyan)
+ (mail-subject red-warmer)
+ (mail-other cyan-cooler)
+
+ (fg-prompt blue-intense)
+
+ (prose-block red-faint)
+ (prose-done green-intense)
+ (prose-metadata magenta-faint)
+ (prose-metadata-value blue-cooler)
+ (prose-table blue)
+ (prose-todo red-intense)
+
+ (fg-heading-0 blue-cooler)
+ (fg-heading-1 magenta-cooler)
+ (fg-heading-2 magenta-warmer)
+ (fg-heading-3 blue)
+ (fg-heading-4 cyan)
+ (fg-heading-5 green-warmer)
+ (fg-heading-6 yellow)
+ (fg-heading-7 red)
+ (fg-heading-8 magenta)
+
+ (bg-heading-0 unspecified)
+ (bg-heading-1 bg-magenta-nuanced)
+ (bg-heading-2 bg-red-nuanced)
+ (bg-heading-3 bg-blue-nuanced)
+ (bg-heading-4 bg-cyan-nuanced)
+ (bg-heading-5 bg-green-nuanced)
+ (bg-heading-6 bg-yellow-nuanced)
+ (bg-heading-7 bg-red-nuanced)
+ (bg-heading-8 bg-magenta-nuanced)
+
+ (overline-heading-0 unspecified)
+ (overline-heading-1 magenta-cooler)
+ (overline-heading-2 magenta-warmer)
+ (overline-heading-3 blue)
+ (overline-heading-4 cyan)
+ (overline-heading-5 green)
+ (overline-heading-6 yellow-cooler)
+ (overline-heading-7 red-cooler)
+ (overline-heading-8 magenta))
+ "Preset for palette overrides with intense coloration.
+
+This changes many parts of the theme to make them look more
+colorful/intense. Many background colors are accented and
+coloration is increased to pop out more.
+
+All the preset overrides the themes provide (including this one):
+
+- `modus-themes-preset-overrides-faint'
+- `modus-themes-preset-overrides-intense'
+- `modus-themes-preset-overrides-cooler'
+- `modus-themes-preset-overrides-warmer'
+
+To set a preset, assign its symbol without a quote as the value
+of the `modus-themes-common-palette-overrides' or as the value of
+theme-specific options such as `modus-operandi-palette-overrides'.
+
+For overriding named colors and/or semantic color mappings read
+Info node `(modus-themes) Option for palette overrides'.")
+
+(defvar modus-themes-preset-overrides-cooler
+ '((fg-prompt blue-cooler)
+
+ (builtin magenta-faint)
+ (constant blue-cooler)
+ (fnname cyan-cooler)
+ (keyword magenta-cooler)
+ (preprocessor blue)
+ (string blue-warmer)
+ (type green-cooler)
+ (variable cyan)
+ (rx-construct blue-cooler)
+ (rx-backslash red)
+
+ (name blue-warmer)
+ (identifier magenta-faint)
+
+ (date-deadline magenta-cooler)
+ (date-scheduled yellow-cooler)
+ (date-weekday blue-faint)
+ (date-weekend red-faint)
+
+ (mail-cite-0 blue-faint)
+ (mail-cite-1 cyan-cooler)
+ (mail-cite-2 magenta-faint)
+ (mail-cite-3 yellow-cooler)
+ (mail-part cyan)
+ (mail-recipient blue-warmer)
+ (mail-subject magenta-cooler)
+ (mail-other blue)
+
+ (prose-tag fg-dim)
+ (prose-verbatim blue-cooler))
+ "Preset of palette overrides with cooler colors.
+
+This changes parts of the palette to use more blue and
+blue-tinted colors.
+
+All the preset overrides the themes provide (including this one):
+
+- `modus-themes-preset-overrides-faint'
+- `modus-themes-preset-overrides-intense'
+- `modus-themes-preset-overrides-cooler'
+- `modus-themes-preset-overrides-warmer'
+
+To set a preset, assign its symbol without a quote as the value
+of the `modus-themes-common-palette-overrides' or as the value of
+theme-specific options such as `modus-operandi-palette-overrides'.
+
+For overriding named colors and/or semantic color mappings read
+Info node `(modus-themes) Option for palette overrides'.")
+
+(defvar modus-themes-preset-overrides-warmer
+ '((fg-prompt magenta-warmer)
+
+ (builtin magenta)
+ (constant blue-warmer)
+ (fnname magenta-cooler)
+ (keyword magenta-warmer)
+ (preprocessor red-cooler)
+ (string green-warmer)
+ (type cyan-cooler)
+ (variable cyan)
+ (rx-construct blue-cooler)
+ (rx-backslash red-warmer)
+
+ (name blue-warmer)
+ (identifier magenta)
+ (keybind magenta-warmer)
+
+ (accent-0 magenta-warmer)
+ (accent-1 cyan)
+ (accent-2 blue-warmer)
+ (accent-3 red-cooler)
+
+ (date-common cyan-cooler)
+ (date-holiday magenta-warmer)
+
+ (mail-cite-0 magenta-faint)
+ (mail-cite-1 cyan-cooler)
+ (mail-cite-2 green-warmer)
+ (mail-cite-3 red-faint)
+ (mail-part cyan)
+ (mail-recipient magenta)
+ (mail-subject blue-warmer)
+ (mail-other magenta-warmer)
+
+ (prose-macro red-cooler)
+ (prose-tag fg-dim))
+ "Preset of palette overrides with warmer colors.
+
+This changes many parts of the theme to use warmer colors,
+including green and yellow.
+
+All the preset overrides the themes provide (including this one):
+
+- `modus-themes-preset-overrides-faint'
+- `modus-themes-preset-overrides-intense'
+- `modus-themes-preset-overrides-cooler'
+- `modus-themes-preset-overrides-warmer'
+
+To set a preset, assign its symbol without a quote as the value
+of the `modus-themes-common-palette-overrides' or as the value of
+theme-specific options such as `modus-operandi-palette-overrides'.
+
+For overriding named colors and/or semantic color mappings read
+Info node `(modus-themes) Option for palette overrides'.")
+
+
+
+;;;; Helper functions for theme setup
+
+;; This is the WCAG formula: https://www.w3.org/TR/WCAG20-TECHS/G18.html
+(defun modus-themes-wcag-formula (hex)
+ "Get WCAG value of color value HEX.
+The value is defined in hexadecimal RGB notation, such #123456."
+ (cl-loop for k in '(0.2126 0.7152 0.0722)
+ for x in (color-name-to-rgb hex)
+ sum (* k (if (<= x 0.03928)
+ (/ x 12.92)
+ (expt (/ (+ x 0.055) 1.055) 2.4)))))
+
+;;;###autoload
+(defun modus-themes-contrast (c1 c2)
+ "Measure WCAG contrast ratio between C1 and C2.
+C1 and C2 are color values written in hexadecimal RGB."
+ (let ((ct (/ (+ (modus-themes-wcag-formula c1) 0.05)
+ (+ (modus-themes-wcag-formula c2) 0.05))))
+ (max ct (/ ct))))
+
+(make-obsolete 'modus-themes-color nil "4.0.0")
+(make-obsolete 'modus-themes-color-alts nil "4.0.0")
+
+(declare-function cl-remove-if-not "cl-seq" (cl-pred cl-list &rest cl-keys))
+
+(defun modus-themes--list-enabled-themes ()
+ "Return list of `custom-enabled-themes' with modus- prefix."
+ (cl-remove-if-not
+ (lambda (theme)
+ (string-prefix-p "modus-" (symbol-name theme)))
+ custom-enabled-themes))
+
+(defun modus-themes--enable-themes ()
+ "Enable the Modus themes."
+ (mapc (lambda (theme)
+ (unless (memq theme custom-known-themes)
+ (load-theme theme :no-confirm :no-enable)))
+ modus-themes-items))
+
+(defun modus-themes--list-known-themes ()
+ "Return list of `custom-known-themes' with modus- prefix."
+ (modus-themes--enable-themes)
+ (cl-remove-if-not
+ (lambda (theme)
+ (string-prefix-p "modus-" (symbol-name theme)))
+ custom-known-themes))
+
+(defun modus-themes--current-theme ()
+ "Return first enabled Modus theme."
+ (car (or (modus-themes--list-enabled-themes)
+ (modus-themes--list-known-themes))))
+
+(defun modus-themes--palette-symbol (theme &optional overrides)
+ "Return THEME palette as a symbol.
+With optional OVERRIDES, return THEME palette overrides as a
+symbol."
+ (when-let ((suffix (cond
+ ((and theme overrides)
+ "palette-overrides")
+ (theme
+ "palette"))))
+ (intern (format "%s-%s" theme suffix))))
+
+(defun modus-themes--palette-value (theme &optional overrides)
+ "Return palette value of THEME with optional OVERRIDES."
+ (let ((base-value (symbol-value (modus-themes--palette-symbol theme))))
+ (if overrides
+ (append (symbol-value (modus-themes--palette-symbol theme :overrides))
+ modus-themes-common-palette-overrides
+ base-value)
+ base-value)))
+
+(defun modus-themes--current-theme-palette (&optional overrides)
+ "Return palette value of active Modus theme, else produce `user-error'.
+With optional OVERRIDES return palette value plus whatever
+overrides."
+ (if-let ((theme (modus-themes--current-theme)))
+ (if overrides
+ (modus-themes--palette-value theme :overrides)
+ (modus-themes--palette-value theme))
+ (user-error "No enabled Modus theme could be found")))
+
+(defun modus-themes--disable-themes ()
+ "Disable themes per `modus-themes-disable-other-themes'."
+ (mapc #'disable-theme
+ (if modus-themes-disable-other-themes
+ custom-enabled-themes
+ (modus-themes--list-known-themes))))
+
+(defun modus-themes-load-theme (theme)
+ "Load THEME while disabling other themes.
+
+Which themes are disabled is determined by the user option
+`modus-themes-disable-other-themes'.
+
+Run the `modus-themes-after-load-theme-hook' as the final step
+after loading the THEME.
+
+Return THEME."
+ (modus-themes--disable-themes)
+ (load-theme theme :no-confirm)
+ (run-hooks 'modus-themes-after-load-theme-hook)
+ theme)
+
+(defun modus-themes--retrieve-palette-value (color palette)
+ "Return COLOR from PALETTE.
+Use recursion until COLOR is retrieved as a string. Refrain from
+doing so if the value of COLOR is not a key in the PALETTE.
+
+Return `unspecified' if the value of COLOR cannot be determined.
+This symbol is accepted by faces and is thus harmless.
+
+This function is used in the macros `modus-themes-theme',
+`modus-themes-with-colors'."
+ (let ((value (car (alist-get color palette))))
+ (cond
+ ((or (stringp value)
+ (eq value 'unspecified))
+ value)
+ ((and (symbolp value)
+ (memq value (mapcar #'car palette)))
+ (modus-themes--retrieve-palette-value value palette))
+ (t
+ 'unspecified))))
+
+(defun modus-themes-get-color-value (color &optional overrides theme)
+ "Return color value of named COLOR for current Modus theme.
+
+COLOR is a symbol that represents a named color entry in the
+palette.
+
+If the value is the name of another color entry in the
+palette (so a mapping), recur until you find the underlying color
+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 `modus-themes-items', use
+the palette of that item. Else use the current Modus theme.
+
+If COLOR is not present in the palette, return the `unspecified'
+symbol, which is safe when used as a face attribute's value."
+ (if-let* ((palette (if theme
+ (modus-themes--palette-value theme overrides)
+ (modus-themes--current-theme-palette overrides)))
+ (value (modus-themes--retrieve-palette-value color palette)))
+ value
+ 'unspecified))
+
+;;;; Commands
+
+(make-obsolete 'modus-themes-load-themes nil "4.0.0")
+(make-obsolete 'modus-themes-load-operandi nil "4.0.0; Check `modus-themes-load-theme'")
+(make-obsolete 'modus-themes-load-vivendi nil "4.0.0; Check `modus-themes-load-theme'")
+
+(defvar modus-themes--select-theme-history nil
+ "Minibuffer history of `modus-themes--select-prompt'.")
+
+(defun modus-themes--annotate-theme (theme)
+ "Return completion annotation for THEME."
+ (when-let ((symbol (intern-soft theme))
+ (doc-string (get symbol 'theme-documentation)))
+ (format " -- %s" (car (split-string doc-string "\\.")))))
+
+(defun modus-themes--completion-table (category candidates)
+ "Pass appropriate metadata CATEGORY to completion CANDIDATES."
+ (lambda (string pred action)
+ (if (eq action 'metadata)
+ `(metadata (category . ,category))
+ (complete-with-action action candidates string pred))))
+
+(defun modus-themes--completion-table-candidates ()
+ "Render `modus-themes--list-known-themes' as completion with theme category."
+ (modus-themes--completion-table 'theme (modus-themes--list-known-themes)))
+
+(defun modus-themes--select-prompt ()
+ "Minibuffer prompt to select a Modus theme."
+ (let ((completion-extra-properties `(:annotation-function ,#'modus-themes--annotate-theme)))
+ (intern
+ (completing-read
+ "Select Modus theme: "
+ (modus-themes--completion-table-candidates)
+ nil t nil
+ 'modus-themes--select-theme-history))))
+
+;;;###autoload
+(defun modus-themes-select (theme)
+ "Load a Modus THEME using minibuffer completion.
+Run `modus-themes-after-load-theme-hook' after loading the theme.
+Disable other themes per `modus-themes-disable-other-themes'."
+ (interactive (list (modus-themes--select-prompt)))
+ (modus-themes-load-theme theme))
+
+(defun modus-themes--toggle-theme-p ()
+ "Return non-nil if `modus-themes-to-toggle' are valid."
+ (mapc
+ (lambda (theme)
+ (if (or (memq theme modus-themes-items)
+ (memq theme (modus-themes--list-known-themes)))
+ theme
+ (user-error "`%s' is not part of `modus-themes-items'" theme)))
+ modus-themes-to-toggle))
+
+;;;###autoload
+(defun modus-themes-toggle ()
+ "Toggle between the two `modus-themes-to-toggle'.
+If `modus-themes-to-toggle' does not specify two Modus themes,
+prompt with completion for a theme among our collection (this is
+practically the same as the `modus-themes-select' command).
+
+Run `modus-themes-after-load-theme-hook' after loading the theme.
+Disable other themes per `modus-themes-disable-other-themes'."
+ (interactive)
+ (if-let* ((themes (modus-themes--toggle-theme-p))
+ (one (car themes))
+ (two (cadr themes)))
+ (modus-themes-load-theme (if (eq (car custom-enabled-themes) one) two one))
+ (modus-themes-load-theme (modus-themes--select-prompt))))
+
+(defun modus-themes--list-colors-render (buffer theme &optional mappings &rest _)
+ "Render colors in BUFFER from THEME for `modus-themes-list-colors'.
+Optional MAPPINGS changes the output to only list the semantic
+color mappings of the palette, instead of its named colors."
+ (let* ((current-palette (modus-themes--palette-value theme mappings))
+ (palette (if mappings
+ (seq-remove (lambda (cell)
+ (stringp (cadr cell)))
+ current-palette)
+ current-palette))
+ (current-buffer buffer)
+ (current-theme theme))
+ (with-help-window buffer
+ (with-current-buffer standard-output
+ (erase-buffer)
+ (when (<= (display-color-cells) 256)
+ (insert (concat "Your display terminal may not render all color previews!\n"
+ "It seems to only support <= 256 colors.\n\n"))
+ (put-text-property (point-min) (point) 'face 'warning))
+ ;; We need this to properly render the first line.
+ (insert " ")
+ (dolist (cell palette)
+ (let* ((name (car cell))
+ (color (modus-themes-get-color-value name mappings theme))
+ (pad (make-string 10 ?\s))
+ (fg (if (eq color 'unspecified)
+ (progn
+ (readable-foreground-color (modus-themes-get-color-value 'bg-main nil theme))
+ (setq pad (make-string 6 ?\s)))
+ (readable-foreground-color color))))
+ (let ((old-point (point)))
+ (insert (format "%s %s" color pad))
+ (put-text-property old-point (point) 'face `( :foreground ,color)))
+ (let ((old-point (point)))
+ (insert (format " %s %s %s\n" color pad name))
+ (put-text-property old-point (point)
+ 'face `( :background ,color
+ :foreground ,fg
+ :extend t)))
+ ;; We need this to properly render the last line.
+ (insert " ")))
+ (setq-local revert-buffer-function
+ (lambda (_ignore-auto _noconfirm)
+ (modus-themes--list-colors-render current-buffer current-theme mappings)))))))
+
+(defvar modus-themes--list-colors-prompt-history '()
+ "Minibuffer history for `modus-themes--list-colors-prompt'.")
+
+(defun modus-themes--list-colors-prompt ()
+ "Prompt for Modus theme.
+Helper function for `modus-themes-list-colors'."
+ (let ((def (format "%s" (modus-themes--current-theme)))
+ (completion-extra-properties `(:annotation-function ,#'modus-themes--annotate-theme)))
+ (completing-read
+ (format "Use palette from theme [%s]: " def)
+ (modus-themes--completion-table-candidates)
+ nil t nil
+ 'modus-themes--list-colors-prompt-history def)))
+
+(defun modus-themes-list-colors (theme &optional mappings)
+ "Preview named colors of the Modus THEME of choice.
+With optional prefix argument for MAPPINGS preview the semantic
+color mappings instead of the named colors."
+ (interactive (list (intern (modus-themes--list-colors-prompt)) current-prefix-arg))
+ (modus-themes--list-colors-render
+ (format (if mappings "*%s-list-mappings*" "*%s-list-colors*") theme)
+ theme
+ mappings))
+
+(defalias 'modus-themes-preview-colors 'modus-themes-list-colors
+ "Alias of `modus-themes-list-colors'.")
+
+(defun modus-themes-list-colors-current (&optional mappings)
+ "Call `modus-themes-list-colors' for the current Modus theme.
+Optional prefix argument MAPPINGS has the same meaning as for
+`modus-themes-list-colors'."
+ (interactive "P")
+ (modus-themes-list-colors (modus-themes--current-theme) mappings))
+
+(defalias 'modus-themes-preview-colors-current 'modus-themes-list-colors-current
+ "Alias of `modus-themes-list-colors-current'.")
+
+
+
+;;;; Internal functions
+
+(defun modus-themes--warn (option)
+ "Warn that OPTION has changed."
+ (prog1 nil
+ (display-warning
+ 'modus-themes
+ (format "`%s' has changed; please read the updated documentation" option)
+ :warning)))
+
+(defun modus-themes--list-or-warn (option)
+ "Return list or nil value of OPTION, else `modus-themes--warn'."
+ (let* ((value (symbol-value option)))
+ (if (or (null value) (listp value))
+ value
+ (modus-themes--warn option))))
+
+(defun modus-themes--property-lookup (properties alist-key list-pred default)
+ "Return value from property alist or list.
+Check PROPERTIES for an alist value that corresponds to
+ALIST-KEY. If no alist is present, search the PROPERTIES
+list given LIST-PRED, using DEFAULT as a fallback."
+ (if-let* ((val (or (alist-get alist-key properties)
+ (cl-loop for x in properties
+ if (funcall list-pred x) return x)
+ default))
+ ((listp val)))
+ (car val)
+ val))
+
+;; Helper functions that are meant to ease the implementation of the
+;; above customization variables.
+(defun modus-themes--bold-weight ()
+ "Conditional use of a heavier text weight."
+ (when modus-themes-bold-constructs
+ (list :inherit 'bold)))
+
+(defun modus-themes--slant ()
+ "Conditional use of italics for slant attribute."
+ (when modus-themes-italic-constructs
+ (list :inherit 'italic)))
+
+(defun modus-themes--fixed-pitch ()
+ "Conditional application of `fixed-pitch' inheritance."
+ (when modus-themes-mixed-fonts
+ (list :inherit 'fixed-pitch)))
+
+(defun modus-themes--variable-pitch-ui ()
+ "Conditional use of `variable-pitch' in UI elements."
+ (when modus-themes-variable-pitch-ui
+ (list :inherit 'variable-pitch)))
+
+(defun modus-themes--prompt (fg bg)
+ "Conditional use of colors for text prompt faces.
+FG is the prompt's standard foreground. BG is a background
+color that is combined with FG-FOR-BG."
+ (let* ((properties (modus-themes--list-or-warn 'modus-themes-prompts))
+ (weight (modus-themes--weight properties)))
+ (list :inherit
+ (cond
+ ((and (memq 'bold properties)
+ (memq 'italic properties))
+ 'bold-italic)
+ ((memq 'italic properties)
+ 'italic)
+ ((memq 'bold properties)
+ 'bold)
+ ('unspecified))
+ :background bg
+ :foreground fg
+ :weight
+ ;; If we have `bold' specifically, we inherit the face of
+ ;; the same name. This allows the user to customise that
+ ;; face, such as to change its font family.
+ (if (and weight (not (eq weight 'bold)))
+ weight
+ 'unspecified))))
+
+(defconst modus-themes-weights
+ '( thin ultralight extralight light semilight regular medium
+ semibold bold heavy extrabold ultrabold)
+ "List of font weights.")
+
+(defun modus-themes--weight (list)
+ "Search for `modus-themes-weights' weight in LIST."
+ (catch 'found
+ (dolist (elt list)
+ (when (memq elt modus-themes-weights)
+ (throw 'found elt)))))
+
+(defun modus-themes--heading (level fg &optional bg ol)
+ "Conditional styles for `modus-themes-headings'.
+
+LEVEL is the heading's position in their order. FG is the
+default text color. Optional BG is an appropriate background.
+Optional OL is the color of an overline."
+ (let* ((key (alist-get level modus-themes-headings))
+ (style (or key (alist-get t modus-themes-headings)))
+ (style-listp (listp style))
+ (properties style)
+ (var (when (and style-listp (memq 'variable-pitch properties)) 'variable-pitch))
+ (weight (when style-listp (modus-themes--weight style))))
+ (list :inherit (cond
+ ((not style-listp) 'bold)
+ ;; `no-bold' is for backward compatibility because we cannot
+ ;; deprecate a variable's value.
+ ((or weight (memq 'no-bold properties))
+ var)
+ (var (append (list 'bold) (list var)))
+ (t 'bold))
+ :background (or bg 'unspecified)
+ :foreground fg
+ :overline (or ol 'unspecified)
+ :height (if style-listp
+ (modus-themes--property-lookup properties 'height #'floatp 'unspecified)
+ 'unspecified)
+ :weight (or weight 'unspecified))))
+
+(defun modus-themes--org-block (fg bg)
+ "Conditionally set the FG and BG of Org blocks."
+ (let ((gray (or (eq modus-themes-org-blocks 'gray-background)
+ (eq modus-themes-org-blocks 'grayscale) ; for backward compatibility
+ (eq modus-themes-org-blocks 'greyscale))))
+ (list :inherit 'modus-themes-fixed-pitch
+ :background (if gray bg 'unspecified)
+ :foreground (if gray 'unspecified fg)
+ :extend (if gray t 'unspecified))))
+
+(defun modus-themes--completion-line (bg)
+ "Styles for `modus-themes-completions' with BG as the background."
+ (let* ((var (modus-themes--list-or-warn 'modus-themes-completions))
+ (properties (or (alist-get 'selection var) (alist-get t var)))
+ (italic (memq 'italic properties))
+ (weight (modus-themes--weight properties))
+ (bold (when (and weight (eq weight 'bold)) 'bold)))
+ (list
+ :inherit
+ (cond
+ ((and italic weight (not (eq weight 'bold)))
+ 'italic)
+ ((and weight (not (eq weight 'bold)))
+ 'unspecified)
+ (italic 'bold-italic)
+ ('bold))
+ :background bg
+ :foreground 'unspecified
+ :underline
+ (if (memq 'underline properties) t 'unspecified)
+ :weight
+ (if (and weight (null bold)) weight 'unspecified))))
+
+(defun modus-themes--completion-match (fg bg)
+ "Styles for `modus-themes-completions'.
+FG and BG are the main colors."
+ (let* ((var (modus-themes--list-or-warn 'modus-themes-completions))
+ (properties (or (alist-get 'matches var) (alist-get t var)))
+ (italic (memq 'italic properties))
+ (weight (modus-themes--weight properties))
+ (bold (when (and weight (eq weight 'bold)) 'bold)))
+ (list
+ :inherit
+ (cond
+ ((and italic weight (not (eq weight 'bold)))
+ 'italic)
+ ((and weight (not (eq weight 'bold)))
+ 'unspecified)
+ (italic 'bold-italic)
+ ('bold))
+ :background bg
+ :foreground fg
+ :underline
+ (if (memq 'underline properties) t 'unspecified)
+ :weight
+ (if (and weight (null bold)) weight 'unspecified))))
+
+
+
+;;;; Face specifications
+
+(defconst modus-themes-faces
+ '(
+;;;; custom faces
+ ;; these bespoke faces are inherited by other constructs below
+;;;;; just the foregrounds
+ `(modus-themes-fg-red ((,c :foreground ,red)))
+ `(modus-themes-fg-red-warmer ((,c :foreground ,red-warmer)))
+ `(modus-themes-fg-red-cooler ((,c :foreground ,red-cooler)))
+ `(modus-themes-fg-red-faint ((,c :foreground ,red-faint)))
+ `(modus-themes-fg-red-intense ((,c :foreground ,red-intense)))
+ `(modus-themes-fg-green ((,c :foreground ,green)))
+ `(modus-themes-fg-green-warmer ((,c :foreground ,green-warmer)))
+ `(modus-themes-fg-green-cooler ((,c :foreground ,green-cooler)))
+ `(modus-themes-fg-green-faint ((,c :foreground ,green-faint)))
+ `(modus-themes-fg-green-intense ((,c :foreground ,green-intense)))
+ `(modus-themes-fg-yellow ((,c :foreground ,yellow)))
+ `(modus-themes-fg-yellow-warmer ((,c :foreground ,yellow-warmer)))
+ `(modus-themes-fg-yellow-cooler ((,c :foreground ,yellow-cooler)))
+ `(modus-themes-fg-yellow-faint ((,c :foreground ,yellow-faint)))
+ `(modus-themes-fg-yellow-intense ((,c :foreground ,yellow-intense)))
+ `(modus-themes-fg-blue ((,c :foreground ,blue)))
+ `(modus-themes-fg-blue-warmer ((,c :foreground ,blue-warmer)))
+ `(modus-themes-fg-blue-cooler ((,c :foreground ,blue-cooler)))
+ `(modus-themes-fg-blue-faint ((,c :foreground ,blue-faint)))
+ `(modus-themes-fg-blue-intense ((,c :foreground ,blue-intense)))
+ `(modus-themes-fg-magenta ((,c :foreground ,magenta)))
+ `(modus-themes-fg-magenta-warmer ((,c :foreground ,magenta-warmer)))
+ `(modus-themes-fg-magenta-cooler ((,c :foreground ,magenta-cooler)))
+ `(modus-themes-fg-magenta-faint ((,c :foreground ,magenta-faint)))
+ `(modus-themes-fg-magenta-intense ((,c :foreground ,magenta-intense)))
+ `(modus-themes-fg-cyan ((,c :foreground ,cyan)))
+ `(modus-themes-fg-cyan-warmer ((,c :foreground ,cyan-warmer)))
+ `(modus-themes-fg-cyan-cooler ((,c :foreground ,cyan-cooler)))
+ `(modus-themes-fg-cyan-faint ((,c :foreground ,cyan-faint)))
+ `(modus-themes-fg-cyan-intense ((,c :foreground ,cyan-intense)))
+;;;;; nuanced colored backgrounds
+ `(modus-themes-nuanced-red ((,c :background ,bg-red-nuanced :extend t)))
+ `(modus-themes-nuanced-green ((,c :background ,bg-green-nuanced :extend t)))
+ `(modus-themes-nuanced-yellow ((,c :background ,bg-yellow-nuanced :extend t)))
+ `(modus-themes-nuanced-blue ((,c :background ,bg-blue-nuanced :extend t)))
+ `(modus-themes-nuanced-magenta ((,c :background ,bg-magenta-nuanced :extend t)))
+ `(modus-themes-nuanced-cyan ((,c :background ,bg-cyan-nuanced :extend t)))
+;;;;; subtle colored backgrounds
+ `(modus-themes-subtle-red ((,c :background ,bg-red-subtle :foreground ,fg-main)))
+ `(modus-themes-subtle-green ((,c :background ,bg-green-subtle :foreground ,fg-main)))
+ `(modus-themes-subtle-yellow ((,c :background ,bg-yellow-subtle :foreground ,fg-main)))
+ `(modus-themes-subtle-blue ((,c :background ,bg-blue-subtle :foreground ,fg-main)))
+ `(modus-themes-subtle-magenta ((,c :background ,bg-magenta-subtle :foreground ,fg-main)))
+ `(modus-themes-subtle-cyan ((,c :background ,bg-cyan-subtle :foreground ,fg-main)))
+;;;;; intense colored backgrounds
+ `(modus-themes-intense-red ((,c :background ,bg-red-intense :foreground ,fg-main)))
+ `(modus-themes-intense-green ((,c :background ,bg-green-intense :foreground ,fg-main)))
+ `(modus-themes-intense-yellow ((,c :background ,bg-yellow-intense :foreground ,fg-main)))
+ `(modus-themes-intense-blue ((,c :background ,bg-blue-intense :foreground ,fg-main)))
+ `(modus-themes-intense-magenta ((,c :background ,bg-magenta-intense :foreground ,fg-main)))
+ `(modus-themes-intense-cyan ((,c :background ,bg-cyan-intense :foreground ,fg-main)))
+;;;;; mark indicators
+ ;; color combinations intended for Dired, Ibuffer, or equivalent
+ `(modus-themes-mark-alt ((,c :inherit bold :background ,bg-mark-other :foreground ,fg-mark-other)))
+ `(modus-themes-mark-del ((,c :inherit bold :background ,bg-mark-delete :foreground ,fg-mark-delete)))
+ `(modus-themes-mark-sel ((,c :inherit bold :background ,bg-mark-select :foreground ,fg-mark-select)))
+;;;;; heading levels
+ ;; styles for regular headings used in Org, Markdown, Info, etc.
+ `(modus-themes-heading-0 ((,c ,@(modus-themes--heading 0 fg-heading-0 bg-heading-0 overline-heading-0))))
+ `(modus-themes-heading-1 ((,c ,@(modus-themes--heading 1 fg-heading-1 bg-heading-1 overline-heading-1))))
+ `(modus-themes-heading-2 ((,c ,@(modus-themes--heading 2 fg-heading-2 bg-heading-2 overline-heading-2))))
+ `(modus-themes-heading-3 ((,c ,@(modus-themes--heading 3 fg-heading-3 bg-heading-3 overline-heading-3))))
+ `(modus-themes-heading-4 ((,c ,@(modus-themes--heading 4 fg-heading-4 bg-heading-4 overline-heading-4))))
+ `(modus-themes-heading-5 ((,c ,@(modus-themes--heading 5 fg-heading-5 bg-heading-5 overline-heading-5))))
+ `(modus-themes-heading-6 ((,c ,@(modus-themes--heading 6 fg-heading-6 bg-heading-6 overline-heading-6))))
+ `(modus-themes-heading-7 ((,c ,@(modus-themes--heading 7 fg-heading-7 bg-heading-7 overline-heading-7))))
+ `(modus-themes-heading-8 ((,c ,@(modus-themes--heading 8 fg-heading-8 bg-heading-8 overline-heading-8))))
+;;;;; language checkers
+ `(modus-themes-lang-error ((,c :underline (:style wave :color ,underline-err))))
+ `(modus-themes-lang-note ((,c :underline (:style wave :color ,underline-note))))
+ `(modus-themes-lang-warning ((,c :underline (:style wave :color ,underline-warning))))
+;;;;; prominent semantic notes
+ `(modus-themes-prominent-error ((,c :background ,bg-prominent-err :foreground ,fg-prominent-err)))
+ `(modus-themes-prominent-note ((,c :background ,bg-prominent-note :foreground ,fg-prominent-note)))
+ `(modus-themes-prominent-warning ((,c :background ,bg-prominent-warning :foreground ,fg-prominent-warning)))
+;;;;; markup
+ `(modus-themes-prose-code ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-code)))
+ `(modus-themes-prose-macro ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-macro)))
+ `(modus-themes-prose-verbatim ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-verbatim)))
+;;;;; search
+ `(modus-themes-search-current ((,c :background ,bg-yellow-intense :foreground ,fg-main)))
+ `(modus-themes-search-lazy ((,c :background ,bg-cyan-intense :foreground ,fg-main)))
+;;;;; completion frameworks
+ `(modus-themes-completion-match-0 ((,c ,@(modus-themes--completion-match fg-completion-match-0 bg-completion-match-0))))
+ `(modus-themes-completion-match-1 ((,c ,@(modus-themes--completion-match fg-completion-match-1 bg-completion-match-1))))
+ `(modus-themes-completion-match-2 ((,c ,@(modus-themes--completion-match fg-completion-match-2 bg-completion-match-2))))
+ `(modus-themes-completion-match-3 ((,c ,@(modus-themes--completion-match fg-completion-match-3 bg-completion-match-3))))
+ `(modus-themes-completion-selected ((,c ,@(modus-themes--completion-line bg-completion))))
+;;;;; typography
+ `(modus-themes-bold ((,c ,@(modus-themes--bold-weight))))
+ `(modus-themes-fixed-pitch ((,c ,@(modus-themes--fixed-pitch))))
+ `(modus-themes-slant ((,c ,@(modus-themes--slant))))
+ `(modus-themes-ui-variable-pitch ((,c ,@(modus-themes--variable-pitch-ui))))
+;;;;; other custom faces
+ `(modus-themes-button ((,c :inherit variable-pitch
+ :box (:line-width 1 :color ,border :style released-button)
+ :background ,bg-button-active
+ :foreground ,fg-button-active)))
+ `(modus-themes-key-binding ((,c :inherit (bold modus-themes-fixed-pitch) :foreground ,keybind)))
+ `(modus-themes-prompt ((,c ,@(modus-themes--prompt fg-prompt bg-prompt))))
+ `(modus-themes-reset-soft ((,c :background ,bg-main :foreground ,fg-main
+ :weight normal :slant normal :strike-through nil
+ :box nil :underline nil :overline nil :extend nil)))
+;;;; standard faces
+;;;;; absolute essentials
+ `(default ((,c :background ,bg-main :foreground ,fg-main)))
+ `(cursor ((,c :background ,cursor)))
+ `(fringe ((,c :background ,fringe :foreground ,fg-main)))
+ `(menu ((,c :background ,bg-dim :foreground ,fg-main)))
+ `(scroll-bar ((,c :background ,bg-dim :foreground ,fg-dim)))
+ `(tool-bar ((,c :background ,bg-dim :foreground ,fg-main)))
+ `(vertical-border ((,c :foreground ,border)))
+;;;;; basic and/or ungrouped styles
+ `(appt-notification ((,c :inherit error)))
+ `(blink-matching-paren-highlight-offscreen ((,c :background ,bg-paren-match)))
+ `(bold ((,c :weight bold)))
+ `(bold-italic ((,c :inherit (bold italic))))
+ `(underline ((,c :underline ,fg-dim)))
+ `(buffer-menu-buffer ((,c :inherit bold)))
+ `(child-frame-border ((,c :background ,border)))
+ `(comint-highlight-input ((,c :inherit bold)))
+ `(comint-highlight-prompt ((,c :inherit modus-themes-prompt)))
+ `(confusingly-reordered ((,c :inherit modus-themes-lang-error)))
+ `(edmacro-label ((,c :inherit bold :foreground ,accent-0)))
+ `(elisp-shorthand-font-lock-face ((,c :inherit font-lock-variable-name-face)))
+ `(error ((,c :inherit bold :foreground ,err)))
+ `(escape-glyph ((,c :foreground ,err)))
+ `(file-name-shadow ((,c :inherit shadow)))
+ `(header-line ((,c :inherit modus-themes-ui-variable-pitch :background ,bg-dim)))
+ `(header-line-highlight ((,c :inherit highlight)))
+ `(help-argument-name ((,c :inherit modus-themes-slant :foreground ,variable)))
+ `(help-key-binding ((,c :inherit modus-themes-key-binding)))
+ `(highlight ((,c :background ,bg-hover :foreground ,fg-main)))
+ `(homoglyph ((,c :foreground ,warning)))
+ `(ibuffer-locked-buffer ((,c :foreground ,warning)))
+ `(icon-button ((,c :inherit modus-themes-button)))
+ `(italic ((,c :slant italic)))
+ `(nobreak-hyphen ((,c :foreground ,err)))
+ `(nobreak-space ((,c :foreground ,err :underline t)))
+ `(menu ((,c :inverse-video unspecified :background ,bg-active :foreground ,fg-main)))
+ `(minibuffer-prompt ((,c :inherit modus-themes-prompt)))
+ `(mm-command-output ((,c :foreground ,mail-part)))
+ `(mm-uu-extract ((,c :foreground ,mail-part)))
+ `(next-error ((,c :inherit modus-themes-prominent-error :extend t)))
+ `(pgtk-im-0 ((,c :inherit modus-themes-prominent-note)))
+ `(read-multiple-choice-face ((,c :inherit (bold modus-themes-mark-alt))))
+ `(rectangle-preview ((,c :inherit secondary-selection)))
+ `(region ((,c :background ,bg-region :foreground ,fg-region)))
+ `(secondary-selection ((,c :background ,bg-hover-secondary :foreground ,fg-main)))
+ `(separator-line ((,c :underline ,bg-active)))
+ `(shadow ((,c :foreground ,fg-dim)))
+ `(success ((,c :inherit bold :foreground ,info)))
+ `(trailing-whitespace ((,c :background ,bg-space-err)))
+ `(warning ((,c :inherit bold :foreground ,warning)))
+;;;;; buttons, links, widgets
+ `(button ((,c :background ,bg-link :foreground ,fg-link :underline ,underline-link)))
+ `(link ((,c :inherit button)))
+ `(link-visited ((,c :background ,bg-link-visited :foreground ,fg-link-visited :underline ,underline-link-visited)))
+ `(tooltip ((,c :background ,bg-active :foreground ,fg-main)))
+;;;;; agda2-mode
+ `(agda2-highlight-bound-variable-face ((,c :inherit font-lock-variable-name-face)))
+ `(agda2-highlight-catchall-clause-face ((,c :background ,bg-inactive)))
+ `(agda2-highlight-coinductive-constructor-face ((,c :inherit font-lock-type-face)))
+ `(agda2-highlight-coverage-problem-face ((,c :inherit modus-themes-lang-error)))
+ `(agda2-highlight-datatype-face ((,c :inherit font-lock-type-face)))
+ `(agda2-highlight-deadcode-face ((,c :background ,bg-active)))
+ `(agda2-highlight-dotted-face ((,c :inherit font-lock-variable-name-face)))
+ `(agda2-highlight-error-face ((,c :inherit modus-themes-lang-error)))
+ `(agda2-highlight-field-face ((,c :inherit font-lock-type-face)))
+ `(agda2-highlight-function-face ((,c :inherit font-lock-function-name-face)))
+ `(agda2-highlight-generalizable-variable-face ((,c :inherit font-lock-variable-name-face)))
+ `(agda2-highlight-incomplete-pattern-face ((,c :inherit modus-themes-lang-warning)))
+ `(agda2-highlight-inductive-constructor-face ((,c :inherit font-lock-type-face)))
+ `(agda2-highlight-keyword-face ((,c :inherit font-lock-keyword-face)))
+ `(agda2-highlight-macro-face ((,c :inherit font-lock-keyword-face)))
+ `(agda2-highlight-module-face ((,c :inherit font-lock-variable-name-face)))
+ `(agda2-highlight-number-face ((,c :inherit shadow)))
+ `(agda2-highlight-operator-face ((,c :inherit font-lock-variable-name-face)))
+ `(agda2-highlight-positivity-problem-face ((,c :inherit modus-themes-lang-warning)))
+ `(agda2-highlight-postulate-face ((,c :inherit font-lock-type-face)))
+ `(agda2-highlight-pragma-face ((,c :inherit font-lock-preprocessor-face)))
+ `(agda2-highlight-primitive-face ((,c :inherit font-lock-type-face)))
+ `(agda2-highlight-primitive-type-face ((,c :inherit font-lock-type-face)))
+ `(agda2-highlight-record-face ((,c :inherit font-lock-type-face)))
+ `(agda2-highlight-string-face ((,c :inherit font-lock-string-face)))
+ `(agda2-highlight-symbol-face ((,c :inherit font-lock-constant-face)))
+ `(agda2-highlight-termination-problem-face ((,c :inherit modus-themes-lang-warning)))
+ `(agda2-highlight-typechecks-face ((,c :inherit font-lock-warning-face)))
+ `(agda2-highlight-unsolved-constraint-face ((,c :inherit modus-themes-lang-warning)))
+ `(agda2-highlight-unsolved-meta-face ((,c :inherit modus-themes-lang-warning)))
+;;;;; all-the-icons
+ `(all-the-icons-blue ((,c :foreground ,blue-cooler)))
+ `(all-the-icons-blue-alt ((,c :foreground ,blue-warmer)))
+ `(all-the-icons-cyan ((,c :foreground ,cyan)))
+ `(all-the-icons-cyan-alt ((,c :foreground ,cyan-warmer)))
+ `(all-the-icons-dblue ((,c :foreground ,blue-faint)))
+ `(all-the-icons-dcyan ((,c :foreground ,cyan-faint)))
+ `(all-the-icons-dgreen ((,c :foreground ,green-faint)))
+ `(all-the-icons-dmaroon ((,c :foreground ,magenta-faint)))
+ `(all-the-icons-dorange ((,c :foreground ,red-faint)))
+ `(all-the-icons-dpink ((,c :foreground ,magenta-faint)))
+ `(all-the-icons-dpurple ((,c :foreground ,magenta-cooler)))
+ `(all-the-icons-dred ((,c :foreground ,red)))
+ `(all-the-icons-dsilver ((,c :foreground ,cyan-faint)))
+ `(all-the-icons-dyellow ((,c :foreground ,yellow-faint)))
+ `(all-the-icons-green ((,c :foreground ,green)))
+ `(all-the-icons-lblue ((,c :foreground ,blue-cooler)))
+ `(all-the-icons-lcyan ((,c :foreground ,cyan)))
+ `(all-the-icons-lgreen ((,c :foreground ,green-warmer)))
+ `(all-the-icons-lmaroon ((,c :foreground ,magenta-warmer)))
+ `(all-the-icons-lorange ((,c :foreground ,red-warmer)))
+ `(all-the-icons-lpink ((,c :foreground ,magenta)))
+ `(all-the-icons-lpurple ((,c :foreground ,magenta-faint)))
+ `(all-the-icons-lred ((,c :foreground ,red-faint)))
+ `(all-the-icons-lsilver ((,c :foreground "gray50")))
+ `(all-the-icons-lyellow ((,c :foreground ,yellow-warmer)))
+ `(all-the-icons-maroon ((,c :foreground ,magenta)))
+ `(all-the-icons-orange ((,c :foreground ,yellow-warmer)))
+ `(all-the-icons-pink ((,c :foreground ,magenta-warmer)))
+ `(all-the-icons-purple ((,c :foreground ,magenta-cooler)))
+ `(all-the-icons-purple-alt ((,c :foreground ,blue-warmer)))
+ `(all-the-icons-red ((,c :foreground ,red)))
+ `(all-the-icons-red-alt ((,c :foreground ,red-cooler)))
+ `(all-the-icons-silver ((,c :foreground "gray50")))
+ `(all-the-icons-yellow ((,c :foreground ,yellow)))
+;;;;; all-the-icons-dired
+ `(all-the-icons-dired-dir-face ((,c :foreground ,cyan-faint)))
+;;;;; all-the-icons-ibuffer
+ `(all-the-icons-ibuffer-dir-face ((,c :foreground ,cyan-faint)))
+ `(all-the-icons-ibuffer-file-face ((,c :foreground ,blue-faint)))
+ `(all-the-icons-ibuffer-mode-face ((,c :foreground ,cyan)))
+ `(all-the-icons-ibuffer-size-face ((,c :foreground ,cyan-cooler)))
+;;;;; annotate
+ `(annotate-annotation ((,c :inherit modus-themes-subtle-blue)))
+ `(annotate-annotation-secondary ((,c :inherit modus-themes-subtle-magenta)))
+ `(annotate-highlight ((,c :background ,bg-blue-subtle :underline ,blue-intense)))
+ `(annotate-highlight-secondary ((,c :background ,bg-magenta-subtle :underline ,magenta-intense)))
+;;;;; ansi-color
+ ;; Those are in Emacs28.
+ `(ansi-color-black ((,c :background ,bg-term-black :foreground ,fg-term-black)))
+ `(ansi-color-blue ((,c :background ,bg-term-blue :foreground ,fg-term-blue)))
+ `(ansi-color-bold ((,c :inherit bold)))
+ `(ansi-color-bright-black ((,c :background ,bg-term-black-bright :foreground ,fg-term-black-bright)))
+ `(ansi-color-bright-blue ((,c :background ,bg-term-blue-bright :foreground ,fg-term-blue-bright)))
+ `(ansi-color-bright-cyan ((,c :background ,bg-term-cyan-bright :foreground ,fg-term-cyan-bright)))
+ `(ansi-color-bright-green ((,c :background ,bg-term-green-bright :foreground ,fg-term-green-bright)))
+ `(ansi-color-bright-magenta ((,c :background ,bg-term-magenta-bright :foreground ,fg-term-magenta-bright)))
+ `(ansi-color-bright-red ((,c :background ,bg-term-red-bright :foreground ,fg-term-red-bright)))
+ `(ansi-color-bright-white ((,c :background ,bg-term-white-bright :foreground ,fg-term-white-bright)))
+ `(ansi-color-bright-yellow ((,c :background ,bg-term-yellow-bright :foreground ,fg-term-yellow-bright)))
+ `(ansi-color-cyan ((,c :background ,bg-term-cyan :foreground ,fg-term-cyan)))
+ `(ansi-color-green ((,c :background ,bg-term-green :foreground ,fg-term-green)))
+ `(ansi-color-magenta ((,c :background ,bg-term-magenta :foreground ,fg-term-magenta)))
+ `(ansi-color-red ((,c :background ,bg-term-red :foreground ,fg-term-red)))
+ `(ansi-color-white ((,c :background ,bg-term-white :foreground ,fg-term-white)))
+ `(ansi-color-yellow ((,c :background ,bg-term-yellow :foreground ,fg-term-yellow)))
+;;;;; anzu
+ `(anzu-match-1 ((,c :inherit modus-themes-subtle-cyan)))
+ `(anzu-match-2 ((,c :inherit modus-themes-search-current)))
+ `(anzu-match-3 ((,c :inherit modus-themes-subtle-yellow)))
+ `(anzu-mode-line ((,c :inherit bold)))
+ `(anzu-mode-line-no-match ((,c :inherit error)))
+ `(anzu-replace-highlight ((,c :inherit modus-themes-prominent-error :underline t)))
+ `(anzu-replace-to ((,c :inherit modus-themes-search-current)))
+;;;;; auctex and Tex
+ `(font-latex-bold-face ((,c :inherit bold)))
+ `(font-latex-doctex-documentation-face ((,c :inherit font-lock-doc-face)))
+ `(font-latex-doctex-preprocessor-face ((,c :inherit font-lock-preprocessor-face)))
+ `(font-latex-italic-face ((,c :inherit italic)))
+ `(font-latex-math-face ((,c :inherit font-lock-constant-face)))
+ `(font-latex-script-char-face ((,c :inherit font-lock-builtin-face)))
+ `(font-latex-sectioning-5-face ((,c :inherit (bold modus-themes-variable-pitch) :foreground ,fg-alt)))
+ `(font-latex-sedate-face ((,c :inherit font-lock-keyword-face)))
+ `(font-latex-slide-title-face ((,c :inherit modus-themes-heading-1)))
+ `(font-latex-string-face ((,c :inherit font-lock-string-face)))
+ `(font-latex-subscript-face ((,c :height 0.95)))
+ `(font-latex-superscript-face ((,c :height 0.95)))
+ `(font-latex-underline-face ((,c :inherit underline)))
+ `(font-latex-verbatim-face ((,c :inherit modus-themes-prose-verbatim)))
+ `(font-latex-warning-face ((,c :inherit font-lock-warning-face)))
+ `(tex-verbatim ((,c :inherit modus-themes-prose-verbatim)))
+ ;; `(texinfo-heading ((,c :foreground ,magenta)))
+ `(TeX-error-description-error ((,c :inherit error)))
+ `(TeX-error-description-help ((,c :inherit success)))
+ `(TeX-error-description-tex-said ((,c :inherit success)))
+ `(TeX-error-description-warning ((,c :inherit warning)))
+;;;;; auto-dim-other-buffers
+ `(auto-dim-other-buffers-face ((,c :background ,bg-inactive)))
+;;;;; avy
+ `(avy-background-face ((,c :background ,bg-dim :foreground ,fg-dim :extend t)))
+ `(avy-goto-char-timer-face ((,c :inherit bold :background ,bg-active)))
+ `(avy-lead-face ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-0)))
+ `(avy-lead-face-0 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-1)))
+ `(avy-lead-face-1 ((,c :inherit modus-themes-reset-soft :background ,bg-inactive)))
+ `(avy-lead-face-2 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-2)))
+;;;;; aw (ace-window)
+ `(aw-background-face ((,c :foreground "gray50")))
+ `(aw-key-face ((,c :inherit modus-themes-key-binding)))
+ `(aw-leading-char-face ((,c :inherit (bold modus-themes-reset-soft) :height 1.5 :foreground ,red-intense)))
+ `(aw-minibuffer-leading-char-face ((,c :inherit modus-themes-key-binding)))
+ `(aw-mode-line-face ((,c :inherit bold)))
+;;;;; binder
+ `(binder-sidebar-highlight ((,c :inherit modus-themes-hl-line)))
+ `(binder-sidebar-marked ((,c :inherit modus-themes-mark-sel)))
+ `(binder-sidebar-missing ((,c :inherit modus-themes-mark-del)))
+ `(binder-sidebar-tags ((,c :foreground ,variable)))
+;;;;; breadcrumb
+ `(breadcrumb-face ((,c :foreground ,fg-alt)))
+ `(breadcrumb-imenu-leaf-face ((,c :inherit bold :foreground ,modeline-info))) ; same as `which-func'
+ `(breadcrumb-project-leaf-face ((,c :inherit bold)))
+;;;;; bongo
+ `(bongo-album-title (( )))
+ `(bongo-artist ((,c :foreground ,accent-0)))
+ `(bongo-currently-playing-track ((,c :inherit bold)))
+ `(bongo-elapsed-track-part ((,c :background ,bg-inactive :underline t)))
+ `(bongo-filled-seek-bar ((,c :background ,bg-hover)))
+ `(bongo-marked-track ((,c :inherit modus-themes-mark-alt)))
+ `(bongo-marked-track-line ((,c :background ,bg-dim)))
+ `(bongo-played-track ((,c :inherit shadow :strike-through t)))
+ `(bongo-track-length ((,c :inherit shadow)))
+ `(bongo-track-title ((,c :foreground ,accent-1)))
+ `(bongo-unfilled-seek-bar ((,c :background ,bg-dim)))
+;;;;; boon
+ `(boon-modeline-cmd ((,c :inherit modus-themes-intense-blue)))
+ `(boon-modeline-ins ((,c :inherit modus-themes-intense-red)))
+ `(boon-modeline-off ((,c :inherit modus-themes-intense-yellow)))
+ `(boon-modeline-spc ((,c :inherit modus-themes-intense-green)))
+;;;;; bookmark
+ `(bookmark-face ((,c :inherit success)))
+ `(bookmark-menu-bookmark ((,c :inherit bold)))
+;;;;; calendar and diary
+ `(calendar-month-header ((,c :inherit bold)))
+ `(calendar-today ((,c :inherit bold :underline t)))
+ `(calendar-weekday-header ((,c :foreground ,date-weekday)))
+ `(calendar-weekend-header ((,c :foreground ,date-weekend)))
+ `(diary ((,c :foreground ,date-common)))
+ `(diary-anniversary ((,c :foreground ,date-holiday)))
+ `(diary-time ((,c :foreground ,date-common)))
+ `(holiday ((,c :foreground ,date-holiday)))
+;;;;; calibredb
+ ;; NOTE 2022-12-27: Calibredb needs to be reviewed. I had to
+ ;; change the applicable colors for the transition to
+ ;; modus-themes version 4, but I cannot test this currently (it
+ ;; depends on an external program).
+ `(calibredb-archive-face ((,c :foreground ,accent-3)))
+ `(calibredb-author-face ((,c :foreground ,name)))
+ `(calibredb-comment-face ((,c :inherit shadow)))
+ `(calibredb-date-face ((,c :foreground ,date-common)))
+ `(calibredb-edit-annotation-header-title-face ((,c :inherit bold)))
+ `(calibredb-favorite-face ((,c :foreground ,red-warmer)))
+ `(calibredb-file-face (( )))
+ `(calibredb-format-face ((,c :foreground ,fg-alt)))
+ `(calibredb-highlight-face ((,c :inherit success)))
+ `(calibredb-id-face (( )))
+ `(calibredb-ids-face (( )))
+ `(calibredb-search-header-highlight-face ((,c :background ,bg-hl-line :extend t)))
+ `(calibredb-search-header-library-name-face ((,c :foreground ,accent-2)))
+ `(calibredb-search-header-library-path-face ((,c :inherit bold)))
+ `(calibredb-search-header-sort-face ((,c :inherit bold :foreground ,accent-1)))
+ `(calibredb-search-header-total-face ((,c :inherit bold :foreground ,accent-0)))
+ `(calibredb-search-header-filter-face ((,c :inherit bold)))
+ `(calibredb-mark-face ((,c :inherit modus-themes-mark-sel)))
+ `(calibredb-size-face (( )))
+ `(calibredb-tag-face ((,c :foreground ,fg-alt)))
+;;;;; centaur-tabs
+ `(centaur-tabs-active-bar-face ((,c :background ,blue)))
+ `(centaur-tabs-close-mouse-face ((,c :inherit bold :foreground ,red :underline t)))
+ `(centaur-tabs-close-selected ((,c :inherit centaur-tabs-selected)))
+ `(centaur-tabs-close-unselected ((,c :inherit centaur-tabs-unselected)))
+ `(centaur-tabs-modified-marker-selected ((,c :inherit centaur-tabs-selected)))
+ `(centaur-tabs-modified-marker-unselected ((,c :inherit centaur-tabs-unselected)))
+ `(centaur-tabs-default ((,c :background ,bg-main)))
+ `(centaur-tabs-selected ((,c :inherit bold :box (:line-width -2 :color ,bg-tab-current) :background ,bg-tab-current)))
+ `(centaur-tabs-selected-modified ((,c :inherit (italic centaur-tabs-selected))))
+ `(centaur-tabs-unselected ((,c :box (:line-width -2 :color ,bg-tab-other) :background ,bg-tab-other)))
+ `(centaur-tabs-unselected-modified ((,c :inherit (italic centaur-tabs-unselected))))
+;;;;; change-log and log-view (`vc-print-log' and `vc-print-root-log')
+ `(change-log-acknowledgment ((,c :foreground ,identifier)))
+ `(change-log-conditionals ((,c :inherit error)))
+ `(change-log-date ((,c :foreground ,date-common)))
+ `(change-log-email ((,c :foreground ,fg-alt)))
+ `(change-log-file ((,c :inherit bold)))
+ `(change-log-function ((,c :inherit warning)))
+ `(change-log-list ((,c :inherit bold)))
+ `(change-log-name ((,c :foreground ,name)))
+ `(log-edit-header ((,c :inherit bold)))
+ `(log-edit-headers-separator ((,c :height 1 :background ,border :extend t)))
+ `(log-edit-summary ((,c :inherit success)))
+ `(log-edit-unknown-header ((,c :inherit shadow)))
+ `(log-view-commit-body (( )))
+ `(log-view-file ((,c :inherit bold)))
+ `(log-view-message ((,c :foreground ,identifier)))
+;;;;; cider
+ `(cider-deprecated-face ((,c :inherit warning)))
+ `(cider-enlightened-face ((,c :box ,warning)))
+ `(cider-enlightened-local-face ((,c :inherit warning)))
+ `(cider-error-highlight-face ((,c :inherit modus-themes-lang-error)))
+ `(cider-fringe-good-face ((,c :foreground ,info)))
+ `(cider-instrumented-face ((,c :box ,err)))
+ `(cider-reader-conditional-face ((,c :inherit font-lock-type-face)))
+ `(cider-repl-prompt-face ((,c :inherit minibuffer-prompt)))
+ `(cider-repl-stderr-face ((,c :foreground ,err)))
+ `(cider-repl-stdout-face (( )))
+ `(cider-warning-highlight-face ((,c :inherit modus-themes-lang-warning)))
+;;;;; circe (and lui)
+ `(circe-fool-face ((,c :inherit shadow)))
+ `(circe-highlight-nick-face ((,c :inherit error)))
+ `(circe-prompt-face ((,c :inherit modus-themes-prompt)))
+ `(circe-server-face ((,c :inherit shadow)))
+ `(lui-button-face ((,c :inherit button)))
+ `(lui-highlight-face ((,c :inherit error)))
+ `(lui-time-stamp-face ((,c :foreground ,date-common)))
+;;;;; citar
+ `(citar ((,c :inherit shadow)))
+ `(citar-highlight (( )))
+;;;;; clojure-mode
+ `(clojure-keyword-face ((,c :inherit font-lock-builtin-face)))
+;;;;; column-enforce-mode
+ `(column-enforce-face ((,c :inherit modus-themes-prominent-error)))
+;;;;; company-mode
+ `(company-echo-common ((,c :inherit modus-themes-completion-match-0)))
+ `(company-preview ((,c :background ,bg-dim :foreground ,fg-dim)))
+ `(company-preview-common ((,c :inherit company-echo-common)))
+ `(company-preview-search ((,c :background ,bg-yellow-intense)))
+ `(company-scrollbar-bg ((,c :background ,bg-active)))
+ `(company-scrollbar-fg ((,c :background ,fg-main)))
+ `(company-template-field ((,c :background ,bg-active)))
+ `(company-tooltip ((,c :background ,bg-dim)))
+ `(company-tooltip-annotation ((,c :inherit completions-annotations)))
+ `(company-tooltip-common ((,c :inherit company-echo-common)))
+ `(company-tooltip-deprecated ((,c :inherit company-tooltip :strike-through t)))
+ `(company-tooltip-mouse ((,c :inherit highlight)))
+ `(company-tooltip-scrollbar-thumb ((,c :background ,fg-alt)))
+ `(company-tooltip-scrollbar-track ((,c :background ,bg-inactive)))
+ `(company-tooltip-search ((,c :inherit secondary-selection)))
+ `(company-tooltip-search-selection ((,c :inherit secondary-selection :underline t)))
+ `(company-tooltip-selection ((,c :inherit modus-themes-completion-selected)))
+;;;;; compilation
+ `(compilation-column-number ((,c :inherit compilation-line-number)))
+ `(compilation-error ((,c :inherit modus-themes-bold :foreground ,err)))
+ `(compilation-info ((,c :inherit modus-themes-bold :foreground ,info)))
+ `(compilation-line-number ((,c :inherit shadow)))
+ `(compilation-mode-line-exit ((,c :inherit bold)))
+ `(compilation-mode-line-fail ((,c :inherit bold :foreground ,modeline-err)))
+ `(compilation-mode-line-run ((,c :inherit bold :foreground ,modeline-warning)))
+ `(compilation-warning ((,c :inherit modus-themes-bold :foreground ,warning)))
+;;;;; completions
+ `(completions-annotations ((,c :inherit modus-themes-slant :foreground ,docstring)))
+ `(completions-common-part ((,c :inherit modus-themes-completion-match-0)))
+ `(completions-first-difference ((,c :inherit modus-themes-completion-match-1)))
+;;;;; consult
+ `(consult-async-split ((,c :inherit error)))
+ `(consult-file ((,c :inherit modus-themes-bold :foreground ,info)))
+ `(consult-key ((,c :inherit modus-themes-key-binding)))
+ `(consult-imenu-prefix ((,c :inherit shadow)))
+ `(consult-line-number ((,c :inherit shadow)))
+ `(consult-line-number-prefix ((,c :inherit shadow)))
+;;;;; corfu
+ `(corfu-current ((,c :inherit modus-themes-completion-selected)))
+ `(corfu-bar ((,c :background ,fg-dim)))
+ `(corfu-border ((,c :background ,bg-active)))
+ `(corfu-default ((,c :background ,bg-dim)))
+;;;;; corfu-candidate-overlay
+ `(corfu-candidate-overlay-face ((t :inherit shadow)))
+;;;;; corfu-quick
+ `(corfu-quick1 ((,c :inherit bold :background ,bg-char-0)))
+ `(corfu-quick2 ((,c :inherit bold :background ,bg-char-1)))
+;;;;; counsel
+ `(counsel-active-mode ((,c :foreground ,keyword)))
+ `(counsel-application-name ((,c :foreground ,name)))
+ `(counsel-key-binding ((,c :inherit modus-themes-key-binding)))
+ `(counsel-outline-default ((,c :foreground ,fg-main)))
+ `(counsel-variable-documentation ((,c :inherit font-lock-doc-face)))
+;;;;; cperl-mode
+ `(cperl-nonoverridable-face ((,c :foreground unspecified)))
+ `(cperl-array-face ((,c :inherit font-lock-keyword-face)))
+ `(cperl-hash-face ((,c :inherit font-lock-variable-name-face)))
+;;;;; crontab-mode
+ `(crontab-minute ((,c :foreground ,string)))
+ `(crontab-hour ((,c :foreground ,keyword)))
+ `(crontab-month-day ((,c :foreground ,builtin)))
+ `(crontab-month ((,c :foreground ,constant)))
+ `(crontab-week-day ((,c :foreground ,variable)))
+ `(crontab-predefined ((,c :foreground ,string)))
+;;;;; csv-mode
+ `(csv-separator-face ((,c :foreground ,red-intense)))
+;;;;; ctrlf
+ `(ctrlf-highlight-active ((,c :inherit modus-themes-search-current)))
+ `(ctrlf-highlight-line ((,c :background ,bg-hl-line :extend t)))
+ `(ctrlf-highlight-passive ((,c :inherit modus-themes-search-lazy)))
+;;;;; custom (M-x customize)
+ `(custom-button ((,c :inherit modus-themes-button)))
+ `(custom-button-mouse ((,c :inherit (highlight custom-button))))
+ `(custom-button-pressed ((,c :inherit (secondary-selection custom-button))))
+ `(custom-changed ((,c :background ,bg-changed)))
+ `(custom-comment ((,c :inherit shadow)))
+ `(custom-comment-tag ((,c :inherit (bold shadow))))
+ `(custom-invalid ((,c :inherit error :strike-through t)))
+ `(custom-modified ((,c :inherit custom-changed)))
+ `(custom-rogue ((,c :inherit custom-invalid)))
+ `(custom-set ((,c :inherit success)))
+ `(custom-state ((,c :foreground ,warning)))
+ `(custom-themed ((,c :inherit custom-changed)))
+ `(custom-variable-obsolete ((,c :inherit shadow)))
+ `(custom-face-tag ((,c :inherit bold :foreground ,type)))
+ `(custom-group-tag ((,c :inherit bold :foreground ,builtin)))
+ `(custom-group-tag-1 ((,c :inherit bold :foreground ,constant)))
+ `(custom-variable-tag ((,c :inherit bold :foreground ,variable)))
+;;;;; dashboard
+ `(dashboard-heading ((,c :foreground ,name)))
+ `(dashboard-items-face (( ))) ; use the underlying style of all-the-icons
+;;;;; deadgrep
+ `(deadgrep-filename-face ((,c :inherit bold :foreground ,name)))
+ `(deadgrep-match-face ((,c :inherit match)))
+ `(deadgrep-meta-face ((,c :inherit shadow)))
+ `(deadgrep-regexp-metachar-face ((,c :inherit font-lock-regexp-grouping-construct)))
+ `(deadgrep-search-term-face ((,c :inherit success)))
+;;;;; deft
+ `(deft-filter-string-face ((,c :inherit success)))
+ `(deft-header-face ((,c :inherit shadow)))
+ `(deft-separator-face ((,c :foreground "gray50")))
+ `(deft-summary-face ((,c :inherit (shadow modus-themes-slant))))
+ `(deft-time-face ((,c :foreground ,date-common)))
+ `(deft-title-face ((,c :inherit bold)))
+;;;;; devdocs
+ `(devdocs-code-block ((,c :inherit modus-themes-fixed-pitch :background ,bg-dim :extend t)))
+;;;;; dictionary
+ `(dictionary-button-face ((,c :inherit bold)))
+ `(dictionary-reference-face ((,c :inherit link)))
+ `(dictionary-word-definition-face (( )))
+ `(dictionary-word-entry-face ((,c :inherit font-lock-comment-face)))
+;;;;; diff-hl
+ `(diff-hl-change ((,c :background ,bg-changed-fringe)))
+ `(diff-hl-delete ((,c :background ,bg-removed-fringe)))
+ `(diff-hl-insert ((,c :background ,bg-added-fringe)))
+ `(diff-hl-reverted-hunk-highlight ((,c :background ,fg-main :foreground ,bg-main)))
+;;;;; diff-mode
+ `(diff-added ((,c :background ,bg-added :foreground ,fg-added)))
+ `(diff-changed ((,c :background ,bg-changed :foreground ,fg-changed :extend t)))
+ `(diff-changed-unspecified ((,c :inherit diff-changed)))
+ `(diff-removed ((,c :background ,bg-removed :foreground ,fg-removed)))
+ `(diff-refine-added ((,c :background ,bg-added-refine :foreground ,fg-added)))
+ `(diff-refine-changed ((,c :background ,bg-changed-refine :foreground ,fg-changed)))
+ `(diff-refine-removed ((,c :background ,bg-removed-refine :foreground ,fg-removed)))
+ `(diff-indicator-added ((,c :inherit diff-added :foreground ,fg-added-intense)))
+ `(diff-indicator-changed ((,c :inherit diff-changed :foreground ,fg-changed-intense)))
+ `(diff-indicator-removed ((,c :inherit diff-removed :foreground ,fg-removed-intense)))
+ `(diff-context (( )))
+ `(diff-error ((,c :inherit error)))
+ `(diff-file-header ((,c :inherit bold)))
+ `(diff-function ((,c :background ,bg-inactive)))
+ `(diff-header (( )))
+ `(diff-hunk-header ((,c :inherit bold :background ,bg-inactive)))
+ `(diff-index ((,c :inherit italic)))
+ `(diff-nonexistent ((,c :inherit bold)))
+;;;;; dim-autoload
+ `(dim-autoload-cookie-line ((,c :inherit font-lock-comment-face)))
+;;;;; dired
+ `(dired-broken-symlink ((,c :inherit button :foreground ,err)))
+ `(dired-directory ((,c :foreground ,accent-0)))
+ `(dired-flagged ((,c :inherit modus-themes-mark-del)))
+ `(dired-header ((,c :inherit bold)))
+ `(dired-ignored ((,c :inherit shadow)))
+ `(dired-mark ((,c :inherit bold)))
+ `(dired-marked ((,c :inherit modus-themes-mark-sel)))
+ `(dired-perm-write ((,c :inherit shadow)))
+ `(dired-symlink ((,c :inherit button :background ,bg-link-symbolic :foreground ,fg-link-symbolic :underline ,underline-link-symbolic)))
+ `(dired-warning ((,c :inherit warning)))
+;;;;; dired-async
+ `(dired-async-failures ((,c :inherit error)))
+ `(dired-async-message ((,c :inherit bold)))
+ `(dired-async-mode-message ((,c :inherit bold)))
+;;;;; dired-git
+ `(dired-git-branch-else ((,c :inherit bold :foreground ,accent-0)))
+ `(dired-git-branch-master ((,c :inherit bold :foreground ,accent-1)))
+;;;;; dired-git-info
+ `(dgi-commit-message-face ((,c :foreground ,docstring)))
+;;;;; dired-narrow
+ `(dired-narrow-blink ((,c :inherit (modus-themes-prominent-warning bold))))
+;;;;; dired-subtree
+ ;; remove backgrounds from dired-subtree faces, else they break
+ ;; dired-{flagged,marked} and any other face that sets a background
+ ;; such as hl-line. Also, denoting depth by varying shades of gray
+ ;; is not good for accessibility.
+ `(dired-subtree-depth-1-face (()))
+ `(dired-subtree-depth-2-face (()))
+ `(dired-subtree-depth-3-face (()))
+ `(dired-subtree-depth-4-face (()))
+ `(dired-subtree-depth-5-face (()))
+ `(dired-subtree-depth-6-face (()))
+;;;;; diredfl
+ `(diredfl-autofile-name ((,c :background ,bg-inactive)))
+ `(diredfl-compressed-file-name ((,c :foreground ,warning)))
+ `(diredfl-compressed-file-suffix ((,c :foreground ,err)))
+ `(diredfl-date-time ((,c :foreground ,date-common)))
+ `(diredfl-deletion ((,c :inherit dired-flagged)))
+ `(diredfl-deletion-file-name ((,c :inherit diredfl-deletion)))
+ `(diredfl-dir-heading ((,c :inherit bold)))
+ `(diredfl-dir-name ((,c :inherit dired-directory)))
+ `(diredfl-dir-priv ((,c :inherit dired-directory)))
+ `(diredfl-exec-priv ((,c :foreground ,accent-1)))
+ `(diredfl-executable-tag ((,c :inherit diredfl-exec-priv)))
+ `(diredfl-file-name ((,c :foreground ,fg-main)))
+ `(diredfl-file-suffix ((,c :foreground ,variable)))
+ `(diredfl-flag-mark ((,c :inherit dired-marked)))
+ `(diredfl-flag-mark-line ((,c :inherit dired-marked)))
+ `(diredfl-ignored-file-name ((,c :inherit shadow)))
+ `(diredfl-link-priv ((,c :foreground ,fg-link)))
+ `(diredfl-no-priv ((,c :inherit shadow)))
+ `(diredfl-number ((,c :inherit shadow)))
+ `(diredfl-other-priv ((,c :foreground ,accent-2)))
+ `(diredfl-rare-priv ((,c :foreground ,accent-3)))
+ `(diredfl-read-priv ((,c :foreground ,fg-main)))
+ `(diredfl-symlink ((,c :inherit dired-symlink)))
+ `(diredfl-tagged-autofile-name ((,c :inherit (diredfl-autofile-name dired-marked))))
+ `(diredfl-write-priv ((,c :foreground ,accent-0)))
+;;;;; disk-usage
+ `(disk-usage-inaccessible ((,c :inherit error)))
+ `(disk-usage-percent ((,c :foreground ,accent-0)))
+ `(disk-usage-size ((,c :foreground ,accent-1)))
+ `(disk-usage-symlink ((,c :inherit dired-symlink)))
+ `(disk-usage-symlink-directory ((,c :inherit dired-symlink)))
+;;;;; display-fill-column-indicator-mode
+ `(fill-column-indicator ((,c :height 1 :background ,bg-active :foreground ,bg-active)))
+;;;;; doom-modeline
+ `(doom-modeline-bar ((,c :background ,blue)))
+ `(doom-modeline-bar-inactive ((,c :background ,border)))
+ `(doom-modeline-battery-charging ((,c :foreground ,modeline-info)))
+ `(doom-modeline-battery-critical ((,c :underline t :foreground ,modeline-err)))
+ `(doom-modeline-battery-error ((,c :underline t :foreground ,modeline-err)))
+ `(doom-modeline-battery-full (( )))
+ `(doom-modeline-battery-warning ((,c :inherit warning)))
+ `(doom-modeline-buffer-file ((,c :inherit bold)))
+ `(doom-modeline-buffer-major-mode (( )))
+ `(doom-modeline-buffer-minor-mode (( )))
+ `(doom-modeline-buffer-modified ((,c :foreground ,modeline-err)))
+ `(doom-modeline-buffer-path (( )))
+ `(doom-modeline-evil-emacs-state ((,c :inherit italic)))
+ `(doom-modeline-evil-insert-state ((,c :foreground ,modeline-info)))
+ `(doom-modeline-evil-motion-state (( )))
+ `(doom-modeline-evil-normal-state (( )))
+ `(doom-modeline-evil-operator-state ((,c :inherit bold)))
+ `(doom-modeline-evil-replace-state ((,c :inherit error)))
+ `(doom-modeline-evil-visual-state ((,c :inherit warning)))
+ `(doom-modeline-info ((,c :inherit success)))
+ `(doom-modeline-input-method (( )))
+ `(doom-modeline-lsp-error ((,c :inherit bold-italic)))
+ `(doom-modeline-lsp-running (( )))
+ `(doom-modeline-lsp-success ((,c :inherit success)))
+ `(doom-modeline-lsp-warning ((,c :inherit warning)))
+ `(doom-modeline-notification ((,c :inherit error)))
+ `(doom-modeline-project-dir (( )))
+ `(doom-modeline-project-parent-dir (( )))
+ `(doom-modeline-project-root-dir (( )))
+ `(doom-modeline-repl-success ((,c :inherit success)))
+ `(doom-modeline-repl-warning ((,c :inherit warning)))
+ `(doom-modeline-time (( )))
+ `(doom-modeline-urgent ((,c :inherit bold-italic :foreground ,modeline-err)))
+ `(doom-modeline-warning ((,c :inherit warning)))
+;;;;; ediff
+ `(ediff-current-diff-A ((,c :background ,bg-removed :foreground ,fg-removed)))
+ `(ediff-current-diff-Ancestor ((,c :background ,bg-region)))
+ `(ediff-current-diff-B ((,c :background ,bg-added :foreground ,fg-added)))
+ `(ediff-current-diff-C ((,c :background ,bg-changed :foreground ,fg-changed)))
+ `(ediff-even-diff-A ((,c :background ,bg-diff-context)))
+ `(ediff-even-diff-Ancestor ((,c :background ,bg-diff-context)))
+ `(ediff-even-diff-B ((,c :background ,bg-diff-context)))
+ `(ediff-even-diff-C ((,c :background ,bg-diff-context)))
+ `(ediff-fine-diff-A ((,c :background ,bg-removed-refine :foreground ,fg-removed)))
+ `(ediff-fine-diff-Ancestor ((,c :inherit modus-themes-subtle-cyan)))
+ `(ediff-fine-diff-B ((,c :background ,bg-added-refine :foreground ,fg-added)))
+ `(ediff-fine-diff-C ((,c :background ,bg-changed-refine :foreground ,fg-changed)))
+ `(ediff-odd-diff-A ((,c :inherit ediff-even-diff-A)))
+ `(ediff-odd-diff-Ancestor ((,c :inherit ediff-even-diff-Ancestor)))
+ `(ediff-odd-diff-B ((,c :inherit ediff-even-diff-B)))
+ `(ediff-odd-diff-C ((,c :inherit ediff-even-diff-C)))
+;;;;; ein (Emacs IPython Notebook)
+ `(ein:basecell-input-area-face ((,c :background ,bg-dim :extend t)))
+ `(ein:cell-output-area (( )))
+ `(ein:cell-output-area-error ((,c :background ,bg-removed :extend t)))
+ `(ein:cell-output-stderr ((,c :background ,bg-removed :extend t)))
+ `(ein:markdowncell-input-area-face (( )))
+ `(ein:notification-tab-normal ((,c :underline t)))
+;;;;; eglot
+ `(eglot-mode-line ((,c :inherit modus-themes-bold :foreground ,modeline-info)))
+ `(eglot-diagnostic-tag-unnecessary-face ((,c :inherit modus-themes-lang-note)))
+;;;;; el-search
+ `(el-search-highlight-in-prompt-face ((,c :inherit italic)))
+ `(el-search-match ((,c :inherit modus-themes-search-current)))
+ `(el-search-other-match ((,c :inherit modus-themes-search-lazy)))
+ `(el-search-occur-match ((,c :inherit match)))
+;;;;; eldoc
+ ;; NOTE: see https://github.com/purcell/package-lint/issues/187
+ (list 'eldoc-highlight-function-argument `((,c :inherit modus-themes-mark-alt)))
+;;;;; eldoc-box
+ `(eldoc-box-body ((,c :background ,bg-dim :foreground ,fg-main)))
+ `(eldoc-box-border ((,c :background ,border)))
+;;;;; elfeed
+ `(elfeed-log-date-face ((,c :inherit elfeed-search-date-face)))
+ `(elfeed-log-debug-level-face ((,c :inherit elfeed-search-filter-face)))
+ `(elfeed-log-error-level-face ((,c :inherit error)))
+ `(elfeed-log-info-level-face ((,c :inherit success)))
+ `(elfeed-log-warn-level-face ((,c :inherit warning)))
+ `(elfeed-search-date-face ((,c :foreground ,date-common)))
+ `(elfeed-search-feed-face ((,c :foreground ,accent-1)))
+ `(elfeed-search-filter-face ((,c :inherit bold)))
+ `(elfeed-search-last-update-face ((,c :inherit bold :foreground ,date-common)))
+ `(elfeed-search-tag-face ((,c :foreground ,accent-0)))
+ `(elfeed-search-title-face ((,c :foreground ,fg-dim)))
+ `(elfeed-search-unread-count-face (( )))
+ `(elfeed-search-unread-title-face ((,c :inherit bold :foreground ,fg-main)))
+;;;;; elfeed-score
+ `(elfeed-score-date-face ((,c :foreground ,date-common)))
+ `(elfeed-score-debug-level-face ((,c :inherit bold)))
+ `(elfeed-score-error-level-face ((,c :inherit error)))
+ `(elfeed-score-info-level-face ((,c :inherit success)))
+ `(elfeed-score-warn-level-face ((,c :inherit warning)))
+;;;;; elpher
+ `(elpher-gemini-heading1 ((,c :inherit modus-themes-heading-1)))
+ `(elpher-gemini-heading2 ((,c :inherit modus-themes-heading-2)))
+ `(elpher-gemini-heading3 ((,c :inherit modus-themes-heading-3)))
+;;;;; embark
+ `(embark-keybinding ((,c :inherit modus-themes-key-binding)))
+ `(embark-collect-marked ((,c :inherit modus-themes-mark-sel)))
+;;;;; ement (ement.el)
+ `(ement-room-fully-read-marker ((,c :inherit success)))
+ `(ement-room-membership ((,c :inherit shadow)))
+ `(ement-room-mention ((,c :inherit highlight)))
+ `(ement-room-name ((,c :inherit bold)))
+ `(ement-room-reactions ((,c :inherit shadow)))
+ `(ement-room-read-receipt-marker ((,c :inherit match)))
+ `(ement-room-self ((,c :inherit bold :foreground ,accent-1)))
+ `(ement-room-self-message ((,c :foreground ,fg-alt)))
+ `(ement-room-timestamp ((,c :inherit shadow)))
+ `(ement-room-timestamp-header ((,c :inherit bold :foreground ,date-common)))
+ `(ement-room-user ((,c :inherit bold :foreground ,accent-0)))
+;;;;; emms
+ `(emms-browser-album-face ((,c :foreground ,keyword)))
+ `(emms-browser-artist-face ((,c :foreground ,variable)))
+ `(emms-browser-composer-face ((,c :foreground ,builtin)))
+ `(emms-browser-performer-face ((,c :inherit emms-browser-artist-face)))
+ `(emms-browser-track-face ((,c :inherit emms-playlist-track-face)))
+ `(emms-browser-year/genre-face ((,c :foreground ,type)))
+ `(emms-playlist-track-face ((,c :foreground ,string)))
+ `(emms-playlist-selected-face ((,c :inherit bold :foreground ,constant)))
+ `(emms-metaplaylist-mode-current-face ((,c :inherit emms-playlist-selected-face)))
+ `(emms-metaplaylist-mode-face ((,c :foreground ,variable)))
+;;;;; enh-ruby-mode (enhanced-ruby-mode)
+ `(enh-ruby-heredoc-delimiter-face ((,c :inherit font-lock-constant-face)))
+ `(enh-ruby-op-face ((,c :foreground ,fg-main)))
+ `(enh-ruby-regexp-delimiter-face ((,c :inherit font-lock-regexp-grouping-construct)))
+ `(enh-ruby-regexp-face ((,c :inherit font-lock-string-face)))
+ `(enh-ruby-string-delimiter-face ((,c :inherit font-lock-string-face)))
+ `(erm-syn-errline ((,c :inherit modus-themes-lang-error)))
+ `(erm-syn-warnline ((,c :inherit modus-themes-lang-warning)))
+;;;;; epa
+ `(epa-field-body (( )))
+ `(epa-field-name ((,c :inherit bold :foreground ,fg-dim)))
+ `(epa-mark ((,c :inherit bold)))
+ `(epa-string ((,c :foreground ,string)))
+ `(epa-validity-disabled ((,c :foreground ,err)))
+ `(epa-validity-high ((,c :inherit success)))
+ `(epa-validity-low ((,c :inherit shadow)))
+ `(epa-validity-medium ((,c :foreground ,info)))
+;;;;; erc
+ `(erc-action-face ((,c :foreground ,accent-2)))
+ `(erc-bold-face ((,c :inherit bold)))
+ `(erc-button ((,c :inherit button)))
+ `(erc-command-indicator-face ((,c :inherit bold :foreground ,accent-3)))
+ `(erc-current-nick-face ((,c :inherit match)))
+ `(erc-dangerous-host-face ((,c :inherit error)))
+ `(erc-direct-msg-face ((,c :inherit shadow)))
+ `(erc-error-face ((,c :inherit error)))
+ `(erc-fool-face ((,c :inherit shadow)))
+ `(erc-input-face ((,c :foreground ,fnname)))
+ `(erc-inverse-face ((,c :inherit erc-default-face :inverse-video t)))
+ `(erc-keyword-face ((,c :inherit bold :foreground ,keyword)))
+ `(erc-my-nick-face ((,c :inherit bold :foreground ,name)))
+ `(erc-my-nick-prefix-face ((,c :inherit erc-my-nick-face)))
+ `(erc-nick-default-face ((,c :inherit bold :foreground ,accent-0)))
+ `(erc-nick-msg-face ((,c :inherit warning)))
+ `(erc-nick-prefix-face ((,c :inherit erc-nick-default-face)))
+ `(erc-notice-face ((,c :inherit font-lock-comment-face)))
+ `(erc-pal-face ((,c :inherit bold :foreground ,accent-1)))
+ `(erc-prompt-face ((,c :inherit modus-themes-prompt)))
+ `(erc-timestamp-face ((,c :foreground ,date-common)))
+ `(erc-underline-face ((,c :underline t)))
+;;;;; ert
+ `(ert-test-result-expected ((,c :inherit modus-themes-prominent-note)))
+ `(ert-test-result-unexpected ((,c :inherit modus-themes-prominent-error)))
+;;;;; erts-mode
+ `(erts-mode-end-test ((,c :inherit error)))
+ `(erts-mode-specification-name ((,c :inherit bold)))
+ `(erts-mode-specification-value ((,c :foreground ,string)))
+ `(erts-mode-start-test ((,c :inherit success)))
+;;;;; eshell
+ `(eshell-ls-archive ((,c :foreground ,accent-2)))
+ `(eshell-ls-backup ((,c :inherit shadow)))
+ `(eshell-ls-clutter ((,c :inherit shadow)))
+ `(eshell-ls-directory ((,c :foreground ,accent-0)))
+ `(eshell-ls-executable ((,c :foreground ,accent-1)))
+ `(eshell-ls-missing ((,c :inherit error)))
+ `(eshell-ls-product ((,c :inherit shadow)))
+ `(eshell-ls-readonly ((,c :foreground ,warning)))
+ `(eshell-ls-special ((,c :foreground ,accent-3)))
+ `(eshell-ls-symlink ((,c :inherit link)))
+ `(eshell-ls-unreadable ((,c :inherit shadow)))
+ `(eshell-prompt ((,c :inherit modus-themes-prompt)))
+;;;;; eshell-fringe-status
+ `(eshell-fringe-status-failure ((,c :inherit error)))
+ `(eshell-fringe-status-success ((,c :inherit success)))
+;;;;; evil-mode
+ `(evil-ex-commands ((,c :inherit font-lock-keyword-face)))
+ `(evil-ex-info ((,c :inherit font-lock-type-face)))
+ `(evil-ex-lazy-highlight ((,c :inherit modus-themes-search-lazy)))
+ `(evil-ex-search ((,c :inherit modus-themes-search-current)))
+ `(evil-ex-substitute-matches ((,c :inherit modus-themes-prominent-error :underline t)))
+ `(evil-ex-substitute-replacement ((,c :inherit modus-themes-search-current)))
+;;;;; eww
+ `(eww-invalid-certificate ((,c :foreground ,err)))
+ `(eww-valid-certificate ((,c :foreground ,info)))
+ `(eww-form-checkbox ((,c :inherit eww-form-text)))
+ `(eww-form-file ((,c :inherit eww-form-submit)))
+ `(eww-form-select ((,c :inherit eww-form-submit)))
+ `(eww-form-submit ((,c :inherit modus-themes-button)))
+ `(eww-form-text ((,c :inherit widget-field)))
+ `(eww-form-textarea ((,c :inherit eww-form-text)))
+;;;;; eyebrowse
+ `(eyebrowse-mode-line-active ((,c :inherit mode-line-emphasis)))
+;;;;; flycheck
+ `(flycheck-error ((,c :inherit modus-themes-lang-error)))
+ `(flycheck-fringe-error ((,c :inherit modus-themes-prominent-error)))
+ `(flycheck-fringe-info ((,c :inherit modus-themes-prominent-note)))
+ `(flycheck-fringe-warning ((,c :inherit modus-themes-prominent-warning)))
+ `(flycheck-info ((,c :inherit modus-themes-lang-note)))
+ `(flycheck-warning ((,c :inherit modus-themes-lang-warning)))
+;;;;; flycheck-color-mode-line
+ `(flycheck-color-mode-line-error-face ((,c :inherit flycheck-fringe-error)))
+ `(flycheck-color-mode-line-info-face ((,c :inherit flycheck-fringe-info)))
+ `(flycheck-color-mode-line-running-face ((,c :inherit italic)))
+ `(flycheck-color-mode-line-info-face ((,c :inherit flycheck-fringe-warning)))
+;;;;; flycheck-indicator
+ `(flycheck-indicator-disabled ((,c :inherit modus-themes-slant :foreground ,fg-dim)))
+ `(flycheck-indicator-error ((,c :inherit error)))
+ `(flycheck-indicator-info ((,c :inherit bold)))
+ `(flycheck-indicator-running ((,c :inherit modus-themes-slant)))
+ `(flycheck-indicator-success ((,c :inherit success)))
+ `(flycheck-indicator-warning ((,c :inherit warning)))
+;;;;; flymake
+ `(flymake-end-of-line-diagnostics-face ((,c :inherit modus-themes-slant :height 0.85 :box ,border)))
+ `(flymake-error ((,c :inherit modus-themes-lang-error)))
+ `(flymake-error-echo ((,c :inherit error)))
+ `(flymake-error-echo-at-eol ((,c :inherit flymake-end-of-line-diagnostics-face :foreground ,err)))
+ `(flymake-note ((,c :inherit modus-themes-lang-note)))
+ `(flymake-note-echo ((,c :inherit success)))
+ `(flymake-note-echo-at-eol ((,c :inherit flymake-end-of-line-diagnostics-face :foreground ,info)))
+ `(flymake-warning ((,c :inherit modus-themes-lang-warning)))
+ `(flymake-warning-echo ((,c :inherit warning)))
+ `(flymake-note-echo-at-eol ((,c :inherit flymake-end-of-line-diagnostics-face :foreground ,warning)))
+;;;;; flyspell
+ `(flyspell-duplicate ((,c :inherit modus-themes-lang-warning)))
+ `(flyspell-incorrect ((,c :inherit modus-themes-lang-error)))
+;;;;; flx
+ `(flx-highlight-face ((,c :inherit modus-themes-completion-match-0)))
+;;;;; focus
+ `(focus-unfocused ((,c :foreground "gray50")))
+;;;;; fold-this
+ `(fold-this-overlay ((,c :background ,bg-inactive)))
+;;;;; font-lock
+ `(font-lock-builtin-face ((,c :inherit modus-themes-bold :foreground ,builtin)))
+ `(font-lock-comment-delimiter-face ((,c :inherit font-lock-comment-face)))
+ `(font-lock-comment-face ((,c :inherit modus-themes-slant :foreground ,comment)))
+ `(font-lock-constant-face ((,c :foreground ,constant)))
+ `(font-lock-doc-face ((,c :inherit modus-themes-slant :foreground ,docstring)))
+ `(font-lock-doc-markup-face ((,c :inherit modus-themes-slant :foreground ,docmarkup)))
+ `(font-lock-function-name-face ((,c :foreground ,fnname)))
+ `(font-lock-keyword-face ((,c :inherit modus-themes-bold :foreground ,keyword)))
+ `(font-lock-negation-char-face ((,c :inherit error)))
+ `(font-lock-preprocessor-face ((,c :foreground ,preprocessor)))
+ `(font-lock-regexp-grouping-backslash ((,c :inherit modus-themes-bold :foreground ,rx-backslash)))
+ `(font-lock-regexp-grouping-construct ((,c :inherit modus-themes-bold :foreground ,rx-construct)))
+ `(font-lock-string-face ((,c :foreground ,string)))
+ `(font-lock-type-face ((,c :inherit modus-themes-bold :foreground ,type)))
+ `(font-lock-variable-name-face ((,c :foreground ,variable)))
+ `(font-lock-warning-face ((,c :inherit modus-themes-bold :foreground ,warning)))
+;;;;; geiser
+ `(geiser-font-lock-autodoc-current-arg ((,c :inherit modus-themes-mark-alt)))
+ `(geiser-font-lock-autodoc-identifier ((,c :foreground ,docstring)))
+ `(geiser-font-lock-doc-button ((,c :inherit button)))
+ `(geiser-font-lock-doc-link ((,c :inherit button)))
+ `(geiser-font-lock-error-link ((,c :inherit button :foreground ,err)))
+ `(geiser-font-lock-image-button ((,c :inherit button :foreground ,info)))
+ `(geiser-font-lock-repl-input ((,c :inherit bold)))
+ `(geiser-font-lock-repl-output ((,c :inherit font-lock-keyword-face)))
+ `(geiser-font-lock-repl-prompt ((,c :inherit modus-themes-prompt)))
+ `(geiser-font-lock-xref-header ((,c :inherit bold)))
+ `(geiser-font-lock-xref-link ((,c :inherit button)))
+;;;;; git-commit
+ `(git-commit-comment-action ((,c :inherit font-lock-comment-face)))
+ `(git-commit-comment-branch-local ((,c :inherit font-lock-comment-face :foreground ,accent-0)))
+ `(git-commit-comment-branch-remote ((,c :inherit font-lock-comment-face :foreground ,accent-1)))
+ `(git-commit-comment-heading ((,c :inherit (bold font-lock-comment-face))))
+ `(git-commit-comment-file ((,c :inherit font-lock-comment-face :foreground ,name)))
+ `(git-commit-keyword ((,c :foreground ,keyword)))
+ `(git-commit-nonempty-second-line ((,c :inherit error)))
+ `(git-commit-overlong-summary ((,c :inherit warning)))
+ `(git-commit-summary ((,c :inherit success)))
+;;;;; git-gutter
+ `(git-gutter:added ((,c :background ,bg-added-fringe)))
+ `(git-gutter:deleted ((,c :background ,bg-removed-fringe)))
+ `(git-gutter:modified ((,c :background ,bg-changed-fringe)))
+ `(git-gutter:separator ((,c :inherit modus-themes-intense-cyan)))
+ `(git-gutter:unchanged ((,c :inherit modus-themes-intense-magenta)))
+;;;;; git-gutter-fr
+ `(git-gutter-fr:added ((,c :background ,bg-added-fringe)))
+ `(git-gutter-fr:deleted ((,c :background ,bg-removed-fringe)))
+ `(git-gutter-fr:modified ((,c :background ,bg-changed-fringe)))
+;;;;; git-rebase
+ `(git-rebase-comment-hash ((,c :inherit (bold font-lock-comment-face) :foreground ,identifier)))
+ `(git-rebase-comment-heading ((,c :inherit (bold font-lock-comment-face))))
+ `(git-rebase-description ((,c :foreground ,fg-main)))
+ `(git-rebase-hash ((,c :foreground ,identifier)))
+;;;;; git-timemachine
+ `(git-timemachine-commit ((,c :inherit warning)))
+ `(git-timemachine-minibuffer-author-face ((,c :foreground ,name)))
+ `(git-timemachine-minibuffer-detail-face ((,c :foreground ,fg-main)))
+;;;;; gnus
+ `(gnus-button ((,c :inherit button)))
+ `(gnus-cite-1 ((,c :inherit message-cited-text-1)))
+ `(gnus-cite-2 ((,c :inherit message-cited-text-2)))
+ `(gnus-cite-3 ((,c :inherit message-cited-text-3)))
+ `(gnus-cite-4 ((,c :inherit message-cited-text-4)))
+ `(gnus-cite-5 ((,c :inherit message-cited-text-1)))
+ `(gnus-cite-6 ((,c :inherit message-cited-text-2)))
+ `(gnus-cite-7 ((,c :inherit message-cited-text-3)))
+ `(gnus-cite-8 ((,c :inherit message-cited-text-4)))
+ `(gnus-cite-9 ((,c :inherit message-cited-text-1)))
+ `(gnus-cite-10 ((,c :inherit message-cited-text-2)))
+ `(gnus-cite-11 ((,c :inherit message-cited-text-3)))
+ `(gnus-cite-attribution ((,c :inherit italic)))
+ `(gnus-emphasis-bold ((,c :inherit bold)))
+ `(gnus-emphasis-bold-italic ((,c :inherit bold-italic)))
+ `(gnus-emphasis-highlight-words ((,c :inherit warning)))
+ `(gnus-emphasis-italic ((,c :inherit italic)))
+ `(gnus-emphasis-underline-bold ((,c :inherit gnus-emphasis-bold :underline t)))
+ `(gnus-emphasis-underline-bold-italic ((,c :inherit gnus-emphasis-bold-italic :underline t)))
+ `(gnus-emphasis-underline-italic ((,c :inherit gnus-emphasis-italic :underline t)))
+ `(gnus-group-mail-1 ((,c :inherit (bold gnus-group-mail-1-empty))))
+ `(gnus-group-mail-1-empty ((,c :foreground ,magenta-warmer)))
+ `(gnus-group-mail-2 ((,c :inherit (bold gnus-group-mail-2-empty))))
+ `(gnus-group-mail-2-empty ((,c :foreground ,magenta)))
+ `(gnus-group-mail-3 ((,c :inherit (bold gnus-group-mail-3-empty))))
+ `(gnus-group-mail-3-empty ((,c :foreground ,magenta-cooler)))
+ `(gnus-group-mail-low ((,c :inherit (bold gnus-group-mail-low-empty))))
+ `(gnus-group-mail-low-empty ((,c :foreground ,fg-dim)))
+ `(gnus-group-news-1 ((,c :inherit (bold gnus-group-news-1-empty))))
+ `(gnus-group-news-1-empty ((,c :foreground ,green)))
+ `(gnus-group-news-2 ((,c :inherit (bold gnus-group-news-2-empty))))
+ `(gnus-group-news-2-empty ((,c :foreground ,cyan)))
+ `(gnus-group-news-3 ((,c :inherit (bold gnus-group-news-3-empty))))
+ `(gnus-group-news-3-empty ((,c :foreground ,yellow-faint)))
+ `(gnus-group-news-4 ((,c :inherit (bold gnus-group-news-4-empty))))
+ `(gnus-group-news-4-empty ((,c :foreground ,magenta-faint)))
+ `(gnus-group-news-5 ((,c :inherit (bold gnus-group-news-5-empty))))
+ `(gnus-group-news-5-empty ((,c :foreground ,fg-alt)))
+ `(gnus-group-news-6 ((,c :inherit (bold gnus-group-news-6-empty))))
+ `(gnus-group-news-6-empty ((,c :foreground ,fg-dim)))
+ `(gnus-group-news-low ((,c :inherit (bold gnus-group-news-low-empty))))
+ `(gnus-group-news-low-empty ((,c :foreground ,fg-dim)))
+ `(gnus-header-content ((,c :inherit message-header-other)))
+ `(gnus-header-from ((,c :inherit message-header-to :underline nil)))
+ `(gnus-header-name ((,c :inherit message-header-name)))
+ `(gnus-header-newsgroups ((,c :inherit message-header-newsgroups)))
+ `(gnus-header-subject ((,c :inherit message-header-subject)))
+ `(gnus-server-agent ((,c :inherit bold)))
+ `(gnus-server-closed ((,c :inherit italic)))
+ `(gnus-server-cloud ((,c :inherit bold :foreground ,fg-alt)))
+ `(gnus-server-cloud-host ((,c :inherit bold :foreground ,fg-alt :underline t)))
+ `(gnus-server-denied ((,c :inherit error)))
+ `(gnus-server-offline ((,c :inherit shadow)))
+ `(gnus-server-opened ((,c :inherit success)))
+ `(gnus-summary-cancelled ((,c :inherit italic :foreground ,warning)))
+ `(gnus-summary-high-ancient ((,c :inherit bold :foreground ,fg-alt)))
+ `(gnus-summary-high-read ((,c :inherit bold :foreground ,fg-dim)))
+ `(gnus-summary-high-ticked ((,c :inherit bold :foreground ,err)))
+ `(gnus-summary-high-undownloaded ((,c :inherit bold-italic :foreground ,warning)))
+ `(gnus-summary-high-unread ((,c :inherit bold)))
+ `(gnus-summary-low-ancient ((,c :inherit italic)))
+ `(gnus-summary-low-read ((,c :inherit (shadow italic))))
+ `(gnus-summary-low-ticked ((,c :inherit italic :foreground ,err)))
+ `(gnus-summary-low-undownloaded ((,c :inherit italic :foreground ,warning)))
+ `(gnus-summary-low-unread ((,c :inherit italic)))
+ `(gnus-summary-normal-ancient (( )))
+ `(gnus-summary-normal-read ((,c :inherit shadow)))
+ `(gnus-summary-normal-ticked ((,c :foreground ,err)))
+ `(gnus-summary-normal-undownloaded ((,c :foreground ,warning)))
+ `(gnus-summary-normal-unread (( )))
+ `(gnus-summary-selected ((,c :inherit highlight)))
+;;;;; gotest
+ `(go-test--ok-face ((,c :inherit success)))
+ `(go-test--error-face ((,c :inherit error)))
+ `(go-test--warning-face ((,c :inherit warning)))
+ `(go-test--pointer-face ((,c :foreground ,accent-0)))
+ `(go-test--standard-face (( )))
+;;;;; golden-ratio-scroll-screen
+ `(golden-ratio-scroll-highlight-line-face ((,c :background ,bg-cyan-subtle :foreground ,fg-main)))
+;;;;; helpful
+ `(helpful-heading ((,c :inherit modus-themes-heading-1)))
+;;;;; highlight region or ad-hoc regexp
+ ;; HACK 2022-06-23: The :inverse-video prevents hl-line-mode from
+ ;; overriding the background. Such an override really defeats the
+ ;; purpose of setting those highlights.
+ ;;
+ ;; NOTE 2022-10-04: We do not use the ,c here but instead
+ ;; hardcode color values. We have to do this as the themes lack
+ ;; entries in their palette for such an edge case. Defining those
+ ;; entries is not appropriate.
+ `(hi-aquamarine ((((class color) (min-colors 88) (background light))
+ :background "white" :foreground "#227f9f" :inverse-video t)
+ (((class color) (min-colors 88) (background dark))
+ :background "black" :foreground "#66cbdc" :inverse-video t)))
+ `(hi-black-b ((,c :inverse-video t)))
+ `(hi-black-hb ((,c :background ,bg-main :foreground ,fg-dim :inverse-video t)))
+ `(hi-blue ((((class color) (min-colors 88) (background light))
+ :background "white" :foreground "#3366dd" :inverse-video t)
+ (((class color) (min-colors 88) (background dark))
+ :background "black" :foreground "#aaccff" :inverse-video t)))
+ `(hi-blue-b ((,c :inherit (bold hi-blue))))
+ `(hi-green ((((class color) (min-colors 88) (background light))
+ :background "white" :foreground "#008a00" :inverse-video t)
+ (((class color) (min-colors 88) (background dark))
+ :background "black" :foreground "#66dd66" :inverse-video t)))
+ `(hi-green-b ((,c :inherit (bold hi-green))))
+ `(hi-pink ((((class color) (min-colors 88) (background light))
+ :background "white" :foreground "#bd30aa" :inverse-video t)
+ (((class color) (min-colors 88) (background dark))
+ :background "black" :foreground "#ff88ee" :inverse-video t)))
+ `(hi-red-b ((((class color) (min-colors 88) (background light))
+ :background "white" :foreground "#dd0000" :inverse-video t)
+ (((class color) (min-colors 88) (background dark))
+ :background "black" :foreground "#f06666" :inverse-video t)))
+ `(hi-salmon ((((class color) (min-colors 88) (background light))
+ :background "white" :foreground "#bf555a" :inverse-video t)
+ (((class color) (min-colors 88) (background dark))
+ :background "black" :foreground "#e08a50" :inverse-video t)))
+ `(hi-yellow ((((class color) (min-colors 88) (background light))
+ :background "white" :foreground "#af6400" :inverse-video t)
+ (((class color) (min-colors 88) (background dark))
+ :background "black" :foreground "#faea00" :inverse-video t)))
+ `(highlight-changes ((,c :foreground ,warning :underline nil)))
+ `(highlight-changes-delete ((,c :foreground ,err :underline t)))
+ `(hl-line ((,c :background ,bg-hl-line :extend t)))
+;;;;; highlight-numbers
+ `(highlight-numbers-number ((,c :foreground ,constant)))
+;;;;; highlight-thing
+ `(highlight-thing ((,c :inherit match)))
+;;;;; hl-fill-column
+ `(hl-fill-column-face ((,c :background ,bg-active)))
+;;;;; hl-todo
+ `(hl-todo ((,c :inherit (bold font-lock-comment-face) :foreground ,err)))
+;;;;; hydra
+ `(hydra-face-amaranth ((,c :inherit bold :foreground ,yellow-warmer)))
+ `(hydra-face-blue ((,c :inherit bold :foreground ,blue)))
+ `(hydra-face-pink ((,c :inherit bold :foreground ,magenta)))
+ `(hydra-face-red ((,c :inherit bold :foreground ,red-faint)))
+ `(hydra-face-teal ((,c :inherit bold :foreground ,cyan-cooler)))
+;;;;; icomplete
+ `(icomplete-first-match ((,c :inherit modus-themes-completion-match-0)))
+ `(icomplete-selected-match ((,c :inherit modus-themes-completion-selected)))
+;;;;; ido-mode
+ `(ido-first-match ((,c :inherit modus-themes-completion-match-0)))
+ `(ido-incomplete-regexp ((,c :inherit error)))
+ `(ido-indicator ((,c :inherit bold)))
+ `(ido-only-match ((,c :inherit ido-first-match)))
+ `(ido-subdir ((,c :foreground ,accent-0)))
+ `(ido-virtual ((,c :foreground ,accent-1)))
+;;;;; iedit
+ `(iedit-occurrence ((,c :inherit modus-themes-search-lazy)))
+ `(iedit-read-only-occurrence ((,c :inherit modus-themes-search-current)))
+;;;;; iflipb
+ `(iflipb-current-buffer-face ((,c :inherit bold :foreground ,name)))
+ `(iflipb-other-buffer-face ((,c :inherit shadow)))
+;;;;; image-dired
+ `(image-dired-thumb-flagged ((,c :inherit modus-themes-mark-del :box (:line-width -3))))
+ `(image-dired-thumb-header-file-name ((,c :inherit bold)))
+ `(image-dired-thumb-header-file-size ((,c :foreground ,constant)))
+ `(image-dired-thumb-mark ((,c :inherit modus-themes-mark-sel :box (:line-width -3))))
+;;;;; imenu-list
+ `(imenu-list-entry-face-0 ((,c :foreground ,fg-heading-0)))
+ `(imenu-list-entry-face-1 ((,c :foreground ,fg-heading-1)))
+ `(imenu-list-entry-face-2 ((,c :foreground ,fg-heading-2)))
+ `(imenu-list-entry-face-3 ((,c :foreground ,fg-heading-3)))
+ `(imenu-list-entry-subalist-face-0 ((,c :inherit bold :foreground ,fg-heading-4 :underline t)))
+ `(imenu-list-entry-subalist-face-1 ((,c :inherit bold :foreground ,fg-heading-5 :underline t)))
+ `(imenu-list-entry-subalist-face-2 ((,c :inherit bold :foreground ,fg-heading-6 :underline t)))
+ `(imenu-list-entry-subalist-face-3 ((,c :inherit bold :foreground ,fg-heading-7 :underline t)))
+;;;;; indium
+ `(indium-breakpoint-face ((,c :foreground ,err)))
+ `(indium-frame-url-face ((,c :inherit (shadow button))))
+ `(indium-keyword-face ((,c :inherit font-lock-keyword-face)))
+ `(indium-litable-face ((,c :inherit modus-themes-slant)))
+ `(indium-repl-error-face ((,c :inherit error)))
+ `(indium-repl-prompt-face ((,c :inherit modus-themes-prompt)))
+ `(indium-repl-stdout-face (( )))
+;;;;; info
+ `(Info-quoted ((,c :inherit modus-themes-prose-verbatim))) ; the capitalization is canonical
+ `(info-header-node ((,c :inherit (shadow bold))))
+ `(info-header-xref ((,c :foreground ,fg-link)))
+ `(info-index-match ((,c :inherit match)))
+ `(info-menu-header ((,c :inherit bold)))
+ `(info-menu-star ((,c :inherit error)))
+ `(info-node ((,c :inherit bold)))
+ `(info-title-1 ((,c :inherit modus-themes-heading-1)))
+ `(info-title-2 ((,c :inherit modus-themes-heading-2)))
+ `(info-title-3 ((,c :inherit modus-themes-heading-3)))
+ `(info-title-4 ((,c :inherit modus-themes-heading-4)))
+;;;;; info+ (info-plus)
+ `(info-command-ref-item ((,c :inherit font-lock-function-name-face)))
+ `(info-constant-ref-item ((,c :inherit font-lock-constant-face)))
+ `(info-custom-delimited ((,c :inherit modus-themes-prose-verbatim)))
+ `(info-double-quoted-name ((,c :inherit font-lock-string-face)))
+ `(info-file (( )))
+ `(info-function-ref-item ((,c :inherit font-lock-function-name-face)))
+ `(info-glossary-word ((,c :inherit modus-themes-button)))
+ `(info-indented-text (( )))
+ `(info-isolated-backquote (( )))
+ `(info-isolated-quote (( )))
+ `(info-macro-ref-item ((,c :inherit font-lock-keyword-face)))
+ `(info-menu ((,c :inherit bold)))
+ `(info-quoted-name ((,c :inherit modus-themes-prose-verbatim)))
+ `(info-reference-item ((,c :inherit bold)))
+ `(info-special-form-ref-item ((,c :inherit warning)))
+ `(info-string ((,c :inherit font-lock-string-face)))
+ `(info-syntax-class-item ((,c :inherit modus-themes-prose-code)))
+ `(info-user-option-ref-item ((,c :inherit font-lock-variable-name-face)))
+ `(info-variable-ref-item ((,c :inherit font-lock-variable-name-face)))
+;;;;; info-colors
+ `(info-colors-lisp-code-block ((,c :inherit modus-themes-fixed-pitch)))
+ `(info-colors-ref-item-command ((,c :inherit font-lock-function-name-face)))
+ `(info-colors-ref-item-constant ((,c :inherit font-lock-constant-face)))
+ `(info-colors-ref-item-function ((,c :inherit font-lock-function-name-face)))
+ `(info-colors-ref-item-macro ((,c :inherit font-lock-keyword-face)))
+ `(info-colors-ref-item-other ((,c :inherit font-lock-doc-face)))
+ `(info-colors-ref-item-special-form ((,c :inherit font-lock-keyword-face)))
+ `(info-colors-ref-item-syntax-class ((,c :inherit font-lock-builtin-face)))
+ `(info-colors-ref-item-type ((,c :inherit font-lock-type-face)))
+ `(info-colors-ref-item-user-option ((,c :inherit font-lock-variable-name-face)))
+ `(info-colors-ref-item-variable ((,c :inherit font-lock-variable-name-face)))
+;;;;; ioccur
+ `(ioccur-cursor ((,c :foreground ,fg-main)))
+ `(ioccur-invalid-regexp ((,c :inherit error)))
+ `(ioccur-match-face ((,c :inherit match)))
+ `(ioccur-match-overlay-face ((,c :background ,bg-inactive :extend t)))
+ `(ioccur-num-line-face ((,c :inherit shadow)))
+ `(ioccur-overlay-face ((,c :background ,bg-hl-line :extend t)))
+ `(ioccur-regexp-face ((,c :inherit (modus-themes-search-current bold))))
+ `(ioccur-title-face ((,c :inherit bold :foreground ,name)))
+;;;;; isearch, occur, and the like
+ `(isearch ((,c :inherit modus-themes-search-current)))
+ `(isearch-fail ((,c :inherit modus-themes-prominent-error)))
+ `(isearch-group-1 ((,c :inherit modus-themes-intense-blue)))
+ `(isearch-group-2 ((,c :inherit modus-themes-intense-magenta)))
+ `(lazy-highlight ((,c :inherit modus-themes-search-lazy)))
+ `(match ((,c :background ,bg-magenta-subtle :foreground ,fg-main)))
+ `(query-replace ((,c :inherit modus-themes-prominent-error)))
+;;;;; ivy
+ `(ivy-action ((,c :inherit modus-themes-key-binding)))
+ `(ivy-confirm-face ((,c :inherit success)))
+ `(ivy-current-match ((,c :inherit modus-themes-completion-selected)))
+ `(ivy-match-required-face ((,c :inherit error)))
+ `(ivy-minibuffer-match-face-1 (( )))
+ `(ivy-minibuffer-match-face-2 ((,c :inherit modus-themes-completion-match-0)))
+ `(ivy-minibuffer-match-face-3 ((,c :inherit modus-themes-completion-match-1)))
+ `(ivy-minibuffer-match-face-4 ((,c :inherit modus-themes-completion-match-2)))
+ `(ivy-remote ((,c :inherit italic)))
+ `(ivy-separator ((,c :inherit shadow)))
+ `(ivy-subdir ((,c :foreground ,accent-0)))
+ `(ivy-virtual ((,c :foreground ,accent-1)))
+;;;;; ivy-posframe
+ `(ivy-posframe-border ((,c :background ,border)))
+ `(ivy-posframe-cursor ((,c :background ,fg-main :foreground ,bg-main)))
+;;;;; japanese-holidays
+ `(japanese-holiday-saturday ((,c :foreground ,date-holiday-other)))
+;;;;; jira (org-jira)
+ `(jiralib-comment-face ((,c :background ,bg-inactive)))
+ `(jiralib-comment-header-face ((,c :inherit bold)))
+ `(jiralib-issue-info-face ((,c :background ,bg-inactive)))
+ `(jiralib-issue-info-header-face ((,c :inherit bold :background ,bg-inactive)))
+ `(jiralib-issue-summary-face ((,c :inherit bold)))
+ `(jiralib-link-filter-face ((,c :underline t)))
+ `(jiralib-link-issue-face ((,c :underline t)))
+ `(jiralib-link-project-face ((,c :underline t)))
+;;;;; jit-spell
+ `(jit-spell-misspelling ((,c :inherit modus-themes-lang-error)))
+;;;;; jinx
+ `(jinx-misspelled ((,c :inherit modus-themes-lang-warning)))
+;;;;; journalctl-mode
+ `(journalctl-error-face ((,c :inherit error)))
+ `(journalctl-finished-face ((,c :inherit success)))
+ `(journalctl-host-face ((,c :foreground ,name)))
+ `(journalctl-process-face ((,c :foreground ,warning)))
+ `(journalctl-starting-face ((,c :foreground ,info)))
+ `(journalctl-timestamp-face ((,c :foreground ,date-common)))
+ `(journalctl-warning-face ((,c :inherit warning)))
+;;;;; js2-mode
+ `(js2-error ((,c :inherit modus-themes-lang-error)))
+ `(js2-external-variable ((,c :inherit font-lock-variable-name-face)))
+ `(js2-function-call ((,c :inherit font-lock-function-name-face)))
+ `(js2-function-param ((,c :inherit font-lock-constant-face)))
+ `(js2-instance-member ((,c :inherit font-lock-keyword-face)))
+ `(js2-jsdoc-html-tag-delimiter ((,c :foreground ,fg-main)))
+ `(js2-jsdoc-html-tag-name ((,c :inherit font-lock-function-name-face)))
+ `(js2-jsdoc-tag ((,c :inherit (font-lock-builtin-face font-lock-comment-face) :weight normal)))
+ `(js2-jsdoc-type ((,c :inherit (font-lock-type-face font-lock-comment-face) :weight normal)))
+ `(js2-jsdoc-value ((,c :inherit (font-lock-constant-face font-lock-comment-face) :weight normal)))
+ `(js2-object-property ((,c :foreground ,fg-main)))
+ `(js2-object-property-access ((,c :foreground ,fg-main)))
+ `(js2-private-function-call ((,c :inherit font-lock-preprocessor-face)))
+ `(js2-private-member ((,c :inherit font-lock-warning-face)))
+ `(js2-warning ((,c :inherit modus-themes-lang-warning)))
+;;;;; julia
+ `(julia-macro-face ((,c :inherit font-lock-builtin-face)))
+ `(julia-quoted-symbol-face ((,c :inherit font-lock-constant-face)))
+;;;;; kaocha-runner
+ `(kaocha-runner-error-face ((,c :inherit error)))
+ `(kaocha-runner-success-face ((,c :inherit success)))
+ `(kaocha-runner-warning-face ((,c :inherit warning)))
+;;;;; keycast
+ `(keycast-command ((,c :inherit bold)))
+ `(keycast-key ((,c :background ,keybind :foreground ,bg-main)))
+;;;;; ledger-mode
+ `(ledger-font-auto-xact-face ((,c :inherit font-lock-builtin-face)))
+ `(ledger-font-account-name-face ((,c :foreground ,name)))
+ `(ledger-font-directive-face ((,c :inherit font-lock-keyword-face)))
+ `(ledger-font-posting-date-face ((,c :inherit modus-themes-bold :foreground ,date-common)))
+ `(ledger-font-periodic-xact-face ((,c :inherit font-lock-variable-name-face)))
+ `(ledger-font-posting-amount-face ((,c :inherit font-lock-constant-face)))
+ `(ledger-font-payee-cleared-face ((,c :inherit success)))
+ `(ledger-font-payee-pending-face ((,c :inherit warning)))
+ `(ledger-font-payee-uncleared-face ((,c :inherit error)))
+ `(ledger-font-xact-highlight-face ((,c :background ,bg-hl-line :extend t)))
+;;;;; leerzeichen
+ `(leerzeichen ((,c :background ,bg-inactive)))
+;;;;; line numbers (display-line-numbers-mode and global variant)
+ ;; Here we cannot inherit `modus-themes-fixed-pitch'. We need to
+ ;; fall back to `default' otherwise line numbers do not scale when
+ ;; using `text-scale-adjust'.
+ `(line-number ((,c :inherit ,(if modus-themes-mixed-fonts '(fixed-pitch default) 'default) :background ,bg-line-number-inactive :foreground ,fg-line-number-inactive)))
+ `(line-number-current-line ((,c :inherit (bold line-number) :background ,bg-line-number-active :foreground ,fg-line-number-active)))
+ `(line-number-major-tick ((,c :inherit line-number :foreground ,err)))
+ `(line-number-minor-tick ((,c :inherit line-number :foreground ,fg-alt)))
+;;;;; magit
+ `(magit-bisect-bad ((,c :inherit error)))
+ `(magit-bisect-good ((,c :inherit success)))
+ `(magit-bisect-skip ((,c :inherit warning)))
+ `(magit-blame-date (( )))
+ `(magit-blame-dimmed ((,c :inherit shadow)))
+ `(magit-blame-hash (( )))
+ `(magit-blame-highlight ((,c :background ,bg-active :foreground ,fg-main)))
+ `(magit-blame-name (( )))
+ `(magit-blame-summary (( )))
+ `(magit-branch-local ((,c :foreground ,accent-0)))
+ `(magit-branch-remote ((,c :foreground ,accent-1)))
+ `(magit-branch-upstream ((,c :inherit italic)))
+ `(magit-branch-warning ((,c :inherit warning)))
+ `(magit-cherry-equivalent ((,c :foreground ,magenta)))
+ `(magit-cherry-unmatched ((,c :foreground ,cyan)))
+ `(magit-diff-added ((,c :background ,bg-added-faint :foreground ,fg-added)))
+ `(magit-diff-added-highlight ((,c :background ,bg-added :foreground ,fg-added)))
+ `(magit-diff-base ((,c :background ,bg-changed-faint :foreground ,fg-changed)))
+ `(magit-diff-base-highlight ((,c :background ,bg-changed :foreground ,fg-changed)))
+ `(magit-diff-context ((,c :inherit shadow)))
+ `(magit-diff-context-highlight ((,c :background ,bg-diff-context)))
+ `(magit-diff-file-heading ((,c :inherit bold :foreground ,accent-0)))
+ `(magit-diff-file-heading-highlight ((,c :inherit magit-diff-file-heading :background ,bg-inactive)))
+ `(magit-diff-file-heading-selection ((,c :inherit bold :background ,bg-hover-secondary)))
+ `(magit-diff-hunk-heading ((,c :background ,bg-inactive)))
+ `(magit-diff-hunk-heading-highlight ((,c :inherit bold :background ,bg-active)))
+ `(magit-diff-hunk-heading-selection ((,c :inherit bold :background ,bg-hover-secondary)))
+ `(magit-diff-hunk-region ((,c :inherit bold)))
+ `(magit-diff-lines-boundary ((,c :background ,fg-main)))
+ `(magit-diff-lines-heading ((,c :background ,fg-dim :foreground ,bg-main)))
+ `(magit-diff-removed ((,c :background ,bg-removed-faint :foreground ,fg-removed)))
+ `(magit-diff-removed-highlight ((,c :background ,bg-removed :foreground ,fg-removed)))
+ `(magit-diffstat-added ((,c :foreground ,fg-added-intense)))
+ `(magit-diffstat-removed ((,c :foreground ,fg-removed-intense)))
+ `(magit-dimmed ((,c :inherit shadow)))
+ `(magit-filename ((,c :foreground ,accent-2)))
+ `(magit-hash ((,c :foreground ,identifier)))
+ `(magit-head ((,c :inherit magit-branch-local)))
+ `(magit-header-line ((,c :inherit bold)))
+ `(magit-header-line-key ((,c :inherit modus-themes-key-binding)))
+ `(magit-header-line-log-select ((,c :inherit bold)))
+ `(magit-keyword ((,c :foreground ,keyword)))
+ `(magit-keyword-squash ((,c :inherit bold :foreground ,warning)))
+ `(magit-log-author ((,c :foreground ,name)))
+ `(magit-log-date ((,c :foreground ,date-common)))
+ `(magit-log-graph ((,c :inherit shadow)))
+ `(magit-mode-line-process ((,c :inherit bold :foreground ,modeline-info)))
+ `(magit-mode-line-process-error ((,c :inherit bold :foreground ,modeline-err)))
+ `(magit-process-ng ((,c :inherit error)))
+ `(magit-process-ok ((,c :inherit success)))
+ `(magit-reflog-amend ((,c :inherit warning)))
+ `(magit-reflog-checkout ((,c :inherit bold :foreground ,blue)))
+ `(magit-reflog-cherry-pick ((,c :inherit success)))
+ `(magit-reflog-commit ((,c :inherit bold)))
+ `(magit-reflog-merge ((,c :inherit success)))
+ `(magit-reflog-other ((,c :inherit bold :foreground ,cyan)))
+ `(magit-reflog-rebase ((,c :inherit bold :foreground ,magenta)))
+ `(magit-reflog-remote ((,c :inherit (bold magit-branch-remote))))
+ `(magit-reflog-reset ((,c :inherit error)))
+ `(magit-refname ((,c :inherit shadow)))
+ `(magit-refname-pullreq ((,c :inherit shadow)))
+ `(magit-refname-stash ((,c :inherit shadow)))
+ `(magit-refname-wip ((,c :inherit shadow)))
+ `(magit-section ((,c :background ,bg-dim :foreground ,fg-main)))
+ `(magit-section-heading ((,c :inherit bold)))
+ `(magit-section-heading-selection ((,c :inherit bold :background ,bg-hover-secondary)))
+ `(magit-section-highlight ((,c :background ,bg-dim)))
+ `(magit-sequence-done ((,c :inherit success)))
+ `(magit-sequence-drop ((,c :inherit error)))
+ `(magit-sequence-exec ((,c :inherit bold :foreground ,magenta)))
+ `(magit-sequence-head ((,c :inherit bold :foreground ,cyan)))
+ `(magit-sequence-onto ((,c :inherit (bold shadow))))
+ `(magit-sequence-part ((,c :inherit warning)))
+ `(magit-sequence-pick ((,c :inherit bold)))
+ `(magit-sequence-stop ((,c :inherit error)))
+ `(magit-signature-bad ((,c :inherit error)))
+ `(magit-signature-error ((,c :inherit error)))
+ `(magit-signature-expired ((,c :inherit warning)))
+ `(magit-signature-expired-key ((,c :foreground ,warning)))
+ `(magit-signature-good ((,c :inherit success)))
+ `(magit-signature-revoked ((,c :inherit bold :foreground ,warning)))
+ `(magit-signature-untrusted ((,c :inherit (bold shadow))))
+ `(magit-tag ((,c :foreground ,accent-3))) ; compare with branches
+;;;;; make-mode (makefiles)
+ `(makefile-makepp-perl ((,c :background ,bg-dim)))
+ `(makefile-space ((,c :background ,bg-inactive)))
+;;;;; man
+ `(Man-overstrike ((,c :inherit bold :foreground ,accent-0)))
+ `(Man-underline ((,c :foreground ,accent-1 :underline t)))
+;;;;; marginalia
+ `(marginalia-archive ((,c :foreground ,accent-0)))
+ `(marginalia-char ((,c :foreground ,accent-2)))
+ `(marginalia-date ((,c :foreground ,date-common)))
+ `(marginalia-documentation ((,c :inherit modus-themes-slant :foreground ,docstring)))
+ `(marginalia-file-name (( )))
+ `(marginalia-file-owner ((,c :inherit shadow)))
+ `(marginalia-file-priv-dir ((,c :foreground ,accent-0)))
+ `(marginalia-file-priv-exec ((,c :foreground ,accent-1)))
+ `(marginalia-file-priv-link ((,c :foreground ,fg-link)))
+ `(marginalia-file-priv-no ((,c :inherit shadow)))
+ `(marginalia-file-priv-other ((,c :foreground ,accent-2)))
+ `(marginalia-file-priv-rare ((,c :foreground ,accent-3)))
+ `(marginalia-file-priv-read ((,c :foreground ,fg-main)))
+ `(marginalia-file-priv-write ((,c :foreground ,accent-0)))
+ `(marginalia-function ((,c :foreground ,fnname)))
+ `(marginalia-key ((,c :inherit modus-themes-key-binding)))
+ `(marginalia-lighter ((,c :inherit shadow)))
+ `(marginalia-liqst ((,c :inherit shadow)))
+ `(marginalia-mode ((,c :foreground ,constant)))
+ `(marginalia-modified ((,c :inherit warning)))
+ `(marginalia-null ((,c :inherit shadow)))
+ `(marginalia-number ((,c :foreground ,constant)))
+ `(marginalia-size ((,c :foreground ,variable)))
+ `(marginalia-string ((,c :foreground ,string)))
+ `(marginalia-symbol ((,c :foreground ,builtin)))
+ `(marginalia-true (( )))
+ `(marginalia-type ((,c :foreground ,type)))
+ `(marginalia-value ((,c :inherit shadow)))
+ `(marginalia-version ((,c :foreground ,date-common)))
+;;;;; markdown-mode
+ `(markdown-blockquote-face ((,c :inherit font-lock-doc-face)))
+ `(markdown-bold-face ((,c :inherit bold)))
+ `(markdown-code-face ((,c :inherit modus-themes-fixed-pitch :background ,bg-dim :extend t)))
+ `(markdown-gfm-checkbox-face ((,c :foreground ,warning)))
+ `(markdown-header-face (( )))
+ `(markdown-header-face-1 ((,c :inherit modus-themes-heading-1)))
+ `(markdown-header-face-2 ((,c :inherit modus-themes-heading-2)))
+ `(markdown-header-face-3 ((,c :inherit modus-themes-heading-3)))
+ `(markdown-header-face-4 ((,c :inherit modus-themes-heading-4)))
+ `(markdown-header-face-5 ((,c :inherit modus-themes-heading-5)))
+ `(markdown-header-face-6 ((,c :inherit modus-themes-heading-6)))
+ `(markdown-highlighting-face ((,c :inherit secondary-selection)))
+ `(markdown-inline-code-face ((,c :inherit modus-themes-prose-code)))
+ `(markdown-italic-face ((,c :inherit italic)))
+ `(markdown-language-keyword-face ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-block)))
+ `(markdown-line-break-face ((,c :inherit nobreak-space)))
+ `(markdown-link-face ((,c :inherit link)))
+ `(markdown-markup-face ((,c :inherit shadow)))
+ `(markdown-metadata-key-face ((,c :inherit bold)))
+ `(markdown-metadata-value-face ((,c :foreground ,string)))
+ `(markdown-missing-link-face ((,c :inherit warning)))
+ `(markdown-pre-face ((,c :inherit markdown-code-face)))
+ `(markdown-table-face ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-table)))
+ `(markdown-url-face ((,c :foreground ,fg-alt)))
+;;;;; markup-faces (`adoc-mode')
+ `(markup-attribute-face ((,c :inherit (modus-themes-slant markup-meta-face))))
+ `(markup-bold-face ((,c :inherit bold)))
+ `(markup-code-face ((,c :foreground ,prose-code)))
+ `(markup-comment-face ((,c :inherit font-lock-comment-face)))
+ `(markup-complex-replacement-face ((,c :foreground ,prose-macro)))
+ `(markup-emphasis-face ((,c :inherit markup-italic-face)))
+ `(markup-error-face ((,c :inherit error)))
+ `(markup-gen-face ((,c :foreground ,prose-verbatim)))
+ `(markup-internal-reference-face ((,c :inherit (shadow modus-themes-slant))))
+ `(markup-italic-face ((,c :inherit italic)))
+ `(markup-list-face ((,c :background ,bg-inactive)))
+ `(markup-meta-face ((,c :inherit (modus-themes-fixed-pitch shadow))))
+ `(markup-meta-hide-face ((,c :foreground "gray50")))
+ `(markup-reference-face ((,c :inherit modus-themes-slant :foreground ,fg-alt)))
+ `(markup-replacement-face ((,c :inherit modus-themes-fixed-pitch :foreground ,err)))
+ `(markup-secondary-text-face ((,c :height 0.9 :foreground ,fg-alt)))
+ `(markup-small-face ((,c :inherit markup-gen-face :height 0.9)))
+ `(markup-strong-face ((,c :inherit markup-bold-face)))
+ `(markup-subscript-face ((,c :height 0.9 :foreground ,fg-alt)))
+ `(markup-superscript-face ((,c :height 0.9 :foreground ,fg-alt)))
+ `(markup-table-cell-face (( )))
+ `(markup-table-face ((,c :foreground ,prose-table)))
+ `(markup-table-row-face (( )))
+ `(markup-title-0-face ((,c :inherit modus-themes-heading-1)))
+ `(markup-title-1-face ((,c :inherit modus-themes-heading-2)))
+ `(markup-title-2-face ((,c :inherit modus-themes-heading-3)))
+ `(markup-title-3-face ((,c :inherit modus-themes-heading-4)))
+ `(markup-title-4-face ((,c :inherit modus-themes-heading-5)))
+ `(markup-title-5-face ((,c :inherit modus-themes-heading-6)))
+ `(markup-verbatim-face ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-verbatim)))
+;;;;; messages
+ `(message-cited-text-1 ((,c :foreground ,mail-cite-0)))
+ `(message-cited-text-2 ((,c :foreground ,mail-cite-1)))
+ `(message-cited-text-3 ((,c :foreground ,mail-cite-2)))
+ `(message-cited-text-4 ((,c :foreground ,mail-cite-3)))
+ `(message-header-name ((,c :inherit bold)))
+ `(message-header-newsgroups ((,c :inherit message-header-other)))
+ `(message-header-to ((,c :inherit bold :foreground ,mail-recipient)))
+ `(message-header-cc ((,c :foreground ,mail-recipient)))
+ `(message-header-subject ((,c :inherit bold :foreground ,mail-subject)))
+ `(message-header-xheader ((,c :inherit message-header-other)))
+ `(message-header-other ((,c :foreground ,mail-other)))
+ `(message-mml ((,c :foreground ,mail-part)))
+ `(message-separator ((,c :background ,bg-active)))
+;;;;; minimap
+ `(minimap-active-region-background ((,c :background ,bg-active)))
+ `(minimap-current-line-face ((,c :background ,bg-cyan-intense :foreground ,fg-main)))
+;;;;; mode-line
+ `(mode-line ((,c :inherit modus-themes-ui-variable-pitch
+ :box ,border-mode-line-active
+ :background ,bg-mode-line-active
+ :foreground ,fg-mode-line-active)))
+ `(mode-line-active ((,c :inherit mode-line)))
+ `(mode-line-buffer-id ((,c :inherit bold)))
+ `(mode-line-emphasis ((,c :inherit bold :foreground ,modeline-info)))
+ `(mode-line-highlight ((,c :background ,bg-hover :foreground ,fg-main :box ,fg-main)))
+ `(mode-line-inactive ((,c :inherit modus-themes-ui-variable-pitch
+ :box ,border-mode-line-inactive
+ :background ,bg-mode-line-inactive
+ :foreground ,fg-mode-line-inactive)))
+;;;;; mood-line
+ `(mood-line-modified ((,c :inherit italic)))
+ `(mood-line-status-error ((,c :inherit error)))
+ `(mood-line-status-info ((,c :foreground ,info)))
+ `(mood-line-status-neutral (( )))
+ `(mood-line-status-success ((,c :inherit success)))
+ `(mood-line-status-warning ((,c :inherit warning)))
+ `(mood-line-unimportant ((,c :inherit shadow)))
+;;;;; mpdel
+ `(mpdel-browser-directory-face ((,c :foreground ,accent-0)))
+ `(mpdel-playlist-current-song-face ((,c :inherit bold :foreground ,accent-0)))
+;;;;; mu4e
+ `(mu4e-attach-number-face ((,c :inherit bold :foreground ,fg-dim)))
+ `(mu4e-cited-1-face ((,c :inherit message-cited-text-1)))
+ `(mu4e-cited-2-face ((,c :inherit message-cited-text-2)))
+ `(mu4e-cited-3-face ((,c :inherit message-cited-text-3)))
+ `(mu4e-cited-4-face ((,c :inherit message-cited-text-4)))
+ `(mu4e-cited-5-face ((,c :inherit message-cited-text-1)))
+ `(mu4e-cited-6-face ((,c :inherit message-cited-text-2)))
+ `(mu4e-cited-7-face ((,c :inherit message-cited-text-3)))
+ `(mu4e-compose-header-face ((,c :inherit mu4e-compose-separator-face)))
+ `(mu4e-compose-separator-face ((,c :inherit message-separator)))
+ `(mu4e-contact-face ((,c :inherit message-header-to)))
+ `(mu4e-context-face ((,c :inherit bold)))
+ `(mu4e-draft-face ((,c :foreground ,warning)))
+ `(mu4e-flagged-face ((,c :foreground ,err)))
+ `(mu4e-footer-face ((,c :inherit italic :foreground ,fg-alt)))
+ `(mu4e-forwarded-face ((,c :inherit italic :foreground ,info)))
+ `(mu4e-header-face ((,c :inherit shadow)))
+ `(mu4e-header-highlight-face ((,c :background ,bg-hl-line :extend t)))
+ `(mu4e-header-key-face ((,c :inherit message-header-name)))
+ `(mu4e-header-marks-face ((,c :inherit mu4e-special-header-value-face)))
+ `(mu4e-header-title-face ((,c :foreground ,fg-alt)))
+ `(mu4e-header-value-face ((,c :inherit message-header-other)))
+ `(mu4e-highlight-face ((,c :inherit modus-themes-key-binding)))
+ `(mu4e-link-face ((,c :inherit link)))
+ `(mu4e-modeline-face (( )))
+ `(mu4e-moved-face ((,c :inherit italic :foreground ,warning)))
+ `(mu4e-ok-face ((,c :inherit success)))
+ `(mu4e-region-code ((,c :foreground ,builtin)))
+ `(mu4e-related-face ((,c :inherit (italic shadow))))
+ `(mu4e-replied-face ((,c :foreground ,info)))
+ `(mu4e-special-header-value-face ((,c :inherit message-header-subject)))
+ `(mu4e-system-face ((,c :inherit italic)))
+ `(mu4e-title-face (( )))
+ `(mu4e-trashed-face ((,c :foreground ,err)))
+ `(mu4e-unread-face ((,c :inherit bold)))
+ `(mu4e-url-number-face ((,c :inherit shadow)))
+ `(mu4e-view-body-face (( )))
+ `(mu4e-warning-face ((,c :inherit warning)))
+;;;;; multiple-cursors
+ `(mc/cursor-bar-face ((,c :height 1 :foreground ,fg-main :background ,bg-main)))
+ `(mc/cursor-face ((,c :inverse-video t)))
+ `(mc/region-face ((,c :inherit region)))
+;;;;; nerd-icons
+ `(nerd-icons-blue ((,c :foreground ,blue-cooler)))
+ `(nerd-icons-blue-alt ((,c :foreground ,blue-warmer)))
+ `(nerd-icons-cyan ((,c :foreground ,cyan)))
+ `(nerd-icons-cyan-alt ((,c :foreground ,cyan-warmer)))
+ `(nerd-icons-dblue ((,c :foreground ,blue-faint)))
+ `(nerd-icons-dcyan ((,c :foreground ,cyan-faint)))
+ `(nerd-icons-dgreen ((,c :foreground ,green-faint)))
+ `(nerd-icons-dmaroon ((,c :foreground ,magenta-faint)))
+ `(nerd-icons-dorange ((,c :foreground ,red-faint)))
+ `(nerd-icons-dpink ((,c :foreground ,magenta-faint)))
+ `(nerd-icons-dpurple ((,c :foreground ,magenta-cooler)))
+ `(nerd-icons-dred ((,c :foreground ,red)))
+ `(nerd-icons-dsilver ((,c :foreground ,cyan-faint)))
+ `(nerd-icons-dyellow ((,c :foreground ,yellow-faint)))
+ `(nerd-icons-green ((,c :foreground ,green)))
+ `(nerd-icons-lblue ((,c :foreground ,blue-cooler)))
+ `(nerd-icons-lcyan ((,c :foreground ,cyan)))
+ `(nerd-icons-lgreen ((,c :foreground ,green-warmer)))
+ `(nerd-icons-lmaroon ((,c :foreground ,magenta-warmer)))
+ `(nerd-icons-lorange ((,c :foreground ,red-warmer)))
+ `(nerd-icons-lpink ((,c :foreground ,magenta)))
+ `(nerd-icons-lpurple ((,c :foreground ,magenta-faint)))
+ `(nerd-icons-lred ((,c :foreground ,red-faint)))
+ `(nerd-icons-lsilver ((,c :foreground "gray50")))
+ `(nerd-icons-lyellow ((,c :foreground ,yellow-warmer)))
+ `(nerd-icons-maroon ((,c :foreground ,magenta)))
+ `(nerd-icons-orange ((,c :foreground ,yellow-warmer)))
+ `(nerd-icons-pink ((,c :foreground ,magenta-warmer)))
+ `(nerd-icons-purple ((,c :foreground ,magenta-cooler)))
+ `(nerd-icons-purple-alt ((,c :foreground ,blue-warmer)))
+ `(nerd-icons-red ((,c :foreground ,red)))
+ `(nerd-icons-red-alt ((,c :foreground ,red-cooler)))
+ `(nerd-icons-silver ((,c :foreground "gray50")))
+ `(nerd-icons-yellow ((,c :foreground ,yellow)))
+;;;;; nerd-icons-completion
+ `(nerd-icons-completion-dir-face ((,c :foreground ,cyan-faint)))
+;;;;; nerd-icons-dired
+ `(nerd-icons-dired-dir-face ((,c :foreground ,cyan-faint)))
+;;;;; nerd-icons-ibuffer
+ `(nerd-icons-ibuffer-dir-face ((,c :foreground ,cyan-faint)))
+ `(nerd-icons-ibuffer-file-face ((,c :foreground ,blue-faint)))
+ `(nerd-icons-ibuffer-mode-face ((,c :foreground ,cyan)))
+ `(nerd-icons-ibuffer-size-face ((,c :foreground ,cyan-cooler)))
+;;;;; neotree
+ `(neo-banner-face ((,c :foreground ,accent-0)))
+ `(neo-button-face ((,c :inherit button)))
+ `(neo-dir-link-face (( )))
+ `(neo-expand-btn-face (( )))
+ `(neo-file-link-face (( )))
+ `(neo-header-face ((,c :inherit bold)))
+ `(neo-root-dir-face ((,c :inherit bold :foreground ,accent-0)))
+ `(neo-vc-added-face ((,c :inherit success)))
+ `(neo-vc-conflict-face ((,c :inherit error)))
+ `(neo-vc-default-face (( )))
+ `(neo-vc-edited-face ((,c :inherit italic)))
+ `(neo-vc-ignored-face ((,c :inherit shadow)))
+ `(neo-vc-missing-face ((,c :inherit error)))
+ `(neo-vc-needs-merge-face ((,c :inherit italic)))
+ `(neo-vc-needs-update-face ((,c :underline t)))
+ `(neo-vc-removed-face ((,c :strike-through t)))
+ `(neo-vc-unlocked-changes-face ((,c :inherit success)))
+ `(neo-vc-up-to-date-face (( )))
+ `(neo-vc-user-face ((,c :inherit warning)))
+;;;;; notmuch
+ `(notmuch-crypto-decryption ((,c :inherit bold)))
+ `(notmuch-crypto-part-header ((,c :foreground ,mail-part))) ; like `message-mml'
+ `(notmuch-crypto-signature-bad ((,c :inherit error)))
+ `(notmuch-crypto-signature-good ((,c :inherit success)))
+ `(notmuch-crypto-signature-good-key ((,c :inherit success)))
+ `(notmuch-crypto-signature-unknown ((,c :inherit warning)))
+ `(notmuch-jump-key ((,c :inherit modus-themes-key-binding)))
+ `(notmuch-message-summary-face ((,c :inherit bold :background ,bg-inactive)))
+ `(notmuch-search-count ((,c :foreground ,fg-dim)))
+ `(notmuch-search-date ((,c :foreground ,date-common)))
+ `(notmuch-search-flagged-face ((,c :foreground ,err)))
+ `(notmuch-search-matching-authors ((,c :foreground ,mail-recipient)))
+ `(notmuch-search-non-matching-authors ((,c :inherit shadow)))
+ `(notmuch-search-subject ((,c :foreground ,fg-main)))
+ `(notmuch-search-unread-face ((,c :inherit bold)))
+ `(notmuch-tag-added ((,c :underline ,info)))
+ `(notmuch-tag-deleted ((,c :strike-through ,err)))
+ `(notmuch-tag-face ((,c :foreground ,accent-0)))
+ `(notmuch-tag-flagged ((,c :foreground ,err)))
+ `(notmuch-tag-unread ((,c :foreground ,accent-1)))
+ `(notmuch-tree-match-author-face ((,c :inherit notmuch-search-matching-authors)))
+ `(notmuch-tree-match-date-face ((,c :inherit notmuch-search-date)))
+ `(notmuch-tree-match-face ((,c :foreground ,fg-main)))
+ `(notmuch-tree-match-tag-face ((,c :inherit notmuch-tag-face)))
+ `(notmuch-tree-no-match-face ((,c :inherit shadow)))
+ `(notmuch-tree-no-match-date-face ((,c :inherit shadow)))
+ `(notmuch-wash-cited-text ((,c :inherit message-cited-text-1)))
+ `(notmuch-wash-toggle-button ((,c :background ,bg-dim)))
+;;;;; num3-mode
+ `(num3-face-even ((,c :inherit bold :background ,bg-inactive)))
+;;;;; nxml-mode
+ `(nxml-attribute-colon ((,c :foreground ,fg-main)))
+ `(nxml-attribute-local-name ((,c :inherit font-lock-variable-name-face)))
+ `(nxml-attribute-prefix ((,c :inherit font-lock-type-face)))
+ `(nxml-attribute-value ((,c :inherit font-lock-constant-face)))
+ `(nxml-cdata-section-CDATA ((,c :inherit error)))
+ `(nxml-cdata-section-delimiter ((,c :inherit error)))
+ `(nxml-char-ref-delimiter ((,c :inherit shadow)))
+ `(nxml-char-ref-number ((,c :inherit (shadow modus-themes-bold))))
+ `(nxml-delimited-data ((,c :inherit (shadow modus-themes-slant))))
+ `(nxml-delimiter ((,c :foreground ,fg-dim)))
+ `(nxml-element-colon ((,c :foreground ,fg-main)))
+ `(nxml-element-local-name ((,c :inherit font-lock-function-name-face)))
+ `(nxml-element-prefix ((,c :inherit font-lock-builtin-face)))
+ `(nxml-entity-ref-delimiter ((,c :inherit shadow)))
+ `(nxml-entity-ref-name ((,c :inherit (shadow modus-themes-bold))))
+ `(nxml-glyph ((,c :background ,bg-active :foreground ,fg-main)))
+ `(nxml-hash ((,c :inherit (bold font-lock-string-face))))
+ `(nxml-heading ((,c :inherit bold)))
+ `(nxml-name ((,c :inherit font-lock-builtin-face)))
+ `(nxml-namespace-attribute-colon ((,c :foreground ,fg-main)))
+ `(nxml-namespace-attribute-prefix ((,c :inherit font-lock-variable-name-face)))
+ `(nxml-processing-instruction-target ((,c :inherit font-lock-keyword-face)))
+ `(nxml-prolog-keyword ((,c :inherit font-lock-keyword-face)))
+ `(nxml-ref ((,c :inherit (shadow modus-themes-bold))))
+ `(rng-error ((,c :inherit error)))
+;;;;; olivetti
+ `(olivetti-fringe ((,c :background ,bg-main)))
+;;;;; orderless
+ `(orderless-match-face-0 ((,c :inherit modus-themes-completion-match-0)))
+ `(orderless-match-face-1 ((,c :inherit modus-themes-completion-match-1)))
+ `(orderless-match-face-2 ((,c :inherit modus-themes-completion-match-2)))
+ `(orderless-match-face-3 ((,c :inherit modus-themes-completion-match-3)))
+;;;;; org
+ `(org-agenda-calendar-daterange ((,c :foreground ,date-range)))
+ `(org-agenda-calendar-event ((,c :foreground ,date-event)))
+ `(org-agenda-calendar-sexp ((,c :inherit (modus-themes-slant org-agenda-calendar-event))))
+ `(org-agenda-clocking ((,c :inherit modus-themes-mark-alt)))
+ `(org-agenda-column-dateline ((,c :background ,bg-inactive)))
+ `(org-agenda-current-time ((,c :foreground ,date-now)))
+ `(org-agenda-date ((,c ,@(modus-themes--heading 'agenda-date date-weekday))))
+ `(org-agenda-date-today ((,c :inherit org-agenda-date :underline t)))
+ `(org-agenda-date-weekend ((,c :inherit org-agenda-date :foreground ,date-weekend)))
+ `(org-agenda-date-weekend-today ((,c :inherit org-agenda-date-today :foreground ,date-weekend)))
+ `(org-agenda-diary ((,c :inherit org-agenda-calendar-sexp)))
+ `(org-agenda-dimmed-todo-face ((,c :inherit shadow)))
+ `(org-agenda-done ((,c :inherit org-done)))
+ `(org-agenda-filter-category ((,c :inherit bold :foreground ,modeline-err)))
+ `(org-agenda-filter-effort ((,c :inherit bold :foreground ,modeline-err)))
+ `(org-agenda-filter-regexp ((,c :inherit bold :foreground ,modeline-err)))
+ `(org-agenda-filter-tags ((,c :inherit bold :foreground ,modeline-err)))
+ `(org-agenda-restriction-lock ((,c :background ,bg-dim :foreground ,fg-dim)))
+ `(org-agenda-structure ((,c ,@(modus-themes--heading 'agenda-structure fg-alt))))
+ `(org-agenda-structure-filter ((,c :inherit org-agenda-structure :foreground ,warning)))
+ `(org-agenda-structure-secondary ((,c :inherit font-lock-doc-face)))
+ `(org-archived ((,c :background ,bg-inactive :foreground ,fg-main)))
+ `(org-block ((,c ,@(modus-themes--org-block fg-main bg-dim))))
+ `(org-block-begin-line ((,c ,@(modus-themes--org-block prose-block bg-inactive))))
+ `(org-block-end-line ((,c :inherit org-block-begin-line)))
+ `(org-checkbox ((,c :foreground ,warning)))
+ `(org-checkbox-statistics-done ((,c :inherit org-done)))
+ `(org-checkbox-statistics-todo ((,c :inherit org-todo)))
+ `(org-clock-overlay ((,c :inherit secondary-selection)))
+ `(org-code ((,c :inherit modus-themes-prose-code)))
+ `(org-column ((,c :inherit default :background ,bg-dim)))
+ `(org-column-title ((,c :inherit (bold default) :underline t :background ,bg-dim)))
+ `(org-date ((,c :inherit modus-themes-fixed-pitch :foreground ,date-common)))
+ `(org-date-selected ((,c :foreground ,date-common :inverse-video t)))
+ `(org-document-info ((,c :foreground ,prose-metadata-value)))
+ `(org-document-info-keyword ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-metadata)))
+ `(org-document-title ((,c :inherit modus-themes-heading-0)))
+ `(org-done ((,c :foreground ,prose-done)))
+ `(org-drawer ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-metadata)))
+ `(org-ellipsis (( ))) ; inherits from the heading's color
+ `(org-footnote ((,c :inherit link)))
+ `(org-formula ((,c :inherit modus-themes-fixed-pitch :foreground ,fnname)))
+ `(org-headline-done ((,c :inherit org-done)))
+ `(org-headline-todo ((,c :inherit org-todo)))
+ `(org-hide ((,c :foreground ,bg-main)))
+ `(org-indent ((,c :inherit (fixed-pitch org-hide))))
+ `(org-imminent-deadline ((,c :inherit modus-themes-bold :foreground ,date-deadline)))
+ `(org-latex-and-related ((,c :foreground ,type)))
+ `(org-level-1 ((,c :inherit modus-themes-heading-1)))
+ `(org-level-2 ((,c :inherit modus-themes-heading-2)))
+ `(org-level-3 ((,c :inherit modus-themes-heading-3)))
+ `(org-level-4 ((,c :inherit modus-themes-heading-4)))
+ `(org-level-5 ((,c :inherit modus-themes-heading-5)))
+ `(org-level-6 ((,c :inherit modus-themes-heading-6)))
+ `(org-level-7 ((,c :inherit modus-themes-heading-7)))
+ `(org-level-8 ((,c :inherit modus-themes-heading-8)))
+ `(org-link ((,c :inherit link)))
+ `(org-list-dt ((,c :inherit bold)))
+ `(org-macro ((,c :inherit modus-themes-prose-macro)))
+ `(org-meta-line ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-metadata)))
+ `(org-mode-line-clock (( )))
+ `(org-mode-line-clock-overrun ((,c :inherit bold :foreground ,modeline-err)))
+ `(org-priority ((,c :foreground ,prose-tag)))
+ `(org-property-value ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-metadata-value)))
+ `(org-quote ((,c :inherit org-block)))
+ `(org-scheduled ((,c :foreground ,date-scheduled)))
+ `(org-scheduled-previously ((,c :inherit org-scheduled)))
+ `(org-scheduled-today ((,c :inherit (modus-themes-bold org-scheduled))))
+ `(org-sexp-date ((,c :foreground ,date-common)))
+ `(org-special-keyword ((,c :inherit org-drawer)))
+ `(org-table ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-table)))
+ `(org-table-header ((,c :inherit (bold org-table))))
+ `(org-tag ((,c :foreground ,prose-tag)))
+ `(org-tag-group ((,c :inherit (bold org-tag))))
+ `(org-target ((,c :underline t)))
+ `(org-time-grid ((,c :foreground ,fg-dim)))
+ `(org-todo ((,c :foreground ,prose-todo)))
+ `(org-upcoming-deadline ((,c :foreground ,date-deadline)))
+ `(org-upcoming-distant-deadline ((,c :inherit org-upcoming-deadline)))
+ `(org-verbatim ((,c :inherit modus-themes-prose-verbatim)))
+ `(org-verse ((,c :inherit org-block)))
+ `(org-warning ((,c :inherit warning)))
+;;;;; org-habit
+ `(org-habit-alert-face ((,c :background ,bg-graph-yellow-0 :foreground "black"))) ; fg is special case
+ `(org-habit-alert-future-face ((,c :background ,bg-graph-yellow-1)))
+ `(org-habit-clear-face ((,c :background ,bg-graph-blue-0 :foreground "black"))) ; fg is special case
+ `(org-habit-clear-future-face ((,c :background ,bg-graph-blue-1)))
+ `(org-habit-overdue-face ((,c :background ,bg-graph-red-0)))
+ `(org-habit-overdue-future-face ((,c :background ,bg-graph-red-1)))
+ `(org-habit-ready-face ((,c :background ,bg-graph-green-0 :foreground "black"))) ; fg is special case
+ `(org-habit-ready-future-face ((,c :background ,bg-graph-green-1)))
+;;;;; org-journal
+ `(org-journal-calendar-entry-face ((,c :inherit modus-themes-slant :foreground ,date-common)))
+ `(org-journal-calendar-scheduled-face ((,c :inherit (modus-themes-slant org-scheduled))))
+ `(org-journal-highlight ((,c :foreground ,err)))
+;;;;; org-noter
+ `(org-noter-no-notes-exist-face ((,c :inherit error)))
+ `(org-noter-notes-exist-face ((,c :inherit success)))
+;;;;; org-pomodoro
+ `(org-pomodoro-mode-line ((,c :foreground ,err)))
+ `(org-pomodoro-mode-line-break ((,c :foreground ,info)))
+ `(org-pomodoro-mode-line-overtime ((,c :inherit error)))
+;;;;; org-recur
+ `(org-recur ((,c :foreground ,fg-alt)))
+;;;;; org-roam
+ `(org-roam-dim ((,c :foreground "gray50")))
+ `(org-roam-olp ((,c :inherit shadow)))
+ `(org-roam-preview-heading ((,c :background ,bg-inactive)))
+ `(org-roam-preview-heading-highlight ((,c :background ,bg-active :foreground ,fg-main)))
+ `(org-roam-preview-region ((,c :inherit bold)))
+ `(org-roam-title ((,c :inherit bold)))
+;;;;; org-superstar
+ `(org-superstar-item ((,c :foreground ,fg-main)))
+;;;;; org-tree-slide
+ `(org-tree-slide-header-overlay-face ((,c :inherit org-document-title)))
+;;;;; origami
+ `(origami-fold-header-face ((,c :background ,bg-dim :foreground ,fg-dim :box t)))
+ `(origami-fold-replacement-face ((,c :background ,bg-inactive :foreground ,fg-dim)))
+;;;;; outline-mode
+ `(outline-1 ((,c :inherit modus-themes-heading-1)))
+ `(outline-2 ((,c :inherit modus-themes-heading-2)))
+ `(outline-3 ((,c :inherit modus-themes-heading-3)))
+ `(outline-4 ((,c :inherit modus-themes-heading-4)))
+ `(outline-5 ((,c :inherit modus-themes-heading-5)))
+ `(outline-6 ((,c :inherit modus-themes-heading-6)))
+ `(outline-7 ((,c :inherit modus-themes-heading-7)))
+ `(outline-8 ((,c :inherit modus-themes-heading-8)))
+;;;;; outline-minor-faces
+ `(outline-minor-0 (()))
+;;;;; package (M-x list-packages)
+ `(package-description ((,c :foreground ,docstring)))
+ `(package-help-section-name ((,c :inherit bold)))
+ `(package-name ((,c :inherit link)))
+ `(package-status-available ((,c :foreground ,date-common)))
+ `(package-status-avail-obso ((,c :inherit error)))
+ `(package-status-built-in ((,c :foreground ,builtin)))
+ `(package-status-dependency ((,c :foreground ,warning)))
+ `(package-status-disabled ((,c :inherit error :strike-through t)))
+ `(package-status-from-source ((,c :foreground ,type)))
+ `(package-status-held ((,c :foreground ,warning)))
+ `(package-status-incompat ((,c :inherit warning)))
+ `(package-status-installed ((,c :foreground ,fg-alt)))
+ `(package-status-new ((,c :inherit success)))
+ `(package-status-unsigned ((,c :inherit error)))
+;;;;; page-break-lines
+ `(page-break-lines ((,c :inherit default :foreground "gray50")))
+;;;;; pandoc-mode
+ `(pandoc-citation-key-face ((,c :inherit font-lock-builtin-face)))
+ `(pandoc-directive-@@-face ((,c :inherit font-lock-keyword-face)))
+ `(pandoc-directive-braces-face ((,c :inherit font-lock-constant-face)))
+ `(pandoc-directive-contents-face ((,c :inherit font-lock-string-face)))
+ `(pandoc-directive-type-face ((,c :inherit font-lock-type-face)))
+;;;;; paren-face
+ `(parenthesis ((,c :inherit shadow)))
+;;;;; pass
+ `(pass-mode-directory-face ((,c :inherit bold :foreground ,accent-0)))
+ `(pass-mode-entry-face ((,c :background ,bg-main :foreground ,fg-main)))
+ `(pass-mode-header-face ((,c :inherit shadow)))
+;;;;; pdf-tools
+ `(pdf-links-read-link ((,c :background ,fg-main :foreground ,bg-magenta-intense :inherit bold))) ; Foreground is background and vice versa
+ `(pdf-occur-document-face ((,c :inherit shadow)))
+ `(pdf-occur-page-face ((,c :inherit shadow)))
+;;;;; persp-mode
+ `(persp-face-lighter-buffer-not-in-persp ((,c :inherit error)))
+ `(persp-face-lighter-default ((,c :inherit bold :foreground ,name)))
+ `(persp-face-lighter-nil-persp ((,c :inherit bold)))
+;;;;; perspective
+ `(persp-selected-face ((,c :inherit bold :foreground ,name)))
+;;;;; proced
+ `(proced-cpu ((,c :foreground ,keyword)))
+ `(proced-emacs-pid ((,c :foreground ,identifier :underline t)))
+ `(proced-executable ((,c :foreground ,name)))
+ `(proced-interruptible-sleep-status-code ((,c :inherit shadow)))
+ `(proced-mem ((,c :foreground ,type)))
+ `(proced-memory-high-usage ((,c :foreground ,err)))
+ `(proced-memory-low-usage ((,c :foreground ,info)))
+ `(proced-memory-medium-usage ((,c :foreground ,warning)))
+ `(proced-pgrp ((,c :inherit proced-pid)))
+ `(proced-pid ((,c :foreground ,identifier)))
+ `(proced-ppid ((,c :inherit proced-pid)))
+ `(proced-run-status-code ((,c :inherit success)))
+ `(proced-sess ((,c :inherit proced-pid)))
+ `(proced-session-leader-pid ((,c :inherit bold :foreground ,identifier)))
+ `(proced-time-colon (( )))
+ `(proced-uninterruptible-sleep-status-code ((,c :inherit error)))
+ `(proced-user (( )))
+;;;;; popup
+ `(popup-face ((,c :background ,bg-inactive :foreground ,fg-main)))
+ `(popup-isearch-match ((,c :inherit modus-themes-search-current)))
+ `(popup-menu-mouse-face ((,c :inherit highlight)))
+ `(popup-menu-selection-face ((,c :inherit modus-themes-completion-selected)))
+ `(popup-scroll-bar-background-face ((,c :background ,bg-active)))
+ `(popup-scroll-bar-foreground-face (( )))
+ `(popup-summary-face ((,c :background ,bg-active :foreground ,fg-dim)))
+ `(popup-tip-face ((,c :inherit modus-themes-intense-yellow)))
+;;;;; powerline
+ `(powerline-active0 ((,c :background ,fg-dim :foreground ,bg-main)))
+ `(powerline-active1 ((,c :inherit mode-line)))
+ `(powerline-active2 ((,c :inherit mode-line-inactive)))
+ `(powerline-inactive0 ((,c :background ,bg-active :foreground ,fg-dim)))
+ `(powerline-inactive1 ((,c :background ,bg-main :foreground ,fg-dim)))
+ `(powerline-inactive2 ((,c :inherit mode-line-inactive)))
+;;;;; powerline-evil
+ `(powerline-evil-base-face ((,c :background ,fg-main :foreground ,bg-main)))
+ `(powerline-evil-emacs-face ((,c :inherit bold :background ,bg-main)))
+ `(powerline-evil-insert-face ((,c :inherit success :background ,bg-main)))
+ `(powerline-evil-motion-face ((,c :inherit italic :background ,bg-main)))
+ `(powerline-evil-normal-face ((,c :background ,bg-main :foreground ,fg-alt)))
+ `(powerline-evil-operator-face ((,c :inherit warning :background ,bg-main)))
+ `(powerline-evil-replace-face ((,c :inherit error :background ,bg-main)))
+ `(powerline-evil-visual-face ((,c :inherit bold :background ,bg-main)))
+;;;;; prescient
+ `(prescient-primary-highlight ((,c :inherit modus-themes-completion-match-0)))
+ `(prescient-secondary-highlight ((,c :inherit modus-themes-completion-match-1)))
+;;;;; proced
+ `(proced-mark ((,c :inherit bold)))
+ `(proced-marked ((,c :inherit modus-themes-mark-alt)))
+ `(proced-sort-header ((,c :inherit bold :underline t)))
+;;;;; prodigy
+ `(prodigy-green-face ((,c :inherit success)))
+ `(prodigy-red-face ((,c :inherit error)))
+ `(prodigy-yellow-face ((,c :inherit warning)))
+;;;;; pulse
+ `(pulse-highlight-start-face ((,c :background ,bg-blue-intense :extend t)))
+;;;;; pyim
+ `(pyim-page ((,c :background ,bg-active)))
+ `(pyim-page-selection ((,c :inherit bold :background ,bg-active :foreground ,info)))
+ `(pyim-page-subword ((,c :background ,bg-inactive)))
+;;;;; quick-peek
+ `(quick-peek-background-face ((,c :background ,bg-inactive)))
+ `(quick-peek-border-face ((,c :background ,border :height 1)))
+ `(quick-peek-padding-face ((,c :background ,bg-inactive :height 0.15)))
+;;;;; rainbow-delimiters
+ `(rainbow-delimiters-base-error-face ((,c :inherit modus-themes-prominent-error)))
+ `(rainbow-delimiters-base-face ((,c :foreground ,fg-main)))
+ `(rainbow-delimiters-depth-1-face ((,c :foreground ,rainbow-0)))
+ `(rainbow-delimiters-depth-2-face ((,c :foreground ,rainbow-1)))
+ `(rainbow-delimiters-depth-3-face ((,c :foreground ,rainbow-2)))
+ `(rainbow-delimiters-depth-4-face ((,c :foreground ,rainbow-3)))
+ `(rainbow-delimiters-depth-5-face ((,c :foreground ,rainbow-4)))
+ `(rainbow-delimiters-depth-6-face ((,c :foreground ,rainbow-5)))
+ `(rainbow-delimiters-depth-7-face ((,c :foreground ,rainbow-6)))
+ `(rainbow-delimiters-depth-8-face ((,c :foreground ,rainbow-7)))
+ `(rainbow-delimiters-depth-9-face ((,c :foreground ,rainbow-8)))
+ `(rainbow-delimiters-mismatched-face ((,c :inherit (bold modus-themes-prominent-warning))))
+ `(rainbow-delimiters-unmatched-face ((,c :inherit (bold modus-themes-prominent-error))))
+;;;;; rcirc
+ `(rcirc-bright-nick ((,c :inherit bold :foreground ,accent-2)))
+ `(rcirc-dim-nick ((,c :inherit shadow)))
+ `(rcirc-monospace-text ((,c :inherit fixed-pitch)))
+ `(rcirc-my-nick ((,c :inherit bold :foreground ,accent-1)))
+ `(rcirc-nick-in-message ((,c :inherit rcirc-my-nick)))
+ `(rcirc-nick-in-message-full-line ((,c :inherit rcirc-my-nick)))
+ `(rcirc-other-nick ((,c :inherit bold :foreground ,accent-0)))
+ `(rcirc-prompt ((,c :inherit minibuffer-prompt)))
+ `(rcirc-server ((,c :inherit font-lock-comment-face)))
+ `(rcirc-timestamp ((,c :foreground ,date-common)))
+ `(rcirc-track-keyword ((,c :inherit bold :foreground ,modeline-warning)))
+ `(rcirc-track-nick ((,c :inherit rcirc-my-nick)))
+ `(rcirc-url ((,c :inherit link)))
+;;;;; recursion-indicator
+ `(recursion-indicator-general ((,c :foreground ,modeline-err)))
+ `(recursion-indicator-minibuffer ((,c :foreground ,modeline-info)))
+;;;;; regexp-builder (re-builder)
+ `(reb-match-0 ((,c :inherit modus-themes-intense-cyan)))
+ `(reb-match-1 ((,c :inherit modus-themes-subtle-magenta)))
+ `(reb-match-2 ((,c :inherit modus-themes-subtle-green)))
+ `(reb-match-3 ((,c :inherit modus-themes-intense-yellow)))
+ `(reb-regexp-grouping-backslash ((,c :inherit font-lock-regexp-grouping-backslash)))
+ `(reb-regexp-grouping-construct ((,c :inherit font-lock-regexp-grouping-construct)))
+;;;;; rg (rg.el)
+ `(rg-column-number-face ((,c :inherit shadow)))
+ `(rg-context-face ((,c :inherit shadow)))
+ `(rg-error-face ((,c :inherit error)))
+ `(rg-file-tag-face ((,c :inherit font-lock-builtin-face)))
+ `(rg-filename-face ((,c :inherit bold :foreground ,name)))
+ `(rg-line-number-face ((,c :inherit shadow)))
+ `(rg-literal-face ((,c :inherit font-lock-constant-face)))
+ `(rg-match-face ((,c :inherit match)))
+ `(rg-regexp-face ((,c :foreground ,name)))
+ `(rg-toggle-off-face ((,c :inherit (shadow bold))))
+ `(rg-toggle-on-face ((,c :inherit success)))
+ `(rg-warning-face ((,c :inherit warning)))
+;;;;; ripgrep
+ `(ripgrep-context-face ((,c :inherit shadow)))
+ `(ripgrep-error-face ((,c :inherit error)))
+ `(ripgrep-hit-face ((,c :inherit success)))
+ `(ripgrep-match-face ((,c :inherit match)))
+;;;;; rmail
+ `(rmail-header-name ((,c :inherit bold)))
+ `(rmail-highlight ((,c :inherit bold :foreground ,mail-other)))
+;;;;; rst-mode
+ `(rst-level-1 ((,c :inherit modus-themes-heading-1)))
+ `(rst-level-2 ((,c :inherit modus-themes-heading-2)))
+ `(rst-level-3 ((,c :inherit modus-themes-heading-3)))
+ `(rst-level-4 ((,c :inherit modus-themes-heading-4)))
+ `(rst-level-5 ((,c :inherit modus-themes-heading-5)))
+ `(rst-level-6 ((,c :inherit modus-themes-heading-6)))
+;;;;; ruler-mode
+ `(ruler-mode-column-number ((,c :inherit ruler-mode-default)))
+ `(ruler-mode-comment-column ((,c :inherit ruler-mode-default :foreground ,red)))
+ `(ruler-mode-current-column ((,c :inherit ruler-mode-default :background ,bg-active :foreground ,fg-main)))
+ `(ruler-mode-default ((,c :inherit default :background ,bg-dim :foreground ,fg-dim)))
+ `(ruler-mode-fill-column ((,c :inherit ruler-mode-default :foreground ,green)))
+ `(ruler-mode-fringes ((,c :inherit ruler-mode-default :foreground ,cyan)))
+ `(ruler-mode-goal-column ((,c :inherit ruler-mode-default :foreground ,blue)))
+ `(ruler-mode-margins ((,c :inherit ruler-mode-default :foreground ,bg-main)))
+ `(ruler-mode-pad ((,c :inherit ruler-mode-default :background ,bg-inactive :foreground ,fg-dim)))
+ `(ruler-mode-tab-stop ((,c :inherit ruler-mode-default :foreground ,yellow)))
+;;;;; sesman
+ `(sesman-browser-button-face ((,c :inherit button)))
+ `(sesman-browser-highligh-face ((,c :inherit highlight)))
+ `(sesman-buffer-face ((,c :foreground ,accent-1)))
+ `(sesman-directory-face ((,c :inherit bold :foreground ,accent-0)))
+ `(sesman-project-face ((,c :inherit bold :foreground ,accent-2)))
+;;;;; shell-script-mode
+ `(sh-heredoc ((,c :inherit font-lock-string-face)))
+ `(sh-quoted-exec ((,c :inherit font-lock-builtin-face)))
+;;;;; shortdoc
+ `(shortdoc-heading ((,c :inherit bold)))
+ `(shortdoc-section (())) ; remove the default's variable-pitch style
+;;;;; show-paren-mode
+ `(show-paren-match ((,c :background ,bg-paren-match :foreground ,fg-main :underline ,underline-paren-match)))
+ `(show-paren-match-expression ((,c :background ,bg-paren-expression)))
+ `(show-paren-mismatch ((,c :inherit modus-themes-prominent-error)))
+;;;;; shr
+ `(shr-abbreviation ((,c :inherit modus-themes-lang-note)))
+ `(shr-code ((,c :inherit modus-themes-prose-verbatim)))
+ `(shr-h1 ((,c :inherit modus-themes-heading-1)))
+ `(shr-h2 ((,c :inherit modus-themes-heading-2)))
+ `(shr-h3 ((,c :inherit modus-themes-heading-3)))
+ `(shr-h4 ((,c :inherit modus-themes-heading-4)))
+ `(shr-h5 ((,c :inherit modus-themes-heading-5)))
+ `(shr-h6 ((,c :inherit modus-themes-heading-6)))
+ `(shr-selected-link ((,c :inherit modus-themes-mark-sel)))
+;;;;; side-notes
+ `(side-notes ((,c :background ,bg-dim :foreground ,fg-dim)))
+;;;;; sieve-mode
+ `(sieve-action-commands ((,c :inherit font-lock-builtin-face)))
+ `(sieve-control-commands ((,c :inherit font-lock-keyword-face)))
+ `(sieve-tagged-arguments ((,c :inherit font-lock-type-face)))
+ `(sieve-test-commands ((,c :inherit font-lock-function-name-face)))
+;;;;; skewer-mode
+ `(skewer-error-face ((,c :inherit modus-themes-lang-error)))
+;;;;; slime (sldb)
+ `(sldb-condition-face ((,c :inherit font-lock-preprocessor-face)))
+ `(sldb-restart-number-face ((,c :inherit bold)))
+ `(sldb-restart-type-face ((,c :inherit font-lock-type-face)))
+ `(sldb-restartable-frame-line-face ((,c :inherit success)))
+ `(sldb-section-face ((,c :inherit bold)))
+ `(slime-error-face ((,c :inherit modus-themes-lang-error)))
+ `(slime-note-face ((,c :underline t)))
+ `(slime-repl-input-face ((,c :inherit bold)))
+ `(slime-repl-inputed-output-face ((,c :inherit font-lock-string-face)))
+ `(slime-repl-output-mouseover-face ((,c :inherit highlight)))
+ `(slime-repl-prompt-face ((,c :inherit modus-themes-prompt)))
+ `(slime-style-warning-face ((,c :inherit modus-themes-lang-note)))
+ `(slime-warning-face ((,c :inherit modus-themes-lang-warning)))
+;;;;; sly
+ `(sly-action-face ((,c :inherit font-lock-type-face)))
+ `(sly-db-condition-face ((,c :inherit font-lock-preprocessor-face)))
+ `(sly-db-restartable-frame-line-face ((,c :inherit success)))
+ `(sly-error-face ((,c :inherit modus-themes-lang-error)))
+ `(sly-mode-line ((,c :inherit mode-line-emphasis)))
+ `(sly-mrepl-output-face ((,c :inherit font-lock-string-face)))
+ `(sly-mrepl-output-face ((,c :inherit font-lock-string-face)))
+ `(sly-mrepl-prompt-face ((,c :inherit modus-themes-prompt)))
+ `(sly-note-face ((,c :inherit modus-themes-lang-note)))
+ `(sly-stickers-placed-face ((,c :background ,bg-inactive)))
+ `(sly-style-warning-face ((,c :inherit modus-themes-lang-note)))
+ `(sly-warning-face ((,c :inherit modus-themes-lang-warning)))
+;;;;; smart-mode-line
+ `(sml/charging ((,c :foreground ,info)))
+ `(sml/discharging ((,c :foreground ,err)))
+ `(sml/filename ((,c :inherit bold :foreground ,name)))
+ `(sml/folder (( )))
+ `(sml/git ((,c :inherit success)))
+ `(sml/global (( )))
+ `(sml/line-number ((,c :inherit sml/global)))
+ `(sml/minor-modes ((,c :inherit sml/global)))
+ `(sml/modes ((,c :inherit bold)))
+ `(sml/modified ((,c :inherit italic)))
+ `(sml/mule-info ((,c :inherit sml/global)))
+ `(sml/name-filling ((,c :inherit warning)))
+ `(sml/not-modified ((,c :inherit sml/global)))
+ `(sml/numbers-separator ((,c :inherit sml/global)))
+ `(sml/outside-modified ((,c :inherit modus-themes-prominent-error)))
+ `(sml/position-percentage ((,c :inherit sml/global)))
+ `(sml/prefix ((,c :foreground ,fg-alt)))
+ `(sml/process ((,c :inherit sml/prefix)))
+ `(sml/projectile ((,c :inherit sml/git)))
+ `(sml/read-only (( )))
+ `(sml/remote ((,c :inherit sml/global)))
+ `(sml/sudo ((,c :inherit warning)))
+ `(sml/time ((,c :inherit sml/global)))
+ `(sml/vc ((,c :inherit sml/git)))
+ `(sml/vc-edited ((,c :inherit italic)))
+;;;;; smerge
+ `(smerge-base ((,c :inherit diff-changed)))
+ `(smerge-lower ((,c :inherit diff-added)))
+ `(smerge-markers ((,c :inherit diff-header)))
+ `(smerge-refined-added ((,c :inherit diff-refine-added)))
+ `(smerge-refined-changed (()))
+ `(smerge-refined-removed ((,c :inherit diff-refine-removed)))
+ `(smerge-upper ((,c :inherit diff-removed)))
+;;;;; speedbar
+ `(speedbar-button-face ((,c :inherit button)))
+ `(speedbar-directory-face ((,c :inherit bold :foreground ,accent-0)))
+ `(speedbar-file-face ((,c :foreground ,fg-main)))
+ `(speedbar-highlight-face ((,c :inherit highlight)))
+ `(speedbar-selected-face ((,c :inherit modus-themes-mark-sel)))
+ `(speedbar-separator-face ((,c :background ,bg-active :foreground ,fg-main)))
+ `(speedbar-tag-face ((,c :foreground ,accent-1)))
+;;;;; spell-fu
+ `(spell-fu-incorrect-face ((,c :inherit modus-themes-lang-error)))
+;;;;; stripes
+ `(stripes ((,c :background ,bg-inactive)))
+;;;;; suggest
+ `(suggest-heading ((,c :inherit warning)))
+;;;;; switch-window
+ `(switch-window-background ((,c :background ,bg-inactive)))
+ `(switch-window-label ((,c :height 3.0 :foreground ,red-intense)))
+;;;;; swiper
+ `(swiper-background-match-face-1 (( )))
+ `(swiper-background-match-face-2 ((,c :inherit modus-themes-completion-match-0)))
+ `(swiper-background-match-face-3 ((,c :inherit modus-themes-completion-match-1)))
+ `(swiper-background-match-face-4 ((,c :inherit modus-themes-completion-match-2)))
+ `(swiper-line-face ((,c :background ,bg-hl-line :extend t)))
+ `(swiper-match-face-1 (( )))
+ `(swiper-match-face-2 ((,c :inherit modus-themes-completion-match-0)))
+ `(swiper-match-face-3 ((,c :inherit modus-themes-completion-match-1)))
+ `(swiper-match-face-4 ((,c :inherit modus-themes-completion-match-2)))
+;;;;; symbol-overlay
+ `(symbol-overlay-default-face ((,c :background ,bg-inactive)))
+ `(symbol-overlay-face-1 ((,c :inherit modus-themes-intense-blue)))
+ `(symbol-overlay-face-2 ((,c :inherit modus-themes-intense-magenta)))
+ `(symbol-overlay-face-3 ((,c :inherit modus-themes-intense-yellow)))
+ `(symbol-overlay-face-4 ((,c :inherit modus-themes-intense-magenta)))
+ `(symbol-overlay-face-5 ((,c :inherit modus-themes-intense-red)))
+ `(symbol-overlay-face-6 ((,c :inherit modus-themes-intense-red)))
+ `(symbol-overlay-face-7 ((,c :inherit modus-themes-intense-cyan)))
+ `(symbol-overlay-face-8 ((,c :inherit modus-themes-intense-cyan)))
+;;;;; syslog-mode
+ `(syslog-debug ((,c :inherit italic)))
+ `(syslog-error ((,c :inherit error)))
+ `(syslog-file ((,c :inherit bold :foreground ,name)))
+ `(syslog-hide ((,c :background ,bg-main :foreground ,fg-main)))
+ `(syslog-hour ((,c :inherit bold :foreground ,date-common)))
+ `(syslog-info ((,c :inherit success)))
+ `(syslog-ip ((,c :inherit bold :foreground ,name :underline t)))
+ `(syslog-su ((,c :inherit error :underline t)))
+ `(syslog-warn ((,c :inherit warning)))
+;;;;; tab-bar-mode
+ `(tab-bar ((,c :inherit modus-themes-ui-variable-pitch :background ,bg-tab-bar)))
+ `(tab-bar-tab-group-current ((,c :inherit bold :background ,bg-tab-current :box (:line-width -2 :color ,bg-tab-current) :foreground ,fg-alt)))
+ `(tab-bar-tab-group-inactive ((,c :background ,bg-tab-bar :box (:line-width -2 :color ,bg-tab-bar) :foreground ,fg-alt)))
+ `(tab-bar-tab ((,c :inherit bold :box (:line-width -2 :color ,bg-tab-current) :background ,bg-tab-current)))
+ `(tab-bar-tab-inactive ((,c :box (:line-width -2 :color ,bg-tab-other) :background ,bg-tab-other)))
+ `(tab-bar-tab-ungrouped ((,c :inherit tab-bar-tab-inactive)))
+;;;;; tab-line-mode
+ `(tab-line ((,c :inherit modus-themes-ui-variable-pitch :background ,bg-tab-bar :height 0.95)))
+ `(tab-line-close-highlight ((,c :foreground ,err)))
+ `(tab-line-highlight ((,c :inherit highlight)))
+ `(tab-line-tab (( )))
+ `(tab-line-tab-current ((,c :inherit bold :box (:line-width -2 :color ,bg-tab-current) :background ,bg-tab-current)))
+ `(tab-line-tab-inactive ((,c :box (:line-width -2 :color ,bg-tab-other) :background ,bg-tab-other)))
+ `(tab-line-tab-inactive-alternate ((,c :inherit tab-line-tab-inactive :foreground ,fg-alt)))
+ `(tab-line-tab-modified ((,c :foreground ,warning)))
+;;;;; table (built-in table.el)
+ `(table-cell ((,c :background ,bg-dim)))
+;;;;; telega
+ `(telega-button ((,c :box t :foreground ,fg-link)))
+ `(telega-button-active ((,c :box ,fg-link :background ,fg-link :foreground ,bg-main)))
+ `(telega-button-highlight ((,c :inherit secondary-selection)))
+ `(telega-chat-prompt ((,c :inherit modus-themes-prompt)))
+ `(telega-entity-type-code ((,c :inherit modus-themes-prose-verbatim)))
+ `(telega-entity-type-mention ((,c :foreground ,cyan)))
+ `(telega-entity-type-pre ((,c :inherit modus-themes-prose-code)))
+ `(telega-entity-type-spoiler ((,c :background ,fg-main :foreground ,fg-main)))
+ `(telega-msg-heading ((,c :background ,bg-inactive)))
+ `(telega-msg-self-title ((,c :inherit bold)))
+ `(telega-root-heading ((,c :background ,bg-inactive)))
+ `(telega-secret-title ((,c :foreground ,magenta-warmer)))
+ `(telega-unmuted-count ((,c :foreground ,blue-cooler)))
+ `(telega-user-online-status ((,c :foreground ,cyan)))
+ `(telega-username ((,c :foreground ,cyan-cooler)))
+ `(telega-webpage-chat-link ((,c :background ,bg-inactive)))
+ `(telega-webpage-fixed ((,c :inherit modus-themes-fixed-pitch :height 0.85)))
+ `(telega-webpage-header ((,c :inherit modus-themes-variable-pitch :height 1.3)))
+ `(telega-webpage-preformatted ((,c :inherit modus-themes-fixed-pitch :background ,bg-inactive)))
+ `(telega-webpage-subheader ((,c :inherit modus-themes-variable-pitch :height 1.15)))
+;;;;; terraform-mode
+ `(terraform--resource-name-face ((,c :foreground ,keyword)))
+ `(terraform--resource-type-face ((,c :foreground ,type)))
+;;;;; term
+ ;; NOTE 2023-08-10: `term-color-black' and `term-color-white' use
+ ;; the "bright" semantic color mappings to make sure they are
+ ;; distinct from `term'.
+ `(term ((,c :background ,bg-main :foreground ,fg-main)))
+ `(term-bold ((,c :inherit bold)))
+ `(term-color-black ((,c :background ,bg-term-black-bright :foreground ,fg-term-black-bright)))
+ `(term-color-blue ((,c :background ,bg-term-blue :foreground ,fg-term-blue)))
+ `(term-color-cyan ((,c :background ,bg-term-cyan :foreground ,fg-term-cyan)))
+ `(term-color-green ((,c :background ,bg-term-green :foreground ,fg-term-green)))
+ `(term-color-magenta ((,c :background ,bg-term-magenta :foreground ,fg-term-magenta)))
+ `(term-color-red ((,c :background ,bg-term-red :foreground ,fg-term-red)))
+ `(term-color-white ((,c :background ,bg-term-white-bright :foreground ,fg-term-white-bright)))
+ `(term-color-yellow ((,c :background ,bg-term-yellow :foreground ,fg-term-yellow)))
+ `(term-underline ((,c :underline t)))
+;;;;; textsec
+ `(textsec-suspicious (( )))
+;;;;; transient
+ `(transient-active-infix ((,c :inherit highlight)))
+ `(transient-amaranth ((,c :inherit bold :foreground ,yellow-warmer)))
+ ;; Placate the compiler for what is a spurious warning. We also
+ ;; have to do this with `eldoc-highlight-function-argument'.
+ (list 'transient-argument `((,c :inherit (bold modus-themes-mark-alt))))
+ `(transient-blue ((,c :inherit bold :foreground ,blue)))
+ `(transient-disabled-suffix ((,c :inherit modus-themes-mark-del)))
+ `(transient-enabled-suffix ((,c :inherit modus-themes-subtle-cyan)))
+ `(transient-heading ((,c :inherit bold :foreground ,fg-main)))
+ `(transient-inactive-argument ((,c :inherit shadow)))
+ `(transient-inactive-value ((,c :inherit shadow)))
+ `(transient-key ((,c :inherit modus-themes-key-binding)))
+ `(transient-mismatched-key ((,c :underline t)))
+ `(transient-nonstandard-key ((,c :underline t)))
+ `(transient-pink ((,c :inherit bold :foreground ,magenta)))
+ `(transient-purple ((,c :inherit bold :foreground ,magenta-cooler)))
+ `(transient-red ((,c :inherit bold :foreground ,red-faint)))
+ `(transient-teal ((,c :inherit bold :foreground ,cyan-cooler)))
+ `(transient-unreachable ((,c :inherit shadow)))
+ `(transient-unreachable-key ((,c :inherit shadow)))
+ `(transient-value ((,c :inherit (bold modus-themes-mark-sel))))
+;;;;; trashed
+ `(trashed-deleted ((,c :inherit modus-themes-mark-del)))
+ `(trashed-directory ((,c :foreground ,accent-0)))
+ `(trashed-mark ((,c :inherit bold)))
+ `(trashed-marked ((,c :inherit modus-themes-mark-alt)))
+ `(trashed-restored ((,c :inherit modus-themes-mark-sel)))
+;;;;; tree-sitter
+ `(tree-sitter-hl-face:attribute ((,c :inherit font-lock-variable-name-face)))
+ `(tree-sitter-hl-face:constant.builtin ((,c :inherit tree-sitter-hl-face:constant)))
+ `(tree-sitter-hl-face:escape ((,c :inherit font-lock-regexp-grouping-backslash)))
+ `(tree-sitter-hl-face:function ((,c :inherit font-lock-function-name-face)))
+ `(tree-sitter-hl-face:function.call ((,c :inherit tree-sitter-hl-face:function)))
+ `(tree-sitter-hl-face:label (( )))
+ `(tree-sitter-hl-face:method.call (( )))
+ `(tree-sitter-hl-face:operator ((,c :inherit modus-themes-bold)))
+ `(tree-sitter-hl-face:property (( )))
+ `(tree-sitter-hl-face:property.definition ((,c :inherit font-lock-variable-name-face)))
+ `(tree-sitter-hl-face:punctuation (( )))
+ `(tree-sitter-hl-face:punctuation.bracket (( )))
+ `(tree-sitter-hl-face:punctuation.delimiter (( )))
+ `(tree-sitter-hl-face:punctuation.special ((,c :inherit font-lock-regexp-grouping-construct)))
+ `(tree-sitter-hl-face:string.special ((,c :inherit tree-sitter-hl-face:string)))
+ `(tree-sitter-hl-face:tag ((,c :inherit font-lock-function-name-face)))
+ `(tree-sitter-hl-face:type.argument (( )))
+;;;;; tty-menu
+ `(tty-menu-disabled-face ((,c :background ,bg-inactive :foreground ,fg-dim)))
+ `(tty-menu-enabled-face ((,c :inherit bold :background ,bg-inactive :foreground ,fg-main)))
+ `(tty-menu-selected-face ((,c :inherit modus-themes-intense-blue)))
+;;;;; tuareg
+ `(caml-types-def-face ((,c :inherit modus-themes-subtle-red)))
+ `(caml-types-expr-face ((,c :inherit modus-themes-subtle-green)))
+ `(caml-types-occ-face ((,c :inherit modus-themes-subtle-green)))
+ `(caml-types-scope-face ((,c :inherit modus-themes-subtle-blue)))
+ `(caml-types-typed-face ((,c :inherit modus-themes-subtle-magenta)))
+ `(tuareg-font-double-semicolon-face ((,c :inherit font-lock-preprocessor-face)))
+ `(tuareg-font-lock-attribute-face ((,c :inherit font-lock-function-name-face)))
+ `(tuareg-font-lock-constructor-face ((,c :foreground ,fg-main)))
+ `(tuareg-font-lock-error-face ((,c :inherit (modus-themes-intense-red bold))))
+ ;; `(tuareg-font-lock-extension-node-face ((,c :background ,bg-inactive :foreground ,magenta)))
+ `(tuareg-font-lock-governing-face ((,c :inherit bold :foreground ,fg-main)))
+ `(tuareg-font-lock-infix-extension-node-face ((,c :inherit font-lock-function-name-face)))
+ `(tuareg-font-lock-interactive-directive-face ((,c :inherit font-lock-preprocessor-face)))
+ `(tuareg-font-lock-interactive-error-face ((,c :inherit error)))
+ `(tuareg-font-lock-interactive-output-face ((,c :inherit font-lock-constant-face)))
+ `(tuareg-font-lock-label-face ((,c :inherit font-lock-type-face)))
+ `(tuareg-font-lock-line-number-face ((,c :inherit shadow)))
+ `(tuareg-font-lock-module-face ((,c :inherit font-lock-builtin-face)))
+ ;; `(tuareg-font-lock-multistage-face ((,c :inherit bold :background ,bg-inactive :foreground ,blue)))
+ `(tuareg-font-lock-operator-face ((,c :inherit font-lock-preprocessor-face)))
+ `(tuareg-opam-error-face ((,c :inherit error)))
+ `(tuareg-opam-pkg-variable-name-face ((,c :inherit font-lock-variable-name-face)))
+;;;;; typescript
+ `(typescript-jsdoc-tag ((,c :inherit (font-lock-builtin-face font-lock-comment-face) :weight normal)))
+ `(typescript-jsdoc-type ((,c :inherit (font-lock-type-face font-lock-comment-face) :weight normal)))
+ `(typescript-jsdoc-value ((,c :inherit (font-lock-constant-face font-lock-comment-face) :weight normal)))
+;;;;; undo-tree
+ `(undo-tree-visualizer-active-branch-face ((,c :inherit bold :foreground ,fg-main)))
+ `(undo-tree-visualizer-current-face ((,c :foreground ,blue-intense)))
+ `(undo-tree-visualizer-default-face ((,c :inherit shadow)))
+ `(undo-tree-visualizer-register-face ((,c :foreground ,magenta-intense)))
+ `(undo-tree-visualizer-unmodified-face ((,c :foreground ,green-intense)))
+;;;;; vc (vc-dir.el, vc-hooks.el)
+ `(vc-dir-directory (( )))
+ `(vc-dir-file ((,c :foreground ,name)))
+ `(vc-dir-header ((,c :inherit bold)))
+ `(vc-dir-header-value ((,c :foreground ,string)))
+ `(vc-dir-mark-indicator (( )))
+ `(vc-dir-status-edited ((,c :inherit italic)))
+ `(vc-dir-status-ignored ((,c :inherit shadow)))
+ `(vc-dir-status-up-to-date ((,c :foreground ,info)))
+ `(vc-dir-status-warning ((,c :inherit error)))
+ `(vc-conflict-state ((,c :inherit error)))
+ `(vc-edited-state ((,c :inherit italic)))
+ `(vc-git-log-edit-summary-max-warning ((,c :inherit error)))
+ `(vc-git-log-edit-summary-target-warning ((,c :inherit warning)))
+ `(vc-locally-added-state ((,c :inherit italic)))
+ `(vc-locked-state ((,c :inherit success)))
+ `(vc-missing-state ((,c :inherit error)))
+ `(vc-needs-update-state ((,c :inherit error)))
+ `(vc-removed-state ((,c :inherit error)))
+ `(vc-state-base (( )))
+ `(vc-up-to-date-state (( )))
+;;;;; vertico
+ `(vertico-current ((,c :inherit modus-themes-completion-selected)))
+;;;;; vertico-quick
+ `(vertico-quick1 ((,c :inherit bold :background ,bg-char-0)))
+ `(vertico-quick2 ((,c :inherit bold :background ,bg-char-1)))
+;;;;; vimish-fold
+ `(vimish-fold-fringe ((,c :foreground ,cyan)))
+ `(vimish-fold-mouse-face ((,c :inherit modus-themes-intense-blue)))
+ `(vimish-fold-overlay ((,c :background ,bg-inactive)))
+;;;;; visible-mark
+ `(visible-mark-active ((,c :background ,bg-blue-intense)))
+ `(visible-mark-face1 ((,c :background ,bg-cyan-intense)))
+ `(visible-mark-face2 ((,c :background ,bg-yellow-intense)))
+ `(visible-mark-forward-face1 ((,c :background ,bg-magenta-intense)))
+ `(visible-mark-forward-face2 ((,c :background ,bg-green-intense)))
+;;;;; visual-regexp
+ `(vr/group-0 ((,c :inherit modus-themes-intense-blue)))
+ `(vr/group-1 ((,c :inherit modus-themes-intense-magenta)))
+ `(vr/group-2 ((,c :inherit modus-themes-intense-green)))
+ `(vr/match-0 ((,c :inherit modus-themes-intense-yellow)))
+ `(vr/match-1 ((,c :inherit modus-themes-intense-yellow)))
+ `(vr/match-separator-face ((,c :inherit bold :background ,bg-active)))
+;;;;; vterm
+ ;; NOTE 2023-08-10: `vterm-color-black' and `vterm-color-white'
+ ;; use the "bright" semantic color mappings to make sure they are
+ ;; distinct from `vterm-color-default'.
+ `(vterm-color-black ((,c :background ,bg-term-black :foreground ,fg-term-black)))
+ `(vterm-color-blue ((,c :background ,bg-term-blue :foreground ,fg-term-blue)))
+ `(vterm-color-cyan ((,c :background ,bg-term-cyan :foreground ,fg-term-cyan)))
+ `(vterm-color-default ((,c :background ,bg-main :foreground ,fg-main)))
+ `(vterm-color-green ((,c :background ,bg-term-green :foreground ,fg-term-green)))
+ `(vterm-color-inverse-video ((,c :background ,bg-main :inverse-video t)))
+ `(vterm-color-magenta ((,c :background ,bg-term-magenta :foreground ,fg-term-magenta)))
+ `(vterm-color-red ((,c :background ,bg-term-red :foreground ,fg-term-red)))
+ `(vterm-color-underline ((,c :underline t)))
+ `(vterm-color-white ((,c :background ,bg-term-white :foreground ,fg-term-white)))
+ `(vterm-color-yellow ((,c :background ,bg-term-yellow :foreground ,fg-term-yellow)))
+;;;;; vundo
+ `(vundo-default ((,c :inherit shadow)))
+ `(vundo-highlight ((,c :inherit (bold vundo-node) :foreground ,red)))
+ `(vundo-last-saved ((,c :inherit (bold vundo-node) :foreground ,blue)))
+ `(vundo-saved ((,c :inherit vundo-node :foreground ,blue-intense)))
+;;;;; wcheck-mode
+ `(wcheck-default-face ((,c :foreground ,red :underline t)))
+;;;;; web-mode
+ `(web-mode-annotation-face ((,c :inherit web-mode-comment-face)))
+ `(web-mode-annotation-html-face ((,c :inherit web-mode-comment-face)))
+ `(web-mode-annotation-tag-face ((,c :inherit web-mode-comment-face :underline t)))
+ `(web-mode-block-attr-name-face ((,c :inherit font-lock-constant-face)))
+ `(web-mode-block-attr-value-face ((,c :inherit font-lock-type-face)))
+ `(web-mode-block-comment-face ((,c :inherit web-mode-comment-face)))
+ `(web-mode-block-control-face ((,c :inherit font-lock-builtin-face)))
+ `(web-mode-block-delimiter-face ((,c :foreground ,fg-main)))
+ `(web-mode-block-face ((,c :background ,bg-dim)))
+ `(web-mode-block-string-face ((,c :inherit web-mode-string-face)))
+ `(web-mode-bold-face ((,c :inherit bold)))
+ `(web-mode-builtin-face ((,c :inherit font-lock-builtin-face)))
+ `(web-mode-comment-face ((,c :inherit font-lock-comment-face)))
+ `(web-mode-comment-keyword-face ((,c :inherit font-lock-warning-face)))
+ `(web-mode-constant-face ((,c :inherit font-lock-constant-face)))
+ `(web-mode-css-at-rule-face ((,c :inherit font-lock-constant-face)))
+ `(web-mode-css-color-face ((,c :inherit font-lock-builtin-face)))
+ `(web-mode-css-comment-face ((,c :inherit web-mode-comment-face)))
+ `(web-mode-css-function-face ((,c :inherit font-lock-builtin-face)))
+ `(web-mode-css-priority-face ((,c :inherit font-lock-warning-face)))
+ `(web-mode-css-property-name-face ((,c :inherit font-lock-keyword-face)))
+ `(web-mode-css-pseudo-class-face ((,c :inherit font-lock-doc-face)))
+ `(web-mode-css-selector-face ((,c :inherit font-lock-keyword-face)))
+ `(web-mode-css-string-face ((,c :inherit web-mode-string-face)))
+ `(web-mode-css-variable-face ((,c :inherit font-lock-variable-name-face)))
+ `(web-mode-current-column-highlight-face ((,c :background ,bg-inactive)))
+ `(web-mode-current-element-highlight-face ((,c :inherit modus-themes-cyan-subtle)))
+ `(web-mode-doctype-face ((,c :inherit font-lock-doc-face)))
+ `(web-mode-error-face ((,c :inherit error)))
+ `(web-mode-filter-face ((,c :inherit font-lock-function-name-face)))
+ `(web-mode-folded-face ((,c :underline t)))
+ `(web-mode-function-call-face ((,c :inherit font-lock-function-name-face)))
+ `(web-mode-function-name-face ((,c :inherit font-lock-function-name-face)))
+ `(web-mode-html-attr-custom-face ((,c :inherit font-lock-variable-name-face)))
+ `(web-mode-html-attr-engine-face ((,c :foreground ,fg-main)))
+ `(web-mode-html-attr-equal-face ((,c :foreground ,fg-main)))
+ `(web-mode-html-attr-name-face ((,c :inherit font-lock-variable-name-face)))
+ `(web-mode-html-attr-value-face ((,c :inherit font-lock-constant-face)))
+ `(web-mode-html-entity-face ((,c :inherit font-lock-negation-char-face)))
+ `(web-mode-html-tag-bracket-face ((,c :foreground ,fg-dim)))
+ `(web-mode-html-tag-custom-face ((,c :inherit font-lock-function-name-face)))
+ `(web-mode-html-tag-face ((,c :inherit font-lock-function-name-face)))
+ `(web-mode-html-tag-namespaced-face ((,c :inherit font-lock-builtin-face)))
+ `(web-mode-html-tag-unclosed-face ((,c :inherit error :underline t)))
+ `(web-mode-inlay-face ((,c :background ,bg-inactive)))
+ `(web-mode-italic-face ((,c :inherit italic)))
+ `(web-mode-javascript-comment-face ((,c :inherit web-mode-comment-face)))
+ `(web-mode-javascript-string-face ((,c :inherit web-mode-string-face)))
+ `(web-mode-json-comment-face ((,c :inherit web-mode-comment-face)))
+ `(web-mode-json-context-face ((,c :inherit font-lock-builtin-face)))
+ `(web-mode-json-key-face ((,c :foreground ,blue-faint)))
+ `(web-mode-json-string-face ((,c :inherit web-mode-string-face)))
+ `(web-mode-keyword-face ((,c :inherit font-lock-keyword-face)))
+ `(web-mode-param-name-face ((,c :inherit font-lock-function-name-face)))
+ `(web-mode-part-comment-face ((,c :inherit web-mode-comment-face)))
+ `(web-mode-part-face ((,c :inherit web-mode-block-face)))
+ `(web-mode-part-string-face ((,c :inherit web-mode-string-face)))
+ `(web-mode-preprocessor-face ((,c :inherit font-lock-preprocessor-face)))
+ `(web-mode-script-face ((,c :inherit web-mode-part-face)))
+ `(web-mode-sql-keyword-face ((,c :inherit font-lock-negation-char-face)))
+ `(web-mode-string-face ((,c :inherit font-lock-string-face)))
+ `(web-mode-style-face ((,c :inherit web-mode-part-face)))
+ `(web-mode-symbol-face ((,c :inherit font-lock-constant-face)))
+ `(web-mode-type-face ((,c :inherit font-lock-builtin-face)))
+ `(web-mode-underline-face ((,c :underline t)))
+ `(web-mode-variable-name-face ((,c :inherit font-lock-variable-name-face)))
+ `(web-mode-warning-face ((,c :inherit warning)))
+ `(web-mode-whitespace-face ((,c :background ,bg-inactive)))
+;;;;; wgrep
+ `(wgrep-delete-face ((,c :inherit warning)))
+ `(wgrep-done-face ((,c :inherit success)))
+ `(wgrep-face ((,c :inherit bold)))
+ `(wgrep-file-face ((,c :foreground ,fg-alt)))
+ `(wgrep-reject-face ((,c :inherit error)))
+;;;;; which-function-mode
+ `(which-func ((,c :inherit bold :foreground ,modeline-info))) ; same as `breadcrumb-imenu-leaf-face'
+;;;;; which-key
+ `(which-key-command-description-face ((,c :foreground ,fg-main)))
+ `(which-key-group-description-face ((,c :foreground ,keyword)))
+ `(which-key-highlighted-command-face ((,c :foreground ,warning :underline t)))
+ `(which-key-key-face ((,c :inherit modus-themes-key-binding)))
+ `(which-key-local-map-description-face ((,c :foreground ,fg-main)))
+ `(which-key-note-face ((,c :inherit shadow)))
+ `(which-key-separator-face ((,c :inherit shadow)))
+ `(which-key-special-key-face ((,c :inherit error)))
+;;;;; whitespace-mode
+ `(whitespace-big-indent ((,c :background ,bg-space-err)))
+ `(whitespace-empty ((,c :inherit modus-themes-intense-magenta)))
+ `(whitespace-hspace ((,c :background ,bg-space :foreground ,fg-space)))
+ `(whitespace-indentation ((,c :background ,bg-space :foreground ,fg-space)))
+ `(whitespace-line ((,c :background ,bg-space :foreground ,warning)))
+ `(whitespace-newline ((,c :background ,bg-space :foreground ,fg-space)))
+ `(whitespace-space ((,c :background ,bg-space :foreground ,fg-space)))
+ `(whitespace-space-after-tab ((,c :inherit modus-themes-subtle-magenta)))
+ `(whitespace-space-before-tab ((,c :inherit modus-themes-subtle-cyan)))
+ `(whitespace-tab ((,c :background ,bg-space :foreground ,fg-space)))
+ `(whitespace-trailing ((,c :background ,bg-space-err)))
+;;;;; window-divider-mode
+ `(window-divider ((,c :foreground ,border)))
+ `(window-divider-first-pixel ((,c :foreground ,bg-inactive)))
+ `(window-divider-last-pixel ((,c :foreground ,bg-inactive)))
+;;;;; widget
+ `(widget-button ((,c :inherit bold :foreground ,fg-link)))
+ `(widget-button-pressed ((,c :inherit widget-button :foreground ,fg-link-visited)))
+ `(widget-documentation ((,c :inherit font-lock-doc-face)))
+ `(widget-field ((,c :background ,bg-inactive :foreground ,fg-main :extend nil)))
+ `(widget-inactive ((,c :background ,bg-button-inactive :foreground ,fg-button-inactive)))
+ `(widget-single-line-field ((,c :inherit widget-field)))
+;;;;; writegood-mode
+ `(writegood-duplicates-face ((,c :inherit modus-themes-lang-error)))
+ `(writegood-passive-voice-face ((,c :inherit modus-themes-lang-warning)))
+ `(writegood-weasels-face ((,c :inherit modus-themes-lang-warning)))
+;;;;; woman
+ `(woman-addition ((,c :foreground ,accent-2)))
+ `(woman-bold ((,c :inherit bold :foreground ,accent-0)))
+ `(woman-italic ((,c :inherit italic :foreground ,accent-1)))
+ `(woman-unknown ((,c :foreground ,accent-3)))
+;;;;; xah-elisp-mode
+ `(xah-elisp-at-symbol ((,c :inherit font-lock-warning-face)))
+ `(xah-elisp-cap-variable ((,c :inherit font-lock-preprocessor-face)))
+ `(xah-elisp-command-face ((,c :inherit font-lock-type-face)))
+ `(xah-elisp-dollar-symbol ((,c :inherit font-lock-variable-name-face)))
+;;;;; yaml-mode
+ `(yaml-tab-face ((,c :background ,bg-space-err)))
+;;;;; yasnippet
+ `(yas-field-highlight-face ((,c :inherit highlight))))
+ "Face specs for use with `modus-themes-theme'.")
+
+(defconst modus-themes-custom-variables
+ '(
+;;;; ansi-colors
+ `(ansi-color-faces-vector [default bold shadow italic underline success warning error])
+ `(ansi-color-names-vector ["gray35" ,red ,green ,yellow ,blue ,magenta ,cyan "gray65"])
+;;;; chart
+ `(chart-face-color-list
+ '( ,bg-graph-red-0 ,bg-graph-green-0 ,bg-graph-yellow-0 ,bg-graph-blue-0 ,bg-graph-magenta-0 ,bg-graph-cyan-0
+ ,bg-graph-red-1 ,bg-graph-green-1 ,bg-graph-yellow-1 ,bg-graph-blue-1 ,bg-graph-magenta-1 ,bg-graph-cyan-1))
+;;;; exwm
+ `(exwm-floating-border-color ,border)
+;;;; flymake fringe indicators
+ `(flymake-error-bitmap '(flymake-double-exclamation-mark modus-themes-prominent-error))
+ `(flymake-warning-bitmap '(exclamation-mark modus-themes-prominent-warning))
+ `(flymake-note-bitmap '(exclamation-mark modus-themes-prominent-note))
+;;;; highlight-changes
+ `(highlight-changes-colors nil)
+ `(highlight-changes-face-list '(success warning error bold bold-italic))
+;;;; ibuffer
+ `(ibuffer-deletion-face 'modus-themes-mark-del)
+ `(ibuffer-filter-group-name-face 'bold)
+ `(ibuffer-marked-face 'modus-themes-mark-sel)
+ `(ibuffer-title-face 'default)
+;;;; hl-todo
+ `(hl-todo-keyword-faces
+ '(("HOLD" . ,warning)
+ ("TODO" . ,err)
+ ("NEXT" . ,fg-alt)
+ ("THEM" . ,fg-alt)
+ ("PROG" . ,info)
+ ("OKAY" . ,info)
+ ("DONT" . ,warning)
+ ("FAIL" . ,err)
+ ("BUG" . ,err)
+ ("DONE" . ,info)
+ ("NOTE" . ,warning)
+ ("KLUDGE" . ,warning)
+ ("HACK" . ,warning)
+ ("TEMP" . ,warning)
+ ("FIXME" . ,err)
+ ("XXX+" . ,err)
+ ("REVIEW" . ,info)
+ ("DEPRECATED" . ,info)))
+;;;; pdf-tools
+ `(pdf-view-midnight-colors '(,fg-main . ,bg-dim))
+;;;; rcirc-color
+ `(rcirc-colors
+ '(modus-themes-fg-red
+ modus-themes-fg-green
+ modus-themes-fg-blue
+ modus-themes-fg-yellow
+ modus-themes-fg-magenta
+ modus-themes-fg-cyan
+ modus-themes-fg-red-warmer
+ modus-themes-fg-green-warmer
+ modus-themes-fg-blue-warmer
+ modus-themes-fg-yellow-warmer
+ modus-themes-fg-magenta-warmer
+ modus-themes-fg-cyan-warmer
+ modus-themes-fg-red-cooler
+ modus-themes-fg-green-cooler
+ modus-themes-fg-blue-cooler
+ modus-themes-fg-yellow-cooler
+ modus-themes-fg-magenta-cooler
+ modus-themes-fg-cyan-cooler
+ modus-themes-fg-red-faint
+ modus-themes-fg-green-faint
+ modus-themes-fg-blue-faint
+ modus-themes-fg-yellow-faint
+ modus-themes-fg-magenta-faint
+ modus-themes-fg-cyan-faint
+ modus-themes-fg-red-intense
+ modus-themes-fg-green-intense
+ modus-themes-fg-blue-intense
+ modus-themes-fg-yellow-intense
+ modus-themes-fg-magenta-intense
+ modus-themes-fg-cyan-intense))
+;;;; org-src-block-faces
+ (if (or (eq modus-themes-org-blocks 'tinted-background)
+ (eq modus-themes-org-blocks 'rainbow))
+ `(org-src-block-faces
+ `(("emacs-lisp" modus-themes-nuanced-magenta)
+ ("elisp" modus-themes-nuanced-magenta)
+ ("clojure" modus-themes-nuanced-magenta)
+ ("clojurescript" modus-themes-nuanced-magenta)
+ ("c" modus-themes-nuanced-blue)
+ ("c++" modus-themes-nuanced-blue)
+ ("sh" modus-themes-nuanced-green)
+ ("shell" modus-themes-nuanced-green)
+ ("html" modus-themes-nuanced-yellow)
+ ("xml" modus-themes-nuanced-yellow)
+ ("css" modus-themes-nuanced-red)
+ ("scss" modus-themes-nuanced-red)
+ ("python" modus-themes-nuanced-green)
+ ("ipython" modus-themes-nuanced-magenta)
+ ("r" modus-themes-nuanced-cyan)
+ ("yaml" modus-themes-nuanced-cyan)
+ ("conf" modus-themes-nuanced-cyan)
+ ("docker" modus-themes-nuanced-cyan)))
+ `(org-src-block-faces '())))
+ "Custom variables for `modus-themes-theme'.")
+
+;;; Theme macros
+
+;;;; Instantiate a Modus theme
+
+;;;###autoload
+(defmacro modus-themes-theme (name palette &optional overrides)
+ "Bind NAME's color PALETTE around face specs and variables.
+Face specifications are passed to `custom-theme-set-faces'.
+While variables are handled by `custom-theme-set-variables'.
+Those are stored in `modus-themes-faces' and
+`modus-themes-custom-variables' respectively.
+
+Optional OVERRIDES are appended to PALETTE, overriding
+corresponding entries."
+ (declare (indent 0))
+ (let ((sym (gensym))
+ (colors (mapcar #'car (symbol-value palette))))
+ `(let* ((c '((class color) (min-colors 256)))
+ (,sym (modus-themes--palette-value ',name ',overrides))
+ ,@(mapcar (lambda (color)
+ (list color
+ `(modus-themes--retrieve-palette-value ',color ,sym)))
+ colors))
+ (ignore c ,@colors) ; Silence unused variable warnings
+ (custom-theme-set-faces ',name ,@modus-themes-faces)
+ (custom-theme-set-variables ',name ,@modus-themes-custom-variables))))
+
+;;;; Use theme colors
+
+(defmacro modus-themes-with-colors (&rest body)
+ "Evaluate BODY with colors from current palette bound."
+ (declare (indent 0))
+ (let* ((sym (gensym))
+ ;; NOTE 2022-08-23: We just give it a sample palette at this
+ ;; stage. It only needs to collect each car. Then we
+ ;; instantiate the actual theme's palette. We have to do this
+ ;; otherwise the macro does not work properly when called from
+ ;; inside a function.
+ (colors (mapcar #'car (modus-themes--current-theme-palette))))
+ `(let* ((c '((class color) (min-colors 256)))
+ (,sym (modus-themes--current-theme-palette :overrides))
+ ,@(mapcar (lambda (color)
+ (list color
+ `(modus-themes--retrieve-palette-value ',color ,sym)))
+ colors))
+ (ignore c ,@colors) ; Silence unused variable warnings
+ ,@body)))
+
+;;;; Add themes from package to path
+
+;;;###autoload
+(when load-file-name
+ (let ((dir (file-name-directory load-file-name)))
+ (unless (equal dir (expand-file-name "themes/" data-directory))
+ (add-to-list 'custom-theme-load-path dir))))
+
+(provide 'modus-themes)
+;;; modus-themes.el ends here
diff --git a/elpa/modus-themes-4.3.0/modus-themes.info b/elpa/modus-themes-4.3.0/modus-themes.info
@@ -0,0 +1,6278 @@
+This is docGYh7V6.info, produced by makeinfo version 6.8 from
+modus-themes.texi.
+
+Copyright (C) 2020-2023 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover Texts
+ being “A GNU Manual,” and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ “GNU Free Documentation License.”
+
+ (a) The FSF’s Back-Cover Text is: “You have the freedom to copy and
+ modify this GNU manual.”
+
+INFO-DIR-SECTION Emacs misc features
+START-INFO-DIR-ENTRY
+* Modus Themes: (modus-themes). Elegant, highly legible and customizable themes.
+END-INFO-DIR-ENTRY
+
+
+File: docGYh7V6.info, Node: Top, Next: Overview, Up: (dir)
+
+Modus themes for GNU Emacs
+**************************
+
+Copyright (C) 2020-2023 Free Software Foundation, Inc.
+
+ Permission is granted to copy, distribute and/or modify this
+ document under the terms of the GNU Free Documentation License,
+ Version 1.3 or any later version published by the Free Software
+ Foundation; with no Invariant Sections, with the Front-Cover Texts
+ being “A GNU Manual,” and with the Back-Cover Texts as in (a)
+ below. A copy of the license is included in the section entitled
+ “GNU Free Documentation License.”
+
+ (a) The FSF’s Back-Cover Text is: “You have the freedom to copy and
+ modify this GNU manual.”
+
+ This manual, written by Protesilaos Stavrou, describes the
+customization options for the Modus themes, and provides every other
+piece of information pertinent to them.
+
+ The documentation furnished herein corresponds to stable version
+4.3.0, released on 2023-09-19. 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 4.4.0-dev.
+
+ • Package name (GNU ELPA): ‘modus-themes’
+ • Official manual: <https://protesilaos.com/emacs/modus-themes>
+ • Change log: <https://protesilaos.com/emacs/modus-themes-changelog>
+ • Color palette: <https://protesilaos.com/emacs/modus-themes-colors>
+ • Sample pictures:
+ <https://protesilaos.com/emacs/modus-themes-pictures>
+ • 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>
+ • Backronym: My Old Display Unexpectedly Sharpened ... themes
+
+* Menu:
+
+* Overview::
+* Installation::
+* Enable and load::
+* Customization options::
+* Advanced customization::
+* Face coverage::
+* Notes on individual packages::
+* Frequently Asked Questions::
+* Contributing::
+* Acknowledgements::
+* GNU Free Documentation License::
+* Indices::
+
+— The Detailed Node Listing —
+
+Overview
+
+* How do the themes look like::
+* Learn about the latest changes::
+
+Installation
+
+* Install manually from source::
+* Install from the archives::
+* Install on GNU/Linux::
+* Dealing with byte compilation errors::
+
+Install on GNU/Linux
+
+* Debian 11 Bullseye::
+* GNU Guix::
+
+Enable and load
+
+* The require-theme for built-in Emacs themes::
+* Sample configuration with and without use-package::
+* Differences between loading and enabling::
+
+Customization options
+
+* Custom reload theme:: Toggle auto-reload of the theme when setting custom variables
+* Disable other themes:: Determine whether loading a Modus themes disables all others
+* Bold constructs:: Toggle bold constructs in code
+* Italic constructs:: Toggle italic font constructs in code
+* Mixed fonts:: Toggle mixing of font families
+* Command prompts:: Control the style of command prompts
+* Completion UIs:: Choose among several styles for completion UIs
+* Org mode blocks:: Choose among plain, gray, or tinted backgrounds
+* Heading styles:: Choose among several styles, also per heading level
+* UI typeface:: Toggle the use of variable-pitch across the User Interface
+* Palette overrides:: Refashion color values and/or semantic color mappings
+
+Advanced customization
+
+* Palette override presets::
+* Stylistic variants using palette overrides::
+* More accurate colors in terminal emulators::
+* Range of color with terminal emulators::
+* Preview theme colors::
+* Per-theme customization settings::
+* Get a single color from the palette::
+* Use theme colors in code with modus-themes-with-colors::
+* Do not extend the region background::
+* Add padding to mode line::
+* Remap face with local value::
+* Font configurations for Org and others::
+* Configure bold and italic faces::
+* Custom Org todo keyword and priority faces::
+* Custom Org emphasis faces::
+* Update Org block delimiter fontification::
+* Measure color contrast::
+* Load theme depending on time of day::
+* Backdrop for pdf-tools::
+* Toggle themes without reloading them::
+* A theme-agnostic hook for theme loading::
+* Use more spacious margins or padding in Emacs frames::
+* Custom hl-todo colors::
+* Add support for solaire-mode::
+
+Stylistic variants using palette overrides
+
+* Make the mode line borderless::
+* Make the active mode line colorful::
+* Make the tab bar more or less colorful::
+* Make the fringe invisible or another color::
+* Make links use subtle or no underlines::
+* Make prompts more or less colorful::
+* Make completion matches more or less colorful::
+* Make comments yellow and strings green::
+* Make code syntax use the old alt-syntax style::
+* Make use of alternative styles for code syntax::
+* Make matching parenthesis more or less intense::
+* Make box buttons more or less gray::
+* Make TODO and DONE more or less intense::
+* Make headings more or less colorful::
+* Make Org agenda more or less colorful::
+* Make inline code in prose use alternative styles::
+* Make mail citations and headers more or less colorful::
+* Make the region preserve text colors, plus other styles: Make the region preserve text colors plus other styles.
+* Make mouse highlights more or less colorful::
+* Make language underlines less colorful::
+* Make line numbers use alternative styles::
+* Make diffs use only a foreground::
+* Make deuteranopia diffs red and blue instead of yellow and blue::
+* Make the themes look like what the maintainer uses::
+
+Face coverage
+
+* Supported packages:: Full list of covered face groups
+* Indirectly covered packages::
+
+Notes on individual packages
+
+* Note on calendar.el weekday and weekend colors: Note on calendarel weekday and weekend colors.
+* Note on git-gutter in Doom Emacs::
+* Note on php-mode multiline comments::
+* Note on underlines in compilation buffers::
+* Note on inline Latex in Org buffers::
+* Note on dimmer.el: Note on dimmerel.
+* Note on display-fill-column-indicator-mode::
+* Note on highlight-parentheses.el: Note on highlight-parenthesesel.
+* Note on mmm-mode.el background colors: Note on mmm-modeel background colors.
+* Note for prism::
+* Note on company-mode overlay pop-up::
+* Note on ERC escaped color sequences::
+* Note on powerline or spaceline::
+* Note on SHR colors::
+* Note on SHR fonts::
+* Note on Ement colors and fonts::
+* Note on pdf-tools link hints::
+* Note on the Notmuch logo::
+* Note on goto-address-mode faces::
+
+Frequently Asked Questions
+
+* Is the contrast ratio about adjacent colors?::
+* What does it mean to avoid exaggerations?::
+* Why are colors mostly variants of blue, magenta, cyan?: Why are colors mostly variants of blue magenta cyan?.
+* What is the best setup for legibility?::
+* Are these color schemes?::
+* Port the Modus themes to other platforms?::
+
+Contributing
+
+* Sources of the themes::
+* Issues you can help with::
+* Patches require copyright assignment to the FSF::
+
+Indices
+
+* Function index::
+* Variable index::
+* Concept index::
+
+
+
+File: docGYh7V6.info, Node: Overview, Next: Installation, Prev: Top, Up: Top
+
+1 Overview
+**********
+
+The Modus themes are designed for accessible readability. They conform
+with the highest standard for color contrast between combinations of
+background and foreground values. For small sized text, this
+corresponds to the WCAG AAA standard, which specifies a minimum rate of
+distance in relative luminance of 7:1.
+
+ The Modus themes consist of eight themes, divided into four
+subgroups.
+
+Main themes
+ ‘modus-operandi’ is the project’s main light theme, while
+ ‘modus-vivendi’ is its dark counterpart. These two themes are part
+ of the project since its inception. They are designed to cover a
+ broad range of needs and are, in the opinion of the author, the
+ reference for what a highly legible “default” theme should look
+ like.
+
+Tinted themes
+ ‘modus-operandi-tinted’ and ‘modus-vivendi-tinted’ are variants of
+ the two main themes. They slightly tone down the intensity of the
+ background and provide a bit more color variety.
+ ‘modus-operandi-tinted’ has a set of base tones that are shades of
+ light ochre (earthly colors), while ‘modus-vivendi-tinted’ gives a
+ night sky impression.
+
+Deuteranopia themes
+ ‘modus-operandi-deuteranopia’ and its companion
+ ‘modus-vivendi-deuteranopia’ are optimized for users with red-green
+ color deficiency. This means that they do not use red and green
+ hues for color-coding purposes, such as for diff removed and added
+ lines. Instead, they implement colors that are discernible by
+ users with deueteranopia or deuteranomaly (mostly yellow and blue
+ hues).
+
+Tritanopia themes
+ ‘modus-operandi-tritanopia’ and its counterpart
+ ‘modus-vivendi-tritanopia’ are optimized for users with blue-yellow
+ color deficiency. The idea is the same as with the deuteranopia
+ variants: color coding relies only on hues that are accessible to
+ people with tritanopia or tritanomaly, namely, shades of red and
+ cyan.
+
+ To ensure that users have a consistently accessible experience, the
+themes strive to achieve as close to full face coverage as possible,
+while still targeting a curated list of well-maintained packages (*note
+Face coverage::).
+
+ The overarching objective of this project is to always offer
+accessible color combinations. There shall never be a compromise on
+this principle. If there arises an inescapable trade-off between
+usability and stylistic considerations, we will always opt for the
+former.
+
+ Starting with version 0.12.0 and onwards, the themes are built into
+GNU Emacs.
+
+* Menu:
+
+* How do the themes look like::
+* Learn about the latest changes::
+
+
+File: docGYh7V6.info, Node: How do the themes look like, Next: Learn about the latest changes, Up: Overview
+
+1.1 How do the themes look like
+===============================
+
+Check the web page with the screen shots
+(https://protesilaos.com/emacs/modus-themes-pictures/). Note that the
+themes are highly customizable (*note Customization options::).
+
+
+File: docGYh7V6.info, Node: Learn about the latest changes, Prev: How do the themes look like, Up: Overview
+
+1.2 Learn about the latest changes
+==================================
+
+Please refer to the web page with the change log
+(https://protesilaos.com/emacs/modus-themes-changelog). It is
+comprehensive and covers everything that goes into every tagged release
+of the themes.
+
+
+File: docGYh7V6.info, Node: Installation, Next: Enable and load, Prev: Overview, Up: Top
+
+2 Installation
+**************
+
+The Modus themes are distributed with Emacs starting with version 28.1.
+On older versions of Emacs, they can be installed using Emacs’ package
+manager or manually from their code repository. There also exist
+packages for distributions of GNU/Linux.
+
+ Emacs 28 ships with ‘modus-themes’ version ‘1.6.0’. Emacs 29
+includes version ‘3.0.0’. Emacs 30 provides a newer, refactored version
+that thoroughly refashions how the themes are implemented and
+customized. Such major versions are not backward-compatible due to the
+limited resources at the maintainer’s disposal to support multiple
+versions of Emacs and of the themes across the years.
+
+* Menu:
+
+* Install manually from source::
+* Install from the archives::
+* Install on GNU/Linux::
+* Dealing with byte compilation errors::
+
+
+File: docGYh7V6.info, Node: Install manually from source, Next: Install from the archives, Up: Installation
+
+2.1 Install manually from source
+================================
+
+In the following example, we are assuming that your Emacs files are
+stored in ‘~/.emacs.d’ and that you want to place the Modus themes in
+‘~/.emacs.d/modus-themes’.
+
+ 1. Get the source and store it in the desired path by running the
+ following in the command line shell:
+
+ $ git clone https://gitlab.com/protesilaos/modus-themes.git ~/.emacs.d/modus-themes
+
+ 1. Add that path to your known Elisp libraries’ list, by placing this
+ snippet of Emacs Lisp in your init file (e.g. ‘init.el’):
+
+ (add-to-list 'load-path "~/.emacs.d/modus-themes")
+
+ The themes are now ready to be used: *note Enable and load::.
+
+
+File: docGYh7V6.info, Node: Install from the archives, Next: Install on GNU/Linux, Prev: Install manually from source, Up: Installation
+
+2.2 Install from the archives
+=============================
+
+The ‘modus-themes’ package is available from the GNU ELPA archive, which
+is configured by default.
+
+ Prior to querying any package archive, make sure to update the index,
+with ‘M-x package-refresh-contents’. Then all you need to do is type
+‘M-x package-install’ and specify the ‘modus-themes’.
+
+ Once installed, the themes are ready to be used: *note Enable and
+load::.
+
+
+File: docGYh7V6.info, Node: Install on GNU/Linux, Next: Dealing with byte compilation errors, Prev: Install from the archives, Up: Installation
+
+2.3 Install on GNU/Linux
+========================
+
+The themes are also available from the archives of some distributions of
+GNU/Linux. These should correspond to a tagged release rather than
+building directly from the latest Git commit. It all depends on the
+distro’s packaging policies.
+
+* Menu:
+
+* Debian 11 Bullseye::
+* GNU Guix::
+
+
+File: docGYh7V6.info, Node: Debian 11 Bullseye, Next: GNU Guix, Up: Install on GNU/Linux
+
+2.3.1 Debian 11 Bullseye
+------------------------
+
+The themes are part of Debian 11 Bullseye. Get them with:
+
+ sudo apt install elpa-modus-themes
+
+ They are now ready to be used: *note Enable and load::.
+
+ NOTE that Debian’s package is severely out-of-date as of this writing
+2022-07-24 09:57 +0300.
+
+
+File: docGYh7V6.info, Node: GNU Guix, Prev: Debian 11 Bullseye, Up: Install on GNU/Linux
+
+2.3.2 GNU Guix
+--------------
+
+Users of Guix can get the themes with this command:
+
+ guix package -i emacs-modus-themes
+
+ They are now ready to be used: *note Enable and load::.
+
+
+File: docGYh7V6.info, Node: Dealing with byte compilation errors, Prev: Install on GNU/Linux, Up: Installation
+
+2.4 Dealing with byte compilation errors
+========================================
+
+From time to time, we receive bug reports pertaining to errors with byte
+compilation. These seldom have to do with faulty code in the themes: it
+might be a shortcoming of ‘package.el’, some regression in the current
+development target of Emacs, a misconfiguration in an otherwise exotic
+setup, and the like.
+
+ The common solution with a stable version of Emacs is to:
+
+ 1. Delete the ‘modus-themes’ package.
+ 2. Close the current Emacs session.
+ 3. Install the ‘modus-themes’ again.
+
+ For those building Emacs directly from source, the solution may
+involve reverting to an earlier commit in emacs.git.
+
+ At any rate, if you encounter such an issue please report it: we will
+either fix the bug on our end if it is truly ours, or help forward it to
+the relevant upstream maintainer. Whatever you do, please understand
+that a build failure does not mean we are necessarily doing something
+wrong.
+
+ *note Issues you can help with::.
+
+
+File: docGYh7V6.info, Node: Enable and load, Next: Customization options, Prev: Installation, Up: Top
+
+3 Enable and load
+*****************
+
+NOTE that Emacs can load multiple themes, which typically produces
+undesirable results and undoes the work of the designer. Use the
+‘disable-theme’ command if you are trying other themes beside the Modus
+collection (*note Option for disabling other themes while loading Modus:
+Disable other themes.).
+
+ Users of the built-in themes cannot ‘require’ the package as usual
+because there is no package to speak of. Instead, things are simpler as
+built-in themes are considered safe. All one needs is to load the theme
+of their preference by adding either form to their init file:
+
+ (load-theme 'modus-operandi) ; Light theme
+ (load-theme 'modus-vivendi) ; Dark theme
+
+ Remember that the Modus themes are six themes (*note Overview::).
+Adapt the above snippet accordingly.
+
+ Users of packaged variants of the themes must add a few more lines to
+ensure that everything works as intended. First, one has to require the
+main library before loading one of the themes:
+
+ (require 'modus-themes)
+
+ One can activate a theme with something like the following
+expression, replacing ‘modus-operandi’ with their preferred Modus theme:
+
+ (load-theme 'modus-operandi :no-confirm)
+
+ Changes to the available customization options must always be
+evaluated before loading a theme (*note Customization Options:
+Customization options.). Reload a theme for new changes to take effect.
+
+ This is how a basic setup could look like (*note The require-theme
+for built-in Emacs themes: The require-theme for built-in Emacs
+themes.):
+
+ ;;; For the built-in themes which cannot use `require'.
+ (require-theme 'modus-themes)
+
+ ;; Add all your customizations prior to loading the themes.
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+ ;; Load the theme of your choice.
+ (load-theme 'modus-operandi)
+
+ ;; Optionally define a key to switch between Modus themes. Also check
+ ;; the user option `modus-themes-to-toggle'.
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle)
+
+
+
+ ;;; For packaged versions which must use `require'.
+
+ (require 'modus-themes)
+
+ ;; Add all your customizations prior to loading the themes
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+ ;; Load the theme of your choice.
+ (load-theme 'modus-operandi :no-confirm)
+
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle)
+
+ *note Sample configuration with and without use-package::.
+
+* Menu:
+
+* The require-theme for built-in Emacs themes::
+* Sample configuration with and without use-package::
+* Differences between loading and enabling::
+
+
+File: docGYh7V6.info, Node: The require-theme for built-in Emacs themes, Next: Sample configuration with and without use-package, Up: Enable and load
+
+3.1 The ‘require-theme’ for built-in Emacs themes
+=================================================
+
+The version of the Modus themes that is included in Emacs CANNOT use the
+standard ‘require’. This is because the built-in themes are not
+included in the ‘load-path’ (not my decision). The ‘require-theme’
+function must be used in this case as a replacement. For example:
+
+ (require-theme 'modus-themes)
+
+ ;; All customizations here
+ (setq modus-themes-bold-constructs t
+ modus-themes-italic-constructs t)
+
+ ;; Maybe define some palette overrides, such as by using our presets
+ (setq modus-themes-common-palette-overrides
+ modus-themes-preset-overrides-intense)
+
+ ;; Load the theme of choice (built-in themes are always "safe" so they
+ ;; do not need the `no-require' argument of `load-theme').
+ (load-theme 'modus-operandi)
+
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle)
+
+
+File: docGYh7V6.info, Node: Sample configuration with and without use-package, Next: Differences between loading and enabling, Prev: The require-theme for built-in Emacs themes, Up: Enable and load
+
+3.2 Sample configuration with and without use-package
+=====================================================
+
+What follows is a variant of what we demonstrate in the previous section
+(*note Enable and load::).
+
+ It is common for Emacs users to rely on ‘use-package’ for declaring
+package configurations in their setup. We use this as an example:
+
+ ;;; For the built-in themes which cannot use `require'.
+ (use-package emacs
+ :config
+ (require-theme 'modus-themes) ; `require-theme' is ONLY for the built-in Modus themes
+
+ ;; Add all your customizations prior to loading the themes
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+ ;; Maybe define some palette overrides, such as by using our presets
+ (setq modus-themes-common-palette-overrides
+ modus-themes-preset-overrides-intense)
+
+ ;; Load the theme of your choice.
+ (load-theme 'modus-operandi)
+
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle))
+
+
+
+ ;;; For packaged versions which must use `require'.
+ (use-package modus-themes
+ :ensure t
+ :config
+ ;; Add all your customizations prior to loading the themes
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+ ;; Maybe define some palette overrides, such as by using our presets
+ (setq modus-themes-common-palette-overrides
+ modus-themes-preset-overrides-intense)
+
+ ;; Load the theme of your choice.
+ (load-theme 'modus-operandi)
+
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle))
+
+ The same without ‘use-package’:
+
+ (require 'modus-themes) ; OR for the built-in themes: (require-theme 'modus-themes)
+
+ ;; Add all your customizations prior to loading the themes
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil)
+
+ ;; Maybe define some palette overrides, such as by using our presets
+ (setq modus-themes-common-palette-overrides
+ modus-themes-preset-overrides-intense)
+
+ ;; Load the theme of your choice:
+ (load-theme 'modus-operandi :no-confirm)
+
+ (define-key global-map (kbd "<f5>") #'modus-themes-toggle)
+
+ *note Differences between loading and enabling::.
+
+ Note: make sure not to customize the variable
+‘custom-theme-load-path’ or ‘custom-theme-directory’ after the themes’
+package declaration. That will lead to failures in loading the files.
+If either or both of those variables need to be changed, their values
+should be defined before the package declaration of the themes.
+
+ *note Make the themes look like what the maintainer uses::
+
+
+File: docGYh7V6.info, Node: Differences between loading and enabling, Prev: Sample configuration with and without use-package, Up: Enable and load
+
+3.3 Differences between loading and enabling
+============================================
+
+The reason we recommend ‘load-theme’ instead of the other option of
+‘enable-theme’ is that the former does a kind of “reset” on the face
+specs. It quite literally loads (or reloads) the theme. Whereas the
+‘enable-theme’ function simply puts an already loaded theme to the top
+of the list of enabled items, re-using whatever state was last loaded.
+
+ As such, ‘load-theme’ reads all customizations that may happen during
+any given Emacs session: even after the initial setup of a theme.
+Examples are calls to ‘custom-set-faces’, as well as new values assigned
+to the options the Modus themes provide (*note Customization Options:
+Customization options.).
+
+ Our tests show that ‘enable-theme’ does not read such variables anew,
+so it might appear to the unsuspecting user that the themes are somehow
+broken whenever they try to assign a new value to a customization option
+or some face.
+
+ This “reset” that ‘load-theme’ brings about does, however, come at
+the cost of being somewhat slower than ‘enable-theme’. Users who have a
+stable setup and who seldom update their variables during a given Emacs
+session, are better off using something like this:
+
+ (require 'modus-themes)
+
+ ;; Activate your desired themes here
+ (load-theme 'modus-operandi t t)
+ (load-theme 'modus-vivendi t t)
+
+ ;; Enable the preferred one
+ (enable-theme 'modus-operandi)
+
+ *note Toggle themes without reloading them::.
+
+ *note Sample configuration with and without use-package::.
+
+ With the above granted, other sections of the manual discuss how to
+configure custom faces, where ‘load-theme’ is expected, though
+‘enable-theme’ could still apply in stable setups:
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+
+File: docGYh7V6.info, Node: Customization options, Next: Advanced customization, Prev: Enable and load, Up: Top
+
+4 Customization options
+***********************
+
+The Modus themes are highly configurable, though they should work well
+without any further tweaks. We provide a variety of user options. The
+following code block provides an overview. In addition to those
+variables, the themes support a comprehensive system of overrides: it
+can be used to make thoroughgoing changes to the looks of the themes
+(*note Option for palette overrides: Palette overrides.). We document
+everything at length in the pages of this manual and also provide
+ready-to-use code samples.
+
+ Remember that all customization options must be evaluated before
+loading a theme (*note Enable and load::). If the theme is already
+active, it must be reloaded for changes to take effect.
+
+ ;; In all of the following, WEIGHT is a symbol such as `semibold',
+ ;; `light', `bold', or anything mentioned in `modus-themes-weights'.
+ (setq modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil
+ modus-themes-mixed-fonts t
+ modus-themes-variable-pitch-ui nil
+ modus-themes-custom-auto-reload t
+ modus-themes-disable-other-themes t
+
+ ;; Options for `modus-themes-prompts' are either nil (the
+ ;; default), or a list of properties that may include any of those
+ ;; symbols: `italic', `WEIGHT'
+ modus-themes-prompts '(italic bold)
+
+ ;; The `modus-themes-completions' is an alist that reads two
+ ;; keys: `matches', `selection'. Each accepts a nil value (or
+ ;; empty list) or a list of properties that can include any of
+ ;; the following (for WEIGHT read further below):
+ ;;
+ ;; `matches' :: `underline', `italic', `WEIGHT'
+ ;; `selection' :: `underline', `italic', `WEIGHT'
+ modus-themes-completions
+ '((matches . (extrabold))
+ (selection . (semibold italic text-also)))
+
+ modus-themes-org-blocks 'gray-background ; {nil,'gray-background,'tinted-background}
+
+ ;; The `modus-themes-headings' is an alist: read the manual's
+ ;; node about it or its doc string. Basically, it supports
+ ;; per-level configurations for the optional use of
+ ;; `variable-pitch' typography, a height value as a multiple of
+ ;; the base font size (e.g. 1.5), and a `WEIGHT'.
+ modus-themes-headings
+ '((1 . (variable-pitch 1.5))
+ (2 . (1.3))
+ (agenda-date . (1.3))
+ (agenda-structure . (variable-pitch light 1.8))
+ (t . (1.1))))
+
+ ;; Remember that more (MUCH MORE) can be done with overrides, which we
+ ;; document extensively in this manual.
+
+* Menu:
+
+* Custom reload theme:: Toggle auto-reload of the theme when setting custom variables
+* Disable other themes:: Determine whether loading a Modus themes disables all others
+* Bold constructs:: Toggle bold constructs in code
+* Italic constructs:: Toggle italic font constructs in code
+* Mixed fonts:: Toggle mixing of font families
+* Command prompts:: Control the style of command prompts
+* Completion UIs:: Choose among several styles for completion UIs
+* Org mode blocks:: Choose among plain, gray, or tinted backgrounds
+* Heading styles:: Choose among several styles, also per heading level
+* UI typeface:: Toggle the use of variable-pitch across the User Interface
+* Palette overrides:: Refashion color values and/or semantic color mappings
+
+
+File: docGYh7V6.info, Node: Custom reload theme, Next: Disable other themes, Up: Customization options
+
+4.1 Option for reloading the theme on custom change
+===================================================
+
+Brief: Toggle reloading of the active theme when an option is changed
+through the Custom UI.
+
+ Symbol: ‘modus-themes-custom-auto-reload’ (‘boolean’ type)
+
+ Possible values:
+
+ 1. ‘nil’
+ 2. ‘t’ (default)
+
+ All theme user options take effect when a theme is loaded. Any
+subsequent changes require the theme to be reloaded.
+
+ When this variable has a non-‘nil’ value, any change made via the
+Custom UI or related functions such as ‘customize-set-variable’ and
+‘setopt’ (Emacs 29), will trigger a reload automatically.
+
+ With a ‘nil’ value, changes to user options have no further
+consequences: the user must manually reload the theme (*note Enable and
+load::).
+
+
+File: docGYh7V6.info, Node: Disable other themes, Next: Bold constructs, Prev: Custom reload theme, Up: Customization options
+
+4.2 Option for disabling other themes while loading Modus
+=========================================================
+
+Brief: Disable all other themes when loading a Modus theme.
+
+ Symbol: ‘modus-themes-disable-other-themes’ (‘boolean’ type)
+
+ Possible values:
+
+ 1. ‘nil’
+ 2. ‘t’ (default)
+
+ When the value is non-‘nil’, the commands ‘modus-themes-toggle’ and
+‘modus-themes-select’, as well as the ‘modus-themes-load-theme’
+function, will disable all other themes while loading the specified
+Modus theme. This is done to ensure that Emacs does not blend two or
+more themes: such blends lead to awkward results that undermine the work
+of the designer.
+
+ When the value is ‘nil’, the aforementioned commands and function
+will only disable other themes within the Modus collection.
+
+ This option is provided because Emacs themes are not necessarily
+limited to colors/faces: they can consist of an arbitrary set of
+customizations. Users who use such customization bundles must set this
+variable to a ‘nil’ value.
+
+
+File: docGYh7V6.info, Node: Bold constructs, Next: Italic constructs, Prev: Disable other themes, Up: Customization options
+
+4.3 Option for more bold constructs
+===================================
+
+Brief: Use bold for code syntax highlighting and related.
+
+ Symbol: ‘modus-themes-bold-constructs’ (‘boolean’ type)
+
+ Possible values:
+
+ 1. ‘nil’ (default)
+ 2. ‘t’
+
+ The default is to use a bold typographic weight only when it is
+required.
+
+ With a non-‘nil’ value (‘t’) display several syntactic constructs in
+bold weight. This concerns keywords and other important aspects of code
+syntax. It also affects certain mode line indicators and command
+prompts.
+
+ Advanced users may also want to configure the exact attributes of the
+‘bold’ face.
+
+ *note Configure bold and italic faces::.
+
+
+File: docGYh7V6.info, Node: Italic constructs, Next: Mixed fonts, Prev: Bold constructs, Up: Customization options
+
+4.4 Option for more italic constructs
+=====================================
+
+Brief: Use italics for code syntax highlighting and related.
+
+ Symbol: ‘modus-themes-italic-constructs’ (‘boolean’ type)
+
+ Possible values:
+
+ 1. ‘nil’ (default)
+ 2. ‘t’
+
+ The default is to not use slanted text forms (italics) unless it is
+absolutely necessary.
+
+ With a non-‘nil’ value (‘t’) choose to render more faces in italics.
+This typically affects documentation strings and code comments.
+
+ Advanced users may also want to configure the exact attributes of the
+‘italic’ face.
+
+ *note Configure bold and italic faces::.
+
+
+File: docGYh7V6.info, Node: Mixed fonts, Next: Command prompts, Prev: Italic constructs, Up: Customization options
+
+4.5 Option for font mixing
+==========================
+
+Brief: Toggle the use of monospaced fonts for spacing-sensitive
+constructs (affects font families).
+
+ Symbol: ‘modus-themes-mixed-fonts’ (‘boolean’ type)
+
+ Possible values:
+
+ 1. ‘nil’ (default)
+ 2. ‘t’
+
+ When set to non-‘nil’ (‘t’), configure some spacing-sensitive faces
+like Org tables and code blocks to always inherit from the ‘fixed-pitch’
+face. This is to ensure that certain constructs like code blocks and
+tables remain monospaced even when users opt for a mode that remaps
+typeface families, such as the built-in ‘M-x variable-pitch-mode’.
+Otherwise the layout can appear broken, due to how spacing is done.
+
+ For a consistent experience, user may need to specify the font family
+of the ‘fixed-pitch’ face.
+
+ *note Font configurations for Org and others::.
+
+
+File: docGYh7V6.info, Node: Command prompts, Next: Completion UIs, Prev: Mixed fonts, Up: Customization options
+
+4.6 Option for command prompt styles
+====================================
+
+Brief: Control the style of command prompts (e.g. minibuffer, shell,
+IRC clients).
+
+ Symbol: ‘modus-themes-prompts’ (‘choice’ type, list of properties)
+
+ Possible values are expressed as a list of properties (default is
+‘nil’ or an empty list). The list can include any of the following
+symbols:
+
+ • ‘italic’
+ • ‘italic’
+ • A font weight, which must be supported by the underlying typeface:
+ • ‘thin’
+ • ‘ultralight’
+ • ‘extralight’
+ • ‘light’
+ • ‘semilight’
+ • ‘regular’
+ • ‘medium’
+ • ‘semibold’
+ • ‘bold’
+ • ‘heavy’
+ • ‘extrabold’
+ • ‘ultrabold’
+
+ The default (a ‘nil’ value or an empty list) means to only use a
+subtle colored foreground color.
+
+ The ‘italic’ property adds a slant to the font’s forms (italic or
+oblique forms, depending on the typeface).
+
+ The symbol of a font weight attribute such as ‘light’, ‘semibold’, et
+cetera, adds the given weight to links. Valid symbols are defined in
+the variable ‘modus-themes-weights’. The absence of a weight means that
+the one of the underlying text will be used.
+
+ Combinations of any of those properties are expressed as a list, like
+in these examples:
+
+ (bold italic)
+ (italic semibold)
+
+ The order in which the properties are set is not significant.
+
+ In user configuration files the form may look like this:
+
+ (setq modus-themes-prompts '(extrabold italic))
+
+ *note Make prompts more or less colorful::.
+
+
+File: docGYh7V6.info, Node: Completion UIs, Next: Org mode blocks, Prev: Command prompts, Up: Customization options
+
+4.7 Option for completion framework aesthetics
+==============================================
+
+Brief: Set the overall style of completion framework interfaces.
+
+ Symbol: ‘modus-themes-completions’ (‘alist’ type properties)
+
+ This affects Company, Corfu, Flx, Icomplete/Fido, Ido, Ivy,
+Orderless, Vertico, and the standard ‘*Completions*’ buffer. The value
+is an alist of expressions, each of which takes the form of ‘(KEY .
+LIST-OF-PROPERTIES)’. ‘KEY’ is a symbol, while ‘PROPERTIES’ is a list.
+Here is a sample, followed by a description of the particularities:
+
+ (setq modus-themes-completions
+ '((matches . (extrabold underline))
+ (selection . (semibold italic))))
+
+ The ‘matches’ key refers to the highlighted characters that
+correspond to the user’s input. When its properties are ‘nil’ or an
+empty list, matching characters in the user interface will have a bold
+weight and a colored foreground. The list of properties may include any
+of the following symbols regardless of the order they may appear in:
+
+ • ‘underline’ to draw a line below the characters;
+
+ • ‘italic’ to use a slanted font (italic or oblique forms);
+
+ • The symbol of a font weight attribute such as ‘light’, ‘semibold’,
+ et cetera. Valid symbols are defined in the variable
+ ‘modus-themes-weights’. The absence of a weight means that bold
+ will be used.
+
+ The ‘selection’ key applies to the current line or currently matched
+candidate, depending on the specifics of the user interface. When its
+properties are ‘nil’ or an empty list, it has a subtle gray background,
+a bold weight, and the base foreground value for the text. The list of
+properties it accepts is as follows (order is not significant):
+
+ • ‘underline’ to draw a line below the characters;
+
+ • ‘italic’ to use a slanted font (italic or oblique forms);
+
+ • The symbol of a font weight attribute such as ‘light’, ‘semibold’,
+ et cetera. Valid symbols are defined in the variable
+ ‘modus-themes-weights’. The absence of a weight means that bold
+ will be used.
+
+ Apart from specifying each key separately, a catch-all list is
+accepted. This is only useful when the desired aesthetic is the same
+across all keys that are not explicitly referenced. For example, this:
+
+ (setq modus-themes-completions
+ '((t . (extrabold underline))))
+
+ Is the same as:
+
+ (setq modus-themes-completions
+ '((matches . (extrabold underline))
+ (selection . (extrabold underline))))
+
+ *note Make completion matches more or less colorful::.
+
+
+File: docGYh7V6.info, Node: Org mode blocks, Next: Heading styles, Prev: Completion UIs, Up: Customization options
+
+4.8 Option for org-mode block styles
+====================================
+
+Brief: Set the overall style of Org code blocks, quotes, and the like.
+
+ Symbol: ‘modus-themes-org-blocks’ (‘choice’ type)
+
+ Possible values:
+
+ 1. ‘nil’ (default)
+ 2. ‘gray-background’
+ 3. ‘tinted-background’
+
+ Option ‘nil’ (the default) means that the block has no background of
+its own: it uses the one that applies to the rest of the buffer. In
+this case, the delimiter lines have a gray color for their text, making
+them look exactly like all other Org properties.
+
+ Option ‘gray-background’ applies a subtle gray background to the
+block’s contents. It also affects the begin and end lines of the block
+as they get another shade of gray as their background, which
+differentiates them from the contents of the block. All background
+colors extend to the edge of the window, giving the area a rectangular,
+“blocky” presentation. If the begin/end lines do not extend in this
+way, check the value of the Org user option
+‘org-fontify-whole-block-delimiter-line’.
+
+ Option ‘tinted-background’ uses a colored background for the contents
+of the block. The exact color value will depend on the programming
+language and is controlled by the variable ‘org-src-block-faces’ (refer
+to the theme’s source code for the current association list). For this
+to take effect, the Org buffer needs to be restarted with
+‘org-mode-restart’.
+
+ Code blocks use their major mode’s fontification (syntax
+highlighting) only when the variable ‘org-src-fontify-natively’ is
+non-‘nil’. While quote/verse blocks require setting
+‘org-fontify-quote-and-verse-blocks’ to a non-‘nil’ value.
+
+ *note Update Org block delimiter fontification::.
+
+
+File: docGYh7V6.info, Node: Heading styles, Next: UI typeface, Prev: Org mode blocks, Up: Customization options
+
+4.9 Option for the headings’ overall style
+==========================================
+
+Brief: Heading styles with optional list of values per heading level.
+
+ Symbol: ‘modus-themes-headings’ (‘alist’ type, multiple properties)
+
+ This is an alist that accepts a ‘(KEY . LIST-OF-VALUES)’ combination.
+The ‘KEY’ is either a number, representing the heading’s level (0
+through 8) or ‘t’, which pertains to the fallback style. The named keys
+‘agenda-date’ and ‘agenda-structure’ apply to the Org agenda.
+
+ Level 0 is a special heading: it is used for what counts as a
+document title or equivalent, such as the ‘#+title’ construct we find in
+Org files. Levels 1-8 are regular headings.
+
+ The ‘LIST-OF-VALUES’ covers symbols that refer to properties, as
+described below. Here is a complete sample with various stylistic
+combinations, followed by a presentation of all available properties:
+
+ (setq modus-themes-headings
+ '((1 . (variable-pitch 1.5))
+ (2 . (1.3))
+ (agenda-date . (1.3))
+ (agenda-structure . (variable-pitch light 1.8))
+ (t . (1.1))))
+
+ Properties:
+
+ • A font weight, which must be supported by the underlying typeface:
+ • ‘thin’
+ • ‘ultralight’
+ • ‘extralight’
+ • ‘light’
+ • ‘semilight’
+ • ‘regular’
+ • ‘medium’
+ • ‘semibold’
+ • ‘bold’ (default)
+ • ‘heavy’
+ • ‘extrabold’
+ • ‘ultrabold’
+ • A floating point as a height multiple of the default or a cons cell
+ in the form of ‘(height . FLOAT)’.
+
+ By default (a ‘nil’ value for this variable), all headings have a
+bold typographic weight and use a desaturated text color.
+
+ A ‘variable-pitch’ property changes the font family of the heading to
+that of the ‘variable-pitch’ face (normally a proportionately spaced
+typeface).
+
+ The symbol of a weight attribute adjusts the font of the heading
+accordingly, such as ‘light’, ‘semibold’, etc. Valid symbols are
+defined in the variable ‘modus-themes-weights’. The absence of a weight
+means that bold will be used by virtue of inheriting the ‘bold’ face.
+
+ *note Configure bold and italic faces::.
+
+ A number, expressed as a floating point (e.g. 1.5), adjusts the
+height of the heading to that many times the base font size. The
+default height is the same as 1.0, though it need not be explicitly
+stated. Instead of a floating point, an acceptable value can be in the
+form of a cons cell like ‘(height . FLOAT)’ or ‘(height FLOAT)’, where
+FLOAT is the given number.
+
+ Combinations of any of those properties are expressed as a list, like
+in these examples:
+
+ (semibold)
+ (variable-pitch semibold 1.3)
+ (variable-pitch semibold (height 1.3)) ; same as above
+ (variable-pitch semibold (height . 1.3)) ; same as above
+
+ The order in which the properties are set is not significant.
+
+ In user configuration files the form may look like this:
+
+ (setq modus-themes-headings
+ '((1 . (variable-pitch 1.5))
+ (2 . (1.3))
+ (agenda-date . (1.3))
+ (agenda-structure . (variable-pitch light 1.8))
+ (t . (1.1))))
+
+ When defining the styles per heading level, it is possible to pass a
+non-‘nil’ value (‘t’) instead of a list of properties. This will retain
+the original aesthetic for that level. For example:
+
+ (setq modus-themes-headings
+ '((1 . t) ; keep the default style
+ (2 . (semibold 1.2))
+ (t . (rainbow)))) ; style for all other headings
+
+ (setq modus-themes-headings
+ '((1 . (variable-pitch 1.5))
+ (2 . (semibold))
+ (t . t))) ; default style for all other levels
+
+ Note that the text color of headings, of their background, and
+overline can all be set via the overrides. It is possible to have any
+color combination for any heading level (something that could not be
+done in older versions of the themes).
+
+ *note Option for palette overrides: Palette overrides.
+
+ *note Make headings more or less colorful::.
+
+
+File: docGYh7V6.info, Node: UI typeface, Next: Palette overrides, Prev: Heading styles, Up: Customization options
+
+4.10 Option for variable-pitch font in UI elements
+==================================================
+
+Brief: Toggle the use of proportionately spaced (‘variable-pitch’) fonts
+in the User Interface.
+
+ Symbol: ‘modus-themes-variable-pitch-ui’ (‘boolean’ type)
+
+ Possible values:
+
+ 1. ‘nil’ (default)
+ 2. ‘t’
+
+ This option concerns User Interface elements that are under the
+direct control of Emacs. In particular: the mode line, header line, tab
+bar, and tab line.
+
+ The default is to use the same font as the rest of Emacs, which
+usually is a monospaced family.
+
+ With a non-‘nil’ value (‘t’) apply a proportionately spaced typeface.
+This is done by assigning the ‘variable-pitch’ face to the relevant
+items.
+
+ *note Font configurations for Org and others::.
+
+
+File: docGYh7V6.info, Node: Palette overrides, Prev: UI typeface, Up: Customization options
+
+4.11 Option for palette overrides
+=================================
+
+This section describes palette overrides in detail. For a simpler
+alternative, use the presets we provide (*note Palette override
+presets::).
+
+ Each Modus theme specifies a color palette that declares named color
+values and semantic color mappings:
+
+ • Named colors consist of a symbol and a string that specifies a
+ hexadecimal RGB value. For example: ‘(blue-warmer "#354fcf")’.
+
+ • The semantic color mappings associate an abstract construct with a
+ given named color from the palette, like ‘(heading-2
+ yellow-faint)’. Both elements of the list are symbols, though the
+ ‘cadr’ (value) can be a string that specifies a color, such as
+ ‘(heading-2 "#354fcf")’.
+
+ Both of those subsets can be overridden, thus refashioning the theme.
+Overrides are either shared, by being stored in the user option
+‘modus-themes-common-palette-overrides’, or they are specific to the
+theme they name. In the latter case, the naming scheme of each palette
+variable is ‘THEME-NAME-palette-overrides’, thus yielding:
+
+ • ‘modus-operandi-palette-overrides’
+
+ • ‘modus-operandi-deuteranopia-palette-overrides’
+
+ • ‘modus-operandi-tinted-palette-overrides’
+
+ • ‘modus-operandi-tritanopia-palette-overrides’
+
+ • ‘modus-vivendi-palette-overrides’
+
+ • ‘modus-vivendi-deuteranopia-palette-overrides’
+
+ • ‘modus-vivendi-tinted-palette-overrides’
+
+ • ‘modus-vivendi-tritanopia-palette-overrides’
+
+ Theme-specific overrides take precedence over the shared ones. It is
+strongly advised that shared overrides do NOT alter color values, as
+those will not be appropriate for both dark and light themes. Common
+overrides are best limited to the semantic color mappings as those use
+the color value that corresponds to the active theme (e.g. make the
+cursor ‘blue-warmer’ in all themes, whatever the value of ‘blue-warmer’
+is in each theme).
+
+ The value of any overrides’ variable must mirror a theme’s palette.
+Palette variables are named after their theme as ‘THEME-NAME-palette’.
+For example, the ‘modus-operandi-palette’ is like this:
+
+ (defconst modus-operandi-palette
+ '(
+ ;;; Basic values
+
+ (bg-main "#ffffff")
+ (bg-dim "#f0f0f0")
+ (fg-main "#000000")
+
+ ;; ...
+
+ (red "#a60000")
+ (red-warmer "#972500")
+ (red-cooler "#a0132f")
+ (red-faint "#7f0000")
+ (red-intense "#d00000")
+
+ ;; ...
+
+ ;;;; Mappings
+
+ ;; ...
+
+ (cursor fg-main)
+ (builtin magenta-warmer)
+ (comment fg-dim)
+ (constant blue-cooler)
+ (docstring green-faint)
+ (fnname magenta)
+ (keyword magenta-cooler)
+
+ ;; ...
+ ))
+
+ The ‘modus-operandi-palette-overrides’ targets the entries that need
+to be changed. For example, to make the main foreground color a dark
+gray instead of pure black, use a shade of red for comments, and apply a
+cyan hue to keywords:
+
+ (setq modus-operandi-palette-overrides
+ '((fg-main "#333333")
+ (comment red-faint)
+ (keyword cyan-cooler)))
+
+ Changes take effect upon theme reload (*note Custom reload theme::).
+Overrides are removed by setting their variable to a ‘nil’ value.
+
+ The common accented foregrounds in each palette follow a predictable
+naming scheme: ‘HUE{,-warmer,-cooler,-faint,-intense}’. ‘HUE’ is one of
+the six basic colors: red, green, blue, yellow, magenta, cyan.
+
+ Named colors that are meant to be used as backgrounds contain ‘bg’ in
+their name, such as ‘bg-red-intense’. While special purpose foregrounds
+that are meant to be combined with such backgrounds, contain ‘fg’ in
+their name, such as ‘fg-removed’ which complements ‘bg-removed’.
+
+ Named colors can be previewed, such as with the command
+‘modus-themes-list-colors’ (*note Preview theme colors::).
+
+ For a video tutorial that users of all skill levels can approach,
+watch:
+<https://protesilaos.com/codelog/2022-12-17-modus-themes-v4-demo/>.
+
+
+File: docGYh7V6.info, Node: Advanced customization, Next: Face coverage, Prev: Customization options, Up: Top
+
+5 Advanced customization
+************************
+
+Unlike the predefined customization options which follow a clear pattern
+of allowing the user to quickly specify their preference, the themes
+also provide a more flexible, albeit difficult, mechanism to control
+things with precision (*note Customization Options: Customization
+options.).
+
+ This section is of interest only to users who are prepared to
+maintain their own local tweaks and who are willing to deal with any
+possible incompatibilities between versioned releases of the themes. As
+such, they are labeled as “do-it-yourself” or “DIY”.
+
+* Menu:
+
+* Palette override presets::
+* Stylistic variants using palette overrides::
+* More accurate colors in terminal emulators::
+* Range of color with terminal emulators::
+* Preview theme colors::
+* Per-theme customization settings::
+* Get a single color from the palette::
+* Use theme colors in code with modus-themes-with-colors::
+* Do not extend the region background::
+* Add padding to mode line::
+* Remap face with local value::
+* Font configurations for Org and others::
+* Configure bold and italic faces::
+* Custom Org todo keyword and priority faces::
+* Custom Org emphasis faces::
+* Update Org block delimiter fontification::
+* Measure color contrast::
+* Load theme depending on time of day::
+* Backdrop for pdf-tools::
+* Toggle themes without reloading them::
+* A theme-agnostic hook for theme loading::
+* Use more spacious margins or padding in Emacs frames::
+* Custom hl-todo colors::
+* Add support for solaire-mode::
+
+
+File: docGYh7V6.info, Node: Palette override presets, Next: Stylistic variants using palette overrides, Up: Advanced customization
+
+5.1 Palette override presets
+============================
+
+This section shows how to refashion the themes by opting in to the
+stylistic presets we provide. Those presets override the default color
+mappings to amplify, tone down, or refashion the overall coloration of
+the themes.
+
+ To make almost all aspects of the themes less intense, use this:
+
+ ;; Always remember to reload the theme for changes to take effect!
+ (setq modus-themes-common-palette-overrides modus-themes-preset-overrides-faint)
+
+ With ‘modus-themes-preset-overrides-faint’ the grays are toned down,
+gray backgrounds are removed from some contexts, and almost all accent
+colors are desaturated. It makes the themes less attention-grabbing.
+
+ On the opposite end of the stylistic spectrum, we have this
+
+ ;; Always remember to reload the theme for changes to take effect!
+ (setq modus-themes-common-palette-overrides modus-themes-preset-overrides-intense)
+
+ The ‘modus-themes-preset-overrides-intense’ makes many background
+colors accented instead of gray and increases coloration in a number of
+places. Colors stand out more and are made easier to spot.
+
+ For some stylistic variation try the “cooler” and “warmer” presets:
+
+ ;; This:
+ (setq modus-themes-common-palette-overrides modus-themes-preset-overrides-cooler)
+
+ ;; Or:
+ (setq modus-themes-common-palette-overrides modus-themes-preset-overrides-warmer)
+
+ Note that the user is not limited to those presets. The system of
+overrides we provide makes it possible to tweak the value of each
+individual named color and to change how values are assigned to semantic
+color mappings (*note Option for palette overrides: Palette overrides.).
+Subsequent sections provide examples (*note Stylistic variants using
+palette overrides::).
+
+ It is also possible to use those presets as a basis and, for example,
+add to them code from the subsequent sections of this manual. This is
+the general idea (extra space for didactic purposes):
+
+ (setq modus-themes-common-palette-overrides
+ `(
+ ;; From the section "Make the mode line borderless"
+ (border-mode-line-active unspecified)
+ (border-mode-line-inactive unspecified)
+
+ ;; From the section "Make matching parenthesis more or less intense"
+ (bg-paren-match bg-magenta-intense)
+ (underline-paren-match fg-main)
+
+ ;; And expand the preset here. Note that the ,@ works because
+ ;; we use the backtick for this list, instead of a straight
+ ;; quote.
+ ,@modus-themes-preset-overrides-intense))
+
+
+File: docGYh7V6.info, Node: Stylistic variants using palette overrides, Next: More accurate colors in terminal emulators, Prev: Palette override presets, Up: Advanced customization
+
+5.2 Stylistic variants using palette overrides
+==============================================
+
+This section contains practical examples of overriding the palette of
+the themes (*note Option for palette overrides: Palette overrides.).
+Users can copy the code to their init file, evaluate it, and then
+re-load the theme for changes to take effect. To apply overrides at
+startup simply define them before the call that loads the theme.
+Remember that we also provide presets that are easier to apply (*note
+Palette override presets::).
+
+* Menu:
+
+* Make the mode line borderless::
+* Make the active mode line colorful::
+* Make the tab bar more or less colorful::
+* Make the fringe invisible or another color::
+* Make links use subtle or no underlines::
+* Make prompts more or less colorful::
+* Make completion matches more or less colorful::
+* Make comments yellow and strings green::
+* Make code syntax use the old alt-syntax style::
+* Make use of alternative styles for code syntax::
+* Make matching parenthesis more or less intense::
+* Make box buttons more or less gray::
+* Make TODO and DONE more or less intense::
+* Make headings more or less colorful::
+* Make Org agenda more or less colorful::
+* Make inline code in prose use alternative styles::
+* Make mail citations and headers more or less colorful::
+* Make the region preserve text colors, plus other styles: Make the region preserve text colors plus other styles.
+* Make mouse highlights more or less colorful::
+* Make language underlines less colorful::
+* Make line numbers use alternative styles::
+* Make diffs use only a foreground::
+* Make deuteranopia diffs red and blue instead of yellow and blue::
+* Make the themes look like what the maintainer uses::
+
+
+File: docGYh7V6.info, Node: Make the mode line borderless, Next: Make the active mode line colorful, Up: Stylistic variants using palette overrides
+
+5.2.1 Make the mode line borderless
+-----------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+To hide the border around the active and inactive mode lines, we need to
+set their color to that of the underlying background.
+
+ *note Make the active mode line colorful::.
+
+ *note Add padding to mode line::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Remove the border
+ (setq modus-themes-common-palette-overrides
+ '((border-mode-line-active unspecified)
+ (border-mode-line-inactive unspecified)))
+
+ ;; Keep the border but make it the same color as the background of the
+ ;; mode line (thus appearing borderless). The difference with the
+ ;; above is that this version is a bit thicker because the border are
+ ;; still there.
+ (setq modus-themes-common-palette-overrides
+ '((border-mode-line-active bg-mode-line-active)
+ (border-mode-line-inactive bg-mode-line-inactive)))
+
+
+File: docGYh7V6.info, Node: Make the active mode line colorful, Next: Make the tab bar more or less colorful, Prev: Make the mode line borderless, Up: Stylistic variants using palette overrides
+
+5.2.2 Make the active mode line colorful
+----------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show some snippets that apply different stylistic variants. Of
+course, it is possible to use theme-specific overrides to, say, have a
+blue mode line for ‘modus-operandi’ and a red one for ‘modus-vivendi’.
+
+ *note Make the mode line borderless::.
+
+ *note Add padding to mode line::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Blue background, neutral foreground, intense blue border
+ (setq modus-themes-common-palette-overrides
+ '((bg-mode-line-active bg-blue-intense)
+ (fg-mode-line-active fg-main)
+ (border-mode-line-active blue-intense)))
+
+ ;; Subtle blue background, neutral foreground, intense blue border
+ (setq modus-themes-common-palette-overrides
+ '((bg-mode-line-active bg-blue-subtle)
+ (fg-mode-line-active fg-main)
+ (border-mode-line-active blue-intense)))
+
+ ;; Subtle red background, red foreground, invisible border
+ (setq modus-themes-common-palette-overrides
+ '((bg-mode-line-active bg-red-subtle)
+ (fg-mode-line-active red-warmer)
+ (border-mode-line-active bg-red-subtle)))
+
+
+File: docGYh7V6.info, Node: Make the tab bar more or less colorful, Next: Make the fringe invisible or another color, Prev: Make the active mode line colorful, Up: Stylistic variants using palette overrides
+
+5.2.3 Make the tab bar more or less colorful
+--------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show how to affect the colors of the built-in ‘tab-bar-mode’ and
+‘tab-line-mode’.
+
+ For consistent theme-wide results, consider changing the mode line,
+fringes, and line numbers. These are shown in other sections of this
+manual.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Make the `tab-bar-mode' mode subtle while keepings its original
+ ;; gray aesthetic.
+ (setq modus-themes-common-palette-overrides
+ '((bg-tab-bar bg-main)
+ (bg-tab-current bg-active)
+ (bg-tab-other bg-dim)))
+
+ ;; Like the above, but the current tab has a colorful background and
+ ;; the inactive tabs have a slightly more noticeable gray background.
+ (setq modus-themes-common-palette-overrides
+ '((bg-tab-bar bg-main)
+ (bg-tab-current bg-cyan-intense)
+ (bg-tab-other bg-inactive)))
+
+ ;; Make the tabs colorful, using a monochromatic pattern (e.g. shades
+ ;; of cyan).
+ (setq modus-themes-common-palette-overrides
+ '((bg-tab-bar bg-cyan-nuanced)
+ (bg-tab-current bg-cyan-intense)
+ (bg-tab-other bg-cyan-subtle)))
+
+ ;; Like the above, but with a dichromatic pattern (cyan and magenta).
+ (setq modus-themes-common-palette-overrides
+ '((bg-tab-bar bg-cyan-nuanced)
+ (bg-tab-current bg-magenta-intense)
+ (bg-tab-other bg-cyan-subtle)))
+
+
+File: docGYh7V6.info, Node: Make the fringe invisible or another color, Next: Make links use subtle or no underlines, Prev: Make the tab bar more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.4 Make the fringe invisible or another color
+------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show how to make the fringe invisible or how to assign to it a
+different color. The “fringe” is a small area to the right and left
+side of the Emacs window which shows indicators such as for truncation
+or continuation lines.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Make the fringe invisible
+ (setq modus-themes-common-palette-overrides
+ '((fringe unspecified)))
+
+ ;; Make the fringe more intense
+ (setq modus-themes-common-palette-overrides
+ '((fringe bg-active)))
+
+ ;; Make the fringe colorful, but nuanced
+ (setq modus-themes-common-palette-overrides
+ '((fringe bg-blue-nuanced)))
+
+
+File: docGYh7V6.info, Node: Make links use subtle or no underlines, Next: Make prompts more or less colorful, Prev: Make the fringe invisible or another color, Up: Stylistic variants using palette overrides
+
+5.2.5 Make links use subtle or no underlines
+--------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this example, we showcase the special use of the ‘unspecified’ symbol
+that underline mappings can read correctly.
+
+ ;; Subtle underlines
+ (setq modus-themes-common-palette-overrides
+ '((underline-link border)
+ (underline-link-visited border)
+ (underline-link-symbolic border)))
+
+ ;; No underlines
+ (setq modus-themes-common-palette-overrides
+ '((underline-link unspecified)
+ (underline-link-visited unspecified)
+ (underline-link-symbolic unspecified)))
+
+
+File: docGYh7V6.info, Node: Make prompts more or less colorful, Next: Make completion matches more or less colorful, Prev: Make links use subtle or no underlines, Up: Stylistic variants using palette overrides
+
+5.2.6 Make prompts more or less colorful
+----------------------------------------
+
+This section contains practical examples of overriding the palette of
+the themes (*note Option for palette overrides: Palette overrides.). In
+the following code block we show how to add or remove color from
+prompts.
+
+ *note Option for command prompt styles: Command prompts.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Keep the background unspecified (like the default), but use a faint
+ ;; foreground color.
+ (setq modus-themes-common-palette-overrides
+ '((fg-prompt cyan-faint)
+ (bg-prompt unspecified)))
+
+ ;; Add a nuanced background to prompts that complements their foreground.
+ (setq modus-themes-common-palette-overrides
+ '((fg-prompt cyan)
+ (bg-prompt bg-cyan-nuanced)))
+
+ ;; Add a yellow background and adjust the foreground accordingly.
+ (setq modus-themes-common-palette-overrides
+ '((fg-prompt fg-main)
+ (bg-prompt bg-yellow-subtle))) ; try to replace "subtle" with "intense"
+
+
+File: docGYh7V6.info, Node: Make completion matches more or less colorful, Next: Make comments yellow and strings green, Prev: Make prompts more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.7 Make completion matches more or less colorful
+---------------------------------------------------
+
+This section contains practical examples of overriding the palette of
+the themes (*note Option for palette overrides: Palette overrides.).
+Here we demonstrate how to activate background coloration for completion
+matches. We show three different degrees of intensity.
+
+ *note Option for completion framework aesthetics: Completion UIs.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Add a nuanced background color to completion matches, while keeping
+ ;; their foreground intact (foregrounds do not need to be specified in
+ ;; this case, but we do it for didactic purposes).
+ (setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 blue)
+ (fg-completion-match-1 magenta-warmer)
+ (fg-completion-match-2 cyan)
+ (fg-completion-match-3 red)
+ (bg-completion-match-0 bg-blue-nuanced)
+ (bg-completion-match-1 bg-magenta-nuanced)
+ (bg-completion-match-2 bg-cyan-nuanced)
+ (bg-completion-match-3 bg-red-nuanced)))
+
+ ;; Add intense background colors to completion matches and adjust the
+ ;; foregrounds accordingly.
+ (setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 fg-main)
+ (fg-completion-match-1 fg-main)
+ (fg-completion-match-2 fg-main)
+ (fg-completion-match-3 fg-main)
+ (bg-completion-match-0 bg-blue-intense)
+ (bg-completion-match-1 bg-yellow-intense)
+ (bg-completion-match-2 bg-cyan-intense)
+ (bg-completion-match-3 bg-red-intense)))
+
+ ;; Like the above, but with subtle backgrounds.
+ (setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 fg-main)
+ (fg-completion-match-1 fg-main)
+ (fg-completion-match-2 fg-main)
+ (fg-completion-match-3 fg-main)
+ (bg-completion-match-0 bg-blue-subtle)
+ (bg-completion-match-1 bg-yellow-subtle)
+ (bg-completion-match-2 bg-cyan-subtle)
+ (bg-completion-match-3 bg-red-subtle)))
+
+ Adding to the above, it is possible to, say, reduce the number of
+colors to two:
+
+ ;; No backgrounds (like the default) and just use two colors.
+ (setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 blue)
+ (fg-completion-match-1 yellow)
+ (fg-completion-match-2 blue)
+ (fg-completion-match-3 yellow)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)))
+
+ ;; Again, a two-color style but this time with backgrounds
+ (setq modus-themes-common-palette-overrides
+ '((fg-completion-match-0 blue)
+ (fg-completion-match-1 yellow)
+ (fg-completion-match-2 blue)
+ (fg-completion-match-3 yellow)
+ (bg-completion-match-0 bg-blue-nuanced)
+ (bg-completion-match-1 bg-yellow-nuanced)
+ (bg-completion-match-2 bg-blue-nuanced)
+ (bg-completion-match-3 bg-yellow-nuanced)))
+
+ The user can mix and match to their liking.
+
+
+File: docGYh7V6.info, Node: Make comments yellow and strings green, Next: Make code syntax use the old alt-syntax style, Prev: Make completion matches more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.8 Make comments yellow and strings green
+--------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In previous versions of the themes, we provided an option for yellow-ish
+comments and green-ish strings. For some users, those were still not
+good enough, as the exact values were hardcoded. Here we show how to
+reproduce the effect, but also how to tweak it to one’s liking.
+
+ *note Make code syntax use the old alt-syntax style::.
+
+ *note Make use of alternative styles for code syntax::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Yellow comments and green strings like older versions of the Modus
+ ;; themes
+ (setq modus-themes-common-palette-overrides
+ '((comment yellow-cooler)
+ (string green-cooler)))
+
+ ;; Faint yellow comments and a different shade of green for strings
+ (setq modus-themes-common-palette-overrides
+ '((comment yellow-faint)
+ (string green-warmer)))
+
+ ;; Green comments and yellow strings, because now the user has the
+ ;; freedom to do it
+ (setq modus-themes-common-palette-overrides
+ '((comment green)
+ (string yellow-cooler)))
+
+
+File: docGYh7V6.info, Node: Make code syntax use the old alt-syntax style, Next: Make use of alternative styles for code syntax, Prev: Make comments yellow and strings green, Up: Stylistic variants using palette overrides
+
+5.2.9 Make code syntax use the old alt-syntax style
+---------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this section we show how to reproduce what previous versions of the
+Modus themes provided as a stylistic alternative for code syntax. The
+upside of using overrides for this purpose is that we can tweak the
+style to our liking, but first let’s start with its recreation:
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; The old "alt-syntax"
+ (setq modus-themes-common-palette-overrides
+ '((builtin magenta)
+ (comment fg-dim)
+ (constant magenta-cooler)
+ (docstring magenta-faint)
+ (docmarkup green-faint)
+ (fnname magenta-warmer)
+ (keyword cyan)
+ (preprocessor cyan-cooler)
+ (string red-cooler)
+ (type magenta-cooler)
+ (variable blue-warmer)
+ (rx-construct magenta-warmer)
+ (rx-backslash blue-cooler)))
+
+ The “alt-syntax” could optionally use green strings and yellow
+comments (*note Make comments yellow and strings green::):
+
+ ;; Same as above, but with yellow comments and green strings
+ (setq modus-themes-common-palette-overrides
+ '((builtin magenta)
+ (comment yellow-faint)
+ (constant magenta-cooler)
+ (docstring green-faint)
+ (docmarkup magenta-faint)
+ (fnname magenta-warmer)
+ (keyword cyan)
+ (preprocessor cyan-cooler)
+ (string green-cooler)
+ (type magenta-cooler)
+ (variable blue-warmer)
+ (rx-construct magenta-warmer)
+ (rx-backslash blue-cooler)))
+
+ The standard “alt-syntax” has red strings. As such, it is
+interesting to experiment with faintly red colored comments:
+
+ ;; Like the old "alt-syntax" but with faint red comments
+ (setq modus-themes-common-palette-overrides
+ '((builtin magenta)
+ (comment red-faint)
+ (constant magenta-cooler)
+ (docstring magenta-faint)
+ (docmarkup green-faint)
+ (fnname magenta-warmer)
+ (keyword cyan)
+ (preprocessor cyan-cooler)
+ (string red-cooler)
+ (type magenta-cooler)
+ (variable blue-warmer)
+ (rx-construct magenta-warmer)
+ (rx-backslash blue-cooler)))
+
+ The user can always mix and match styles to their liking.
+
+ *note Make use of alternative styles for code syntax::.
+
+
+File: docGYh7V6.info, Node: Make use of alternative styles for code syntax, Next: Make matching parenthesis more or less intense, Prev: Make code syntax use the old alt-syntax style, Up: Stylistic variants using palette overrides
+
+5.2.10 Make use of alternative styles for code syntax
+-----------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+The idea here is to change how named colors are mapped to code syntax.
+Each of the following snippets give the ‘modus-themes’ a different feel
+while editing code.
+
+ Note that my ‘modus-themes’ and ‘ef-themes’ do not use the same
+palettes, so some things are different. If you copy from the latter to
+the former, double-check that the entries exist in the given Modus theme
+palette.
+
+ *note Make comments yellow and strings green::.
+
+ *note Make code syntax use the old alt-syntax style::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Mimic `ef-night' theme (from my `ef-themes') for code syntax
+ ;; highlighting, while still using the Modus colors (and other
+ ;; mappings).
+ (setq modus-themes-common-palette-overrides
+ '((builtin green-cooler)
+ (comment yellow-faint)
+ (constant magenta-cooler)
+ (fnname cyan-cooler)
+ (keyword blue-warmer)
+ (preprocessor red-warmer)
+ (docstring cyan-faint)
+ (string blue-cooler)
+ (type magenta-cooler)
+ (variable cyan)))
+
+ ;; Mimic `ef-summer' theme (from my `ef-themes') for code syntax
+ ;; highlighting, while still using the Modus colors (and other
+ ;; mappings).
+ (setq modus-themes-common-palette-overrides
+ '((builtin magenta)
+ (comment yellow-faint)
+ (constant red-cooler)
+ (fnname magenta-warmer)
+ (keyword magenta-cooler)
+ (preprocessor green-warmer)
+ (docstring cyan-faint)
+ (string yellow-warmer)
+ (type cyan-warmer)
+ (variable blue-warmer)))
+
+ ;; Mimic `ef-bio' theme (from my `ef-themes') for code syntax
+ ;; highlighting, while still using the Modus colors (and other
+ ;; mappings).
+ (setq modus-themes-common-palette-overrides
+ '((builtin green)
+ (comment yellow-faint)
+ (constant blue)
+ (fnname green-warmer)
+ (keyword green-cooler)
+ (preprocessor green)
+ (docstring green-faint)
+ (string magenta-cooler)
+ (type cyan-warmer)
+ (variable blue-warmer)))
+
+ ;; Mimic `ef-trio-light' theme (from my `ef-themes') for code syntax
+ ;; highlighting, while still using the Modus colors (and other
+ ;; mappings).
+ (setq modus-themes-common-palette-overrides
+ '((builtin magenta-cooler)
+ (comment yellow-faint)
+ (constant magenta-warmer)
+ (fnname blue-warmer)
+ (keyword magenta)
+ (preprocessor red-cooler)
+ (docstring magenta-faint)
+ (string green-cooler)
+ (type cyan-cooler)
+ (variable cyan-warmer)))
+
+
+File: docGYh7V6.info, Node: Make matching parenthesis more or less intense, Next: Make box buttons more or less gray, Prev: Make use of alternative styles for code syntax, Up: Stylistic variants using palette overrides
+
+5.2.11 Make matching parenthesis more or less intense
+-----------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this code block we show how to change the background of matching
+delimiters when ‘show-paren-mode’ is enabled. We also demonstrate how
+to enable underlines for those highlights.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Change the background to a shade of magenta
+ (setq modus-themes-common-palette-overrides
+ '((bg-paren-match bg-magenta-intense)))
+
+ ;; Enable underlines by applying a color to them
+ (setq modus-themes-common-palette-overrides
+ '((bg-paren-match bg-magenta-intense)
+ (underline-paren-match fg-main)))
+
+
+File: docGYh7V6.info, Node: Make box buttons more or less gray, Next: Make TODO and DONE more or less intense, Prev: Make matching parenthesis more or less intense, Up: Stylistic variants using palette overrides
+
+5.2.12 Make box buttons more or less gray
+-----------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+By default, the boxed buttons that appear in ‘M-x customize’ and related
+are distinct shades of gray. The following set of overrides removes the
+gray from the active buttons and amplifies it for the inactive ones.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ (setq modus-themes-common-palette-overrides
+ '((bg-button-active bg-main)
+ (fg-button-active fg-main)
+ (bg-button-inactive bg-inactive)
+ (fg-button-inactive "gray50")))
+
+
+File: docGYh7V6.info, Node: Make TODO and DONE more or less intense, Next: Make headings more or less colorful, Prev: Make box buttons more or less gray, Up: Stylistic variants using palette overrides
+
+5.2.13 Make TODO and DONE more or less intense
+----------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show how to affect just the ‘TODO’ and ‘DONE’ keywords that we
+encounter in Org buffers. The idea is to make those pop out more or to
+subdue them.
+
+ *note Make headings more or less colorful::.
+
+ *note Make inline code in prose use alternative styles::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Increase intensity
+ (setq modus-themes-common-palette-overrides
+ '((prose-done green-intense)
+ (prose-todo red-intense)))
+
+ ;; Tone down intensity
+ (setq modus-themes-common-palette-overrides
+ '((prose-done green-faint) ; OR replace `green-faint' with `olive'
+ (prose-todo red-faint))) ; OR replace `red-faint' with `rust'
+
+ ;; Keep TODO at its default (so no override for it), but make DONE
+ ;; gray.
+ (setq modus-themes-common-palette-overrides
+ '((prose-done fg-dim)))
+
+
+File: docGYh7V6.info, Node: Make headings more or less colorful, Next: Make Org agenda more or less colorful, Prev: Make TODO and DONE more or less intense, Up: Stylistic variants using palette overrides
+
+5.2.14 Make headings more or less colorful
+------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show how to alter the looks of headings, such as in Org mode.
+Using overrides here offers far more flexibility than what we could
+achieve with previous versions of the themes: the user can mix and match
+styles at will.
+
+ *note Make TODO and DONE more intense: Make TODO and DONE more or
+less intense.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Apply more colorful foreground to some headings (headings 0-8).
+ ;; Level 0 is for Org #+title and related.
+ (setq modus-themes-common-palette-overrides
+ '((fg-heading-1 blue-warmer)
+ (fg-heading-2 yellow-cooler)
+ (fg-heading-3 cyan-cooler)))
+
+ ;; Like the above, but with gradient colors
+ (setq modus-themes-common-palette-overrides
+ '((fg-heading-1 blue)
+ (fg-heading-2 cyan)
+ (fg-heading-3 green)))
+
+ ;; Add color to level 1 heading, but use the main foreground for
+ ;; others
+ (setq modus-themes-common-palette-overrides
+ '((fg-heading-1 blue)
+ (fg-heading-2 fg-main)
+ (fg-heading-3 fg-main)))
+
+ ;; Apply colorful foreground, background, and overline (headings 0-8)
+ (setq modus-themes-common-palette-overrides
+ '((fg-heading-1 blue-warmer)
+ (bg-heading-1 bg-blue-nuanced)
+ (overline-heading-1 blue)))
+
+ ;; Apply gray scale foreground, background, and overline (headings 0-8)
+ (setq modus-themes-common-palette-overrides
+ '((fg-heading-1 fg-main)
+ (bg-heading-1 bg-dim)
+ (overline-heading-1 border)))
+
+
+File: docGYh7V6.info, Node: Make Org agenda more or less colorful, Next: Make inline code in prose use alternative styles, Prev: Make headings more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.15 Make Org agenda more or less colorful
+--------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we provide three distinct code blocks. The first adds alternative
+and more varied colors to the Org agenda (and related). The second uses
+faint coloration. The third makes the agenda use various shades of
+blue. Mix and match at will, while also combining these styles with
+what we show in the other chapters with practical stylistic variants.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+ ;; Make the Org agenda use alternative and varied colors.
+ (setq modus-themes-common-palette-overrides
+ '((date-common cyan) ; default value (for timestamps and more)
+ (date-deadline red-warmer)
+ (date-event magenta-warmer)
+ (date-holiday blue) ; for M-x calendar
+ (date-now yellow-warmer)
+ (date-scheduled magenta-cooler)
+ (date-weekday cyan-cooler)
+ (date-weekend blue-faint)))
+
+ An example with faint coloration:
+
+ ;; Make the Org agenda use faint colors.
+ (setq modus-themes-common-palette-overrides
+ '((date-common cyan-faint) ; for timestamps and more
+ (date-deadline red-faint)
+ (date-event fg-alt) ; default
+ (date-holiday magenta) ; default (for M-x calendar)
+ (date-now fg-main) ; default
+ (date-scheduled yellow-faint)
+ (date-weekday fg-dim)
+ (date-weekend fg-dim)))
+
+ A third example that makes the agenda more blue:
+
+ ;; Make the Org agenda use more blue instead of yellow and red.
+ (setq modus-themes-common-palette-overrides
+ '((date-common cyan) ; default value (for timestamps and more)
+ (date-deadline blue-cooler)
+ (date-event blue-faint)
+ (date-holiday blue) ; for M-x calendar
+ (date-now blue-faint)
+ (date-scheduled blue)
+ (date-weekday fg-main)
+ (date-weekend fg-dim)))
+
+ Yet another example that also affects ‘DONE’ and ‘TODO’ keywords:
+
+ ;; Change dates to a set of more subtle combinations. Deadlines are a
+ ;; shade of magenta, scheduled dates are a shade of green that
+ ;; complements that of the deadlines, weekday headings use the main
+ ;; foreground color while weekends are a shade of gray. The DONE
+ ;; keyword is a faint blue-gray while TODO is yellow.
+ (setq modus-themes-common-palette-overrides
+ '((date-deadline magenta-warmer)
+ (date-scheduled green-cooler)
+ (date-weekday fg-main)
+ (date-event fg-dim)
+ (date-now blue)
+ (prose-done fg-alt)
+ (prose-todo yellow)))
+
+
+File: docGYh7V6.info, Node: Make inline code in prose use alternative styles, Next: Make mail citations and headers more or less colorful, Prev: Make Org agenda more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.16 Make inline code in prose use alternative styles
+-------------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In the following code block we show how to affect constructs such as
+Org’s verbatim, code, and macro entries. We also provide mappings for
+tables, property drawers, tags, and code block delimiters, though we do
+not show every possible permutation.
+
+ *note Make TODO and DONE more or less intense::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; These are all the mappings at their default values for didactic
+ ;; purposes
+ (setq modus-themes-common-palette-overrides
+ '((prose-block fg-dim)
+ (prose-code green-cooler)
+ (prose-done green)
+ (prose-macro magenta-cooler)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-tag magenta-faint)
+ (prose-todo red)
+ (prose-verbatim magenta-warmer)))
+
+ ;; Make code block delimiters use a shade of red, tone down verbatim,
+ ;; code, and macro, and amplify the style of property drawers
+ (setq modus-themes-common-palette-overrides
+ '((prose-block red-faint)
+ (prose-code fg-dim)
+ (prose-macro magenta-faint)
+ (prose-metadata cyan)
+ (prose-metadata-value green-warmer)
+ (prose-verbatim fg-dim)))
+
+ ;; Like the above but with more color variety for the inline code
+ ;; elements
+ (setq modus-themes-common-palette-overrides
+ '((prose-block red-faint)
+ (prose-code blue-cooler)
+ (prose-macro yellow-warmer)
+ (prose-metadata cyan)
+ (prose-metadata-value green-warmer)
+ (prose-verbatim red-warmer)))
+
+
+File: docGYh7V6.info, Node: Make mail citations and headers more or less colorful, Next: Make the region preserve text colors plus other styles, Prev: Make inline code in prose use alternative styles, Up: Stylistic variants using palette overrides
+
+5.2.17 Make mail citations and headers more or less colorful
+------------------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this section we show how to change the coloration of email message
+headers and citations. Before we show the code, this is the anatomy of
+a message:
+
+ From: Protesilaos <info@protesilaos.com>
+ To: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+ Subject: Test subject
+ --- Headers above this line; message and citations below ---
+ This is some sample text
+
+ > > Older quote
+ > Newer quote
+
+ We thus have the following:
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Reduce the intensity of mail citations and headers
+ (setq modus-themes-common-palette-overrides
+ '((mail-cite-0 cyan-faint)
+ (mail-cite-1 yellow-faint)
+ (mail-cite-2 green-faint)
+ (mail-cite-3 red-faint)
+ (mail-part olive)
+ (mail-recipient indigo)
+ (mail-subject maroon)
+ (mail-other slate)))
+
+ ;; Make mail citations more intense; adjust the headers accordingly
+ (setq modus-themes-common-palette-overrides
+ '((mail-cite-0 blue)
+ (mail-cite-1 yellow)
+ (mail-cite-2 green)
+ (mail-cite-3 magenta)
+ (mail-part magenta-cooler)
+ (mail-recipient cyan)
+ (mail-subject red-warmer)
+ (mail-other cyan-cooler)))
+
+ ;; Make all citations faint and neutral; make most headers green but
+ ;; use red for the subject lie so that it stands out
+ (setq modus-themes-common-palette-overrides
+ '((mail-cite-0 fg-dim)
+ (mail-cite-1 fg-alt)
+ (mail-cite-2 fg-dim)
+ (mail-cite-3 fg-alt)
+ (mail-part yellow-cooler)
+ (mail-recipient green-cooler)
+ (mail-subject red-cooler)
+ (mail-other green)))
+
+
+File: docGYh7V6.info, Node: Make the region preserve text colors plus other styles, Next: Make mouse highlights more or less colorful, Prev: Make mail citations and headers more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.18 Make the region preserve text colors, plus other styles
+--------------------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show how to make the region respect the underlying text colors
+or how to make the background more/less intense while combining it with
+an appropriate foreground value.
+
+ *note Do not extend the region background::.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; A background with no specific foreground (use foreground of
+ ;; underlying text)
+ (setq modus-themes-common-palette-overrides
+ '((bg-region bg-ochre) ; try to replace `bg-ochre' with `bg-lavender', `bg-sage'
+ (fg-region unspecified)))
+
+ ;; Subtle gray with a prominent blue foreground
+ (setq modus-themes-common-palette-overrides
+ '((bg-region bg-dim)
+ (fg-region blue-cooler)))
+
+ ;; Intense magenta background combined with the main foreground
+ (setq modus-themes-common-palette-overrides
+ '((bg-region bg-magenta-intense)
+ (fg-region fg-main)))
+
+
+File: docGYh7V6.info, Node: Make mouse highlights more or less colorful, Next: Make language underlines less colorful, Prev: Make the region preserve text colors plus other styles, Up: Stylistic variants using palette overrides
+
+5.2.19 Make mouse highlights more or less colorful
+--------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In the following code block we show how to affect the semantic color
+mapping that covers mouse hover effects and related highlights:
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Make the background an intense yellow
+ (setq modus-themes-common-palette-overrides
+ '((bg-hover bg-yellow-intense)))
+
+ ;; Make the background subtle green
+ (setq modus-themes-common-palette-overrides
+ '((bg-hover bg-green-subtle)))
+
+
+File: docGYh7V6.info, Node: Make language underlines less colorful, Next: Make line numbers use alternative styles, Prev: Make mouse highlights more or less colorful, Up: Stylistic variants using palette overrides
+
+5.2.20 Make language underlines less colorful
+---------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+Here we show how to affect the color of the underlines that are used by
+code linters and prose spell checkers.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Make the underlines less intense
+ (setq modus-themes-common-palette-overrides
+ '((underline-err red-faint)
+ (underline-warning yellow-faint)
+ (underline-note cyan-faint)))
+
+ ;; Change the color-coding of the underlines
+ (setq modus-themes-common-palette-overrides
+ '((underline-err yellow-intense)
+ (underline-warning magenta-intense)
+ (underline-note green-intense)))
+
+
+File: docGYh7V6.info, Node: Make line numbers use alternative styles, Next: Make diffs use only a foreground, Prev: Make language underlines less colorful, Up: Stylistic variants using palette overrides
+
+5.2.21 Make line numbers use alternative styles
+-----------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this section we show how to affect the ‘display-line-numbers-mode’.
+
+ ;; These overrides are common to all Modus themes. We also provide
+ ;; theme-specific options, such as `modus-operandi-palette-overrides'.
+ ;;
+ ;; In general, the theme-specific overrides are better for overriding
+ ;; color values, such as redefining what `blue-faint' looks like. The
+ ;; common overrides are best used for changes to semantic color
+ ;; mappings, as we show below.
+
+
+ ;; Make line numbers less intense
+ (setq modus-themes-common-palette-overrides
+ '((fg-line-number-inactive "gray50")
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive unspecified)
+ (bg-line-number-active unspecified)))
+
+ ;; Like the above, but use a shade of red for the current line number
+ (setq modus-themes-common-palette-overrides
+ '((fg-line-number-inactive "gray50")
+ (fg-line-number-active red-cooler)
+ (bg-line-number-inactive unspecified)
+ (bg-line-number-active unspecified)))
+
+ ;; Make all numbers more intense, use a more pronounce gray
+ ;; background, and make the current line have a colored background
+ (setq modus-themes-common-palette-overrides
+ '((fg-line-number-inactive fg-main)
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive bg-inactive)
+ (bg-line-number-active bg-cyan-intense)))
+
+
+File: docGYh7V6.info, Node: Make diffs use only a foreground, Next: Make deuteranopia diffs red and blue instead of yellow and blue, Prev: Make line numbers use alternative styles, Up: Stylistic variants using palette overrides
+
+5.2.22 Make diffs use only a foreground
+---------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this section we show how to change diff buffers (e.g. in ‘magit’) to
+only use color-coded text without any added background. What we
+basically do is to disable the applicable backgrounds and then intensify
+the foregrounds. Since the deuteranopia-optimized themes do not use the
+red-green color coding, we make an extra set of adjustments for them by
+overriding their palettes directly instead of just using the “common”
+overrides.
+
+ ;; Diffs with only foreground colors. Word-wise ("refined") diffs
+ ;; have a gray background to draw attention to themselves.
+ (setq modus-themes-common-palette-overrides
+ '((bg-added unspecified)
+ (bg-added-faint unspecified)
+ (bg-added-refine bg-inactive)
+ (fg-added green)
+ (fg-added-intense green-intense)
+
+ (bg-changed unspecified)
+ (bg-changed-faint unspecified)
+ (bg-changed-refine bg-inactive)
+ (fg-changed yellow)
+ (fg-changed-intense yellow-intense)
+
+ (bg-removed unspecified)
+ (bg-removed-faint unspecified)
+ (bg-removed-refine bg-inactive)
+ (fg-removed red)
+ (fg-removed-intense red-intense)
+
+ (bg-diff-context unspecified)))
+
+ ;; Because deuteranopia cannot use the typical red-yellow-green
+ ;; combination, we need to arrange for a yellow-purple-blue sequence.
+ ;; Notice that the above covers the "common" overrides, so we do not
+ ;; need to reproduce the whole list of them.
+ (setq modus-operandi-deuteranopia-palette-overrides
+ '((fg-added blue)
+ (fg-added-intense blue-intense)
+
+ (fg-changed magenta-cooler)
+ (fg-changed-intense magenta-intense)
+
+ (fg-removed yellow-warmer)
+ (fg-removed-intense yellow-intense)))
+
+ (setq modus-vivendi-deuteranopia-palette-overrides
+ '((fg-added blue)
+ (fg-added-intense blue-intense)
+
+ (fg-changed magenta-cooler)
+ (fg-changed-intense magenta-intense)
+
+ (fg-removed yellow)
+ (fg-removed-intense yellow-intense)))
+
+
+File: docGYh7V6.info, Node: Make deuteranopia diffs red and blue instead of yellow and blue, Next: Make the themes look like what the maintainer uses, Prev: Make diffs use only a foreground, Up: Stylistic variants using palette overrides
+
+5.2.23 Make deuteranopia diffs red and blue instead of yellow and blue
+----------------------------------------------------------------------
+
+This is one of our practical examples to override the semantic colors of
+the Modus themes (*note Stylistic variants using palette overrides::).
+In this section we show how to implement a red+blue color coding for
+diffs in the themes ‘modus-operandi-deuteranopia’ and
+‘modus-vivendi-deuteranopia’. As those themes are optimized for users
+with red-green color deficiency, they do not use the typical red+green
+color coding for diffs, defaulting instead to yellow+blue which are
+discernible. Users with deuteranomaly or, generally, those who like a
+different aesthetic, can use the following to make diffs use the
+red+yellow+blue color coding for removed, changed, and added lines
+respectively. This is achieved by overriding the “changed” and
+“removed” entries to use the colors of regular ‘modus-operandi’ and
+‘modus-vivendi’.
+
+ (setq modus-operandi-deuteranopia-palette-overrides
+ '((bg-changed "#ffdfa9")
+ (bg-changed-faint "#ffefbf")
+ (bg-changed-refine "#fac090")
+ (bg-changed-fringe "#d7c20a")
+ (fg-changed "#553d00")
+ (fg-changed-intense "#655000")
+
+ (bg-removed "#ffd8d5")
+ (bg-removed-faint "#ffe9e9")
+ (bg-removed-refine "#f3b5af")
+ (bg-removed-fringe "#d84a4f")
+ (fg-removed "#8f1313")
+ (fg-removed-intense "#aa2222")))
+
+ (setq modus-vivendi-deuteranopia-palette-overrides
+ '((bg-changed "#363300")
+ (bg-changed-faint "#2a1f00")
+ (bg-changed-refine "#4a4a00")
+ (bg-changed-fringe "#8a7a00")
+ (fg-changed "#efef80")
+ (fg-changed-intense "#c0b05f")
+
+ (bg-removed "#4f1119")
+ (bg-removed-faint "#380a0f")
+ (bg-removed-refine "#781a1f")
+ (bg-removed-fringe "#b81a1f")
+ (fg-removed "#ffbfbf")
+ (fg-removed-intense "#ff9095")))
+
+
+File: docGYh7V6.info, Node: Make the themes look like what the maintainer uses, Prev: Make deuteranopia diffs red and blue instead of yellow and blue, Up: Stylistic variants using palette overrides
+
+5.2.24 Make the themes look like what the maintainer uses
+---------------------------------------------------------
+
+Based on what we have learnt from the previous sections of this manual,
+here is what Protesilaos uses:
+
+ ;; Always reload the theme for changes to take effect!
+
+ (setq modus-themes-custom-auto-reload nil
+ modus-themes-to-toggle '(modus-operandi modus-vivendi)
+ modus-themes-mixed-fonts t
+ modus-themes-variable-pitch-ui nil
+ modus-themes-italic-constructs t
+ modus-themes-bold-constructs nil
+ modus-themes-org-blocks nil
+ modus-themes-completions '((t . (extrabold)))
+ modus-themes-prompts nil
+ modus-themes-headings
+ '((agenda-structure . (variable-pitch light 2.2))
+ (agenda-date . (variable-pitch regular 1.3))
+ (t . (regular 1.15))))
+
+ (setq modus-themes-common-palette-overrides
+ '((cursor magenta-cooler)
+ ;; Make the fringe invisible.
+ (fringe unspecified)
+ ;; Make line numbers less intense and add a shade of cyan
+ ;; for the current line number.
+ (fg-line-number-inactive "gray50")
+ (fg-line-number-active cyan-cooler)
+ (bg-line-number-inactive unspecified)
+ (bg-line-number-active unspecified)
+ ;; Make the current line of `hl-line-mode' a fine shade of
+ ;; gray (though also see my `lin' package).
+ (bg-hl-line bg-dim)
+ ;; Make the region have a cyan-green background with no
+ ;; specific foreground (use foreground of underlying text).
+ ;; "bg-sage" refers to Salvia officinalis, else the common
+ ;; sage.
+ (bg-region bg-sage)
+ (fg-region unspecified)
+ ;; Make matching parentheses a shade of magenta. It
+ ;; complements the region nicely.
+ (bg-paren-match bg-magenta-intense)
+ ;; Make email citations faint and neutral, reducing the
+ ;; default four colors to two; make mail headers cyan-blue.
+ (mail-cite-0 fg-dim)
+ (mail-cite-1 blue-faint)
+ (mail-cite-2 fg-dim)
+ (mail-cite-3 blue-faint)
+ (mail-part cyan-warmer)
+ (mail-recipient blue-warmer)
+ (mail-subject magenta-cooler)
+ (mail-other cyan-warmer)
+ ;; Change dates to a set of more subtle combinations.
+ (date-deadline magenta-cooler)
+ (date-scheduled magenta)
+ (date-weekday fg-main)
+ (date-event fg-dim)
+ (date-now blue-faint)
+ ;; Make tags (Org) less colorful and tables look the same as
+ ;; the default foreground.
+ (prose-done cyan-cooler)
+ (prose-tag fg-dim)
+ (prose-table fg-main)
+ ;; Make headings less colorful (though I never use deeply
+ ;; nested headings).
+ (fg-heading-2 blue-faint)
+ (fg-heading-3 magenta-faint)
+ (fg-heading-4 blue-faint)
+ (fg-heading-5 magenta-faint)
+ (fg-heading-6 blue-faint)
+ (fg-heading-7 magenta-faint)
+ (fg-heading-8 blue-faint)
+ ;; Make the active mode line a fine shade of lavender
+ ;; (purple) and tone down the gray of the inactive mode
+ ;; lines.
+ (bg-mode-line-active bg-lavender)
+ (border-mode-line-active bg-lavender)
+
+ (bg-mode-line-inactive bg-dim)
+ (border-mode-line-inactive bg-inactive)
+ ;; Make the prompts a shade of magenta, to fit in nicely with
+ ;; the overall blue-cyan-purple style of the other overrides.
+ ;; Add a nuanced background as well.
+ (bg-prompt bg-magenta-nuanced)
+ (fg-prompt magenta-cooler)
+ ;; Tweak some more constructs for stylistic constistency.
+ (name blue-warmer)
+ (identifier magenta-faint)
+ (keybind magenta-cooler)
+ (accent-0 magenta-cooler)
+ (accent-1 cyan-cooler)
+ (accent-2 blue-warmer)
+ (accent-3 red-cooler)))
+
+ ;; Make the active mode line have a pseudo 3D effect (this assumes
+ ;; you are using the default mode line and not an extra package).
+ (custom-set-faces
+ '(mode-line ((t :box (:style released-button)))))
+
+
+File: docGYh7V6.info, Node: More accurate colors in terminal emulators, Next: Range of color with terminal emulators, Prev: Stylistic variants using palette overrides, Up: Advanced customization
+
+5.3 More accurate colors in terminal emulators
+==============================================
+
+[ This is based on partial information. Please help verify and/or
+expand these findings. ]
+
+ The graphical version of Emacs can reproduce color values accurately.
+Whereas things get more tricky when Emacs is used in a terminal
+emulator, because the terminals’ own capabilities determine the number
+of colors that may be displayed: the Modus themes don’t look as good in
+that case.
+
+ There is, however, a way to instruct supported terminal emulators to
+use more accurate colors. In a shell prompt type ‘toe -a | grep direct’
+to get a list of relevant terminfo entries. There should be items such
+as ‘xterm-direct’, ‘alacritty-direct’, ‘kitty-direct’. Once you find
+the one that corresponds to your terminal, call Emacs with an
+environment variable like ‘TERM=xterm-direct’. Example that can be
+adapted to shell aliases:
+
+ TERM=xterm-direct emacsclient -nw
+
+ Another example that can be bound to a key:
+
+ TERM=xterm-direct uxterm -e emacsclient -nw
+
+
+File: docGYh7V6.info, Node: Range of color with terminal emulators, Next: Preview theme colors, Prev: More accurate colors in terminal emulators, Up: Advanced customization
+
+5.4 Range of color with terminal emulators
+==========================================
+
+[ This is based on partial information. Please help verify and/or
+expand these findings. ]
+
+ When Emacs runs in a non-windowed session its color reproduction
+capacity is framed or determined by the underlying terminal emulator
+(*note More accurate colors in terminal emulators::). Emacs cannot
+produce a color that lies outside the range of what the terminal’s color
+palette renders possible.
+
+ This is immediately noticeable when the terminal’s first 16 codes do
+not include a pure black value for the ‘termcol0’ entry and a pure white
+for ‘termcol15’. Emacs cannot set the correct background (white for
+‘modus-operandi’; black for ‘modus-vivendi’) or foreground (inverse of
+the background). It thus falls back to the closest approximation, which
+seldom is appropriate for the purposes of the Modus themes.
+
+ In such a case, the user is expected to update their terminal’s color
+palette such as by adapting these resources (*note Preview theme
+colors::):
+
+ ! Theme: modus-operandi
+ ! Description: XTerm port of modus-operandi (Modus themes for GNU Emacs)
+ ! Author: Protesilaos Stavrou, <https://protesilaos.com>
+ xterm*background: #ffffff
+ xterm*foreground: #000000
+ xterm*color0: #000000
+ xterm*color1: #a60000
+ xterm*color2: #005e00
+ xterm*color3: #813e00
+ xterm*color4: #0031a9
+ xterm*color5: #721045
+ xterm*color6: #00538b
+ xterm*color7: #bfbfbf
+ xterm*color8: #595959
+ xterm*color9: #972500
+ xterm*color10: #315b00
+ xterm*color11: #70480f
+ xterm*color12: #2544bb
+ xterm*color13: #5317ac
+ xterm*color14: #005a5f
+ xterm*color15: #ffffff
+
+ ! Theme: modus-vivendi
+ ! Description: XTerm port of modus-vivendi (Modus themes for GNU Emacs)
+ ! Author: Protesilaos Stavrou, <https://protesilaos.com>
+ xterm*background: #000000
+ xterm*foreground: #ffffff
+ xterm*color0: #000000
+ xterm*color1: #ff8059
+ xterm*color2: #44bc44
+ xterm*color3: #d0bc00
+ xterm*color4: #2fafff
+ xterm*color5: #feacd0
+ xterm*color6: #00d3d0
+ xterm*color7: #bfbfbf
+ xterm*color8: #595959
+ xterm*color9: #ef8b50
+ xterm*color10: #70b900
+ xterm*color11: #c0c530
+ xterm*color12: #79a8ff
+ xterm*color13: #b6a0ff
+ xterm*color14: #6ae4b9
+ xterm*color15: #ffffff
+
+
+File: docGYh7V6.info, Node: Preview theme colors, Next: Per-theme customization settings, Prev: Range of color with terminal emulators, Up: Advanced customization
+
+5.5 Preview theme colors
+========================
+
+The command ‘modus-themes-list-colors’ uses minibuffer completion to
+select an item from the Modus themes and then produces a buffer with
+previews of its color palette entries. The buffer has a naming scheme
+that reflects the given choice, like ‘modus-operandi-list-colors’ for
+the ‘modus-operandi’ theme.
+
+ The command ‘modus-themes-list-colors-current’ skips the minibuffer
+selection process and just produces a preview for the current Modus
+theme.
+
+ When called with a prefix argument (‘C-u’ with the default key
+bindings), these commands will show a preview of the palette’s semantic
+color mappings instead of the named colors. In this context, “named
+colors” are entries that associate a symbol to a string color value,
+such as ‘(blue-warmer "#354fcf")’. Whereas “semantic color mappings”
+associate a named color to a symbol, like ‘(string blue-warmer)’, thus
+making the theme render all string constructs in the ‘blue-warmer’ color
+value (*note Option for palette overrides: Palette overrides.).
+
+ Aliases for those commands are ‘modus-themes-preview-colors’ and
+‘modus-themes-preview-colors-current’.
+
+ Each row shows a foreground and background coloration using the
+underlying value it references. For example a line with ‘#a60000’ (a
+shade of red) will show red text followed by a stripe with that same
+color as a backdrop.
+
+ The name of the buffer describes the given Modus theme and what the
+contents are, such as ‘*modus-operandi-list-colors*’ for named colors
+and ‘=*modus-operandi-list-mappings*’ for the semantic color mappings.
+
+
+File: docGYh7V6.info, Node: Per-theme customization settings, Next: Get a single color from the palette, Prev: Preview theme colors, Up: Advanced customization
+
+5.6 Per-theme customization settings
+====================================
+
+If you prefer to maintain different customization options between the
+two themes, it is best you write your own functions that first set those
+options and then load the relevant theme. The following code does
+exactly that by simply differentiating the two themes on the choice of
+bold constructs in code syntax (enabled for one, disabled for the
+other).
+
+ (defun my-demo-modus-operandi ()
+ (interactive)
+ (setq modus-themes-bold-constructs t) ; ENABLE bold
+ (modus-themes-load-theme 'modus-operandi))
+
+ (defun my-demo-modus-vivendi ()
+ (interactive)
+ (setq modus-themes-bold-constructs nil) ; DISABLE bold
+ (modus-themes-load-theme 'modus-vivendi))
+
+ (defun my-demo-modus-themes-toggle ()
+ (if (eq (car custom-enabled-themes) 'modus-operandi)
+ (my-demo-modus-vivendi)
+ (my-demo-modus-operandi)))
+
+ Then assign ‘my-demo-modus-themes-toggle’ to a key instead of the
+equivalent the themes provide.
+
+ For a more elaborate design, it is better to inspect the source code
+of ‘modus-themes-toggle’ and relevant functions.
+
+
+File: docGYh7V6.info, Node: Get a single color from the palette, Next: Use theme colors in code with modus-themes-with-colors, Prev: Per-theme customization settings, Up: Advanced customization
+
+5.7 Get a single color from the palette
+=======================================
+
+*note Use theme colors in code with modus-themes-with-colors::.
+
+ The fuction ‘modus-themes-get-color-value’ can be called from Lisp to
+return the value of a color from the active Modus theme palette. It
+takea a ‘COLOR’ argument and an optional ‘OVERRIDES’.
+
+ ‘COLOR’ is a symbol that represents a named color entry in the
+palette.
+
+ *note Preview theme colors::.
+
+ If the value is the name of another color entry in the palette (so a
+mapping), this function recurs until it finds the underlying color
+value.
+
+ With an optional ‘OVERRIDES’ argument as a non-‘nil’ value, it
+accounts for palette overrides. Else it reads only the default palette.
+
+ *note Option for palette overrides: Palette overrides.
+
+ With optional ‘THEME’ as a symbol among ‘modus-themes-items’ (alias
+‘modus-themes-collection’), use the palette of that item. Else use the
+current Modus theme.
+
+ If ‘COLOR’ is not present in the palette, this function returns the
+‘unspecified’ symbol, which is safe when used as a face attribute’s
+value.
+
+ An example with ‘modus-operandi’ to show how this function behaves
+with/without overrides and when recursive mappings are introduced.
+
+ ;; 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 modus-themes-common-palette-overrides
+ '((cursor red)
+ (fg-mode-line-active cursor)
+ (border-mode-line-active fg-mode-line-active)))
+
+ ;; Ignore the overrides and get the original value.
+ (modus-themes-get-color-value 'border-mode-line-active)
+ ;; => "#5a5a5a"
+
+ ;; Read from the overrides and deal with any recursion to find the
+ ;; underlying value.
+ (modus-themes-get-color-value 'border-mode-line-active :overrides)
+ ;; => "#a60000"
+
+
+File: docGYh7V6.info, Node: Use theme colors in code with modus-themes-with-colors, Next: Do not extend the region background, Prev: Get a single color from the palette, Up: Advanced customization
+
+5.8 Use theme colors in code with modus-themes-with-colors
+==========================================================
+
+*note Get a single color from the palette::.
+
+ Note that users most probably do not need the following. Just rely
+on the comprehensive overrides we provide (*note Option for palette
+overrides: Palette overrides.).
+
+ Advanced users may want to apply colors from the palette of the
+active Modus theme in their custom code. The ‘modus-themes-with-colors’
+macro supplies those to any form called inside of it. For example:
+
+ (modus-themes-with-colors
+ (list blue-warmer magenta-cooler fg-added warning variable fg-heading-4))
+ ;; => ("#354fcf" "#531ab6" "#005000" "#884900" "#005e8b" "#721045")
+
+ The above return value is for ‘modus-operandi’ when that is the
+active theme. Switching to another theme and evaluating this code anew
+will give us the relevant results for that theme (remember that since
+version 4, the Modus themes consist of six items (*note Overview::)).
+The same with ‘modus-vivendi’ as the active theme:
+
+ (modus-themes-with-colors
+ (list blue-warmer magenta-cooler fg-added warning variable fg-heading-4))
+ ;; => ("#79a8ff" "#b6a0ff" "#a0e0a0" "#fec43f" "#00d3d0" "#feacd0")
+
+ The ‘modus-themes-with-colors’ has access to the whole palette of the
+active theme, meaning that it can instantiate both (i) named colors like
+‘blue-warmer’ and (ii) semantic color mappings like ‘warning’. We
+provide commands to inspect those (*note Preview theme colors::).
+
+ Others sections in this manual show how to use the aforementioned
+macro (*note Advanced customization::).
+
+ Because the ‘modus-themes-with-colors’ will most likely be used to
+customize faces, note that any function that calls it must be run at
+startup after the theme loads. The same function must also be assigned
+to the ‘modus-themes-after-load-theme-hook’ for its effects to persist
+and be updated when switching between Modus themes (e.g. to update the
+exact value of ‘blue-warmer’ when toggling between ‘modus-operandi’ to
+‘modus-vivendi’.
+
+
+File: docGYh7V6.info, Node: Do not extend the region background, Next: Add padding to mode line, Prev: Use theme colors in code with modus-themes-with-colors, Up: Advanced customization
+
+5.9 Do not extend the region background
+=======================================
+
+By the default, the background of the ‘region’ face extends from the end
+of the line to the edge of the window. To limit it to the end of the
+line, we need to override the face’s ‘:extend’ attribute. Adding this
+to the Emacs configuration file will suffice:
+
+ ;; Do not extend `region' background past the end of the line.
+ (custom-set-faces
+ '(region ((t :extend nil))))
+
+ *note Make the region preserve text colors, plus other styles: Make
+the region preserve text colors plus other styles.
+
+
+File: docGYh7V6.info, Node: Add padding to mode line, Next: Remap face with local value, Prev: Do not extend the region background, Up: Advanced customization
+
+5.10 Add padding to mode line
+=============================
+
+Emacs faces do not have a concept of “padding” for the space between the
+text and its box boundaries. We can approximate the effect by adding a
+‘:box’ attribute, making its border several pixels thick, and using the
+mode line’s background color for it. This way the thick border will not
+stand out and will appear as a continuation of the mode line.
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+ (defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Add "padding" to the mode lines
+ `(mode-line ((,c :box (:line-width 10 :color ,bg-mode-line-active))))
+ `(mode-line-inactive ((,c :box (:line-width 10 :color ,bg-mode-line-inactive)))))))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+
+ The above has the effect of removing the border around the mode
+lines. In older versions of the themes, we provided the option for a
+padded mode line which could also have borders around it. Those were
+not real border, however, but an underline and an overline. Adjusting
+the above:
+
+ (defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Add "padding" to the mode lines
+ `(mode-line ((,c :underline ,border-mode-line-active
+ :overline ,border-mode-line-active
+ :box (:line-width 10 :color ,bg-mode-line-active))))
+ `(mode-line-inactive ((,c :underline ,border-mode-line-inactive
+ :overline ,border-mode-line-inactive
+ :box (:line-width 10 :color ,bg-mode-line-inactive)))))))
+
+ ;; ESSENTIAL to make the underline move to the bottom of the box:
+ (setq x-underline-at-descent-line t)
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+
+ The reason we no longer provide this option is because it depends on
+a non-‘nil’ value for ‘x-underline-at-descent-line’. That variable
+affects ALL underlines, including those of links. The effect is
+intrusive and looks awkard in prose.
+
+ As such, the Modus themes no longer provide that option but instead
+offer this piece of documentation to make the user fully aware of the
+state of affairs.
+
+
+File: docGYh7V6.info, Node: Remap face with local value, Next: Font configurations for Org and others, Prev: Add padding to mode line, Up: Advanced customization
+
+5.11 Remap face with local value
+================================
+
+There are cases where we need to change the buffer-local attributes of a
+face. This might be because we have our own minor mode that re-uses a
+face for a particular purpose, such as a line selection tool that
+activates ‘hl-line-mode’, but we wish to keep it distinct from other
+buffers. This is where ‘face-remap-add-relative’ can be applied and may
+be combined with ‘modus-themes-with-colors’ to deliver consistent
+results.
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+ In this example we will write a simple interactive function that
+adjusts the background color of the ‘region’ face. This is the sample
+code:
+
+ (defvar my-rainbow-region-colors
+ (modus-themes-with-colors
+ `((red . ,bg-red-subtle)
+ (green . ,bg-green-subtle)
+ (yellow . ,bg-yellow-subtle)
+ (blue . ,bg-blue-subtle)
+ (magenta . ,bg-magenta-subtle)
+ (cyan . ,bg-cyan-subtle)))
+ "Sample list of color values for `my-rainbow-region'.")
+
+ (defun my-rainbow-region (color)
+ "Remap buffer-local attribute of `region' using COLOR."
+ (interactive
+ (list
+ (completing-read "Pick a color: " my-rainbow-region-colors)))
+ (face-remap-add-relative
+ 'region
+ `( :background ,(alist-get (intern color) my-rainbow-region-colors)
+ :foreground ,(face-attribute 'default :foreground))))
+
+ When ‘my-rainbow-region’ is called interactively, it prompts for a
+color to use. The list of candidates is drawn from the car of each
+association in ‘my-rainbow-region-colors’ (so “red”, “green”, etc.).
+
+ To extend this principle, we may write wrapper functions that pass a
+color directly. Those can be useful in tandem with hooks. Consider
+this example:
+
+ (defun my-rainbow-region-magenta ()
+ (my-rainbow-region 'magenta))
+
+ (add-hook 'diff-mode-hook #'my-rainbow-region-magenta)
+
+ Whenever we enter a ‘diff-mode’ buffer, we now get a magenta-colored
+region.
+
+ Perhaps you may wish to generalize those findings in to a set of
+functions that also accept an arbitrary face. We shall leave the
+experimentation up to you.
+
+
+File: docGYh7V6.info, Node: Font configurations for Org and others, Next: Configure bold and italic faces, Prev: Remap face with local value, Up: Advanced customization
+
+5.12 Font configurations for Org and others
+===========================================
+
+The themes are designed to optionally cope well with mixed font
+configurations. This mostly concerns ‘org-mode’ and ‘markdown-mode’,
+though expect to find it elsewhere like in ‘Info-mode’.
+
+ *note Option for font mixing: Mixed fonts.
+
+ In practice it means that the user can safely opt for a more
+prose-friendly proportionately spaced typeface as their default, while
+spacing-sensitive elements like tables and inline code always use a
+monospaced font, by inheriting from the ‘fixed-pitch’ face.
+
+ Users can try the built-in ‘M-x variable-pitch-mode’ to see the
+effect in action.
+
+ To make everything use your desired font families, you need to
+configure the ‘variable-pitch’ (proportional spacing) and ‘fixed-pitch’
+(monospaced) faces respectively. It may also be convenient to set your
+main typeface by configuring the ‘default’ face the same way.
+
+ [ The ‘fontaine’ package on GNU ELPA (by Protesilaos) is designed to
+handle this case. ]
+
+ Put something like this in your initialization file (also consider
+reading the doc string of ‘set-face-attribute’):
+
+ ;; Main typeface
+ (set-face-attribute 'default nil :family "DejaVu Sans Mono" :height 110)
+
+ ;; Proportionately spaced typeface
+ (set-face-attribute 'variable-pitch nil :family "DejaVu Serif" :height 1.0)
+
+ ;; Monospaced typeface
+ (set-face-attribute 'fixed-pitch nil :family "DejaVu Sans Mono" :height 1.5)
+
+ Or employ the ‘face-attribute’ function to read an existing value,
+such as if you want to make ‘fixed-pitch’ use the font family of the
+‘default’ face:
+
+ (set-face-attribute 'fixed-pitch nil :family (face-attribute 'default :family))
+
+ The next section shows how to make those work in a more elaborate
+setup that is robust to changes between the Modus themes.
+
+ *note Configure bold and italic faces::.
+
+ Note the differences in the ‘:height’ property. The ‘default’ face
+must specify an absolute value, which is the point size × 10. So if you
+want to use a font at point size ‘11’, you set the height to ‘110’.(1)
+Whereas every other face must either not specify a height or have a
+value that is relative to the default, represented as a floating point.
+If you use an integer, then that means an absolute height. This is of
+paramount importance: it ensures that all fonts can scale gracefully
+when using something like the ‘text-scale-adjust’ command which only
+operates on the base font size (i.e. the ‘default’ face’s absolute
+height).
+
+ *note Note for EWW and Elfeed fonts: Note on SHR fonts.
+
+ ---------- Footnotes ----------
+
+ (1) ‘:height’ values do not need to be rounded to multiples of ten:
+the likes of ‘115’ are perfectly valid—some typefaces will change to
+account for those finer increments.
+
+
+File: docGYh7V6.info, Node: Configure bold and italic faces, Next: Custom Org todo keyword and priority faces, Prev: Font configurations for Org and others, Up: Advanced customization
+
+5.13 Configure bold and italic faces
+====================================
+
+The Modus themes do not hardcode a ‘:weight’ or ‘:slant’ attribute in
+the thousands of faces they cover. Instead, they configure the generic
+faces called ‘bold’ and ‘italic’ to use the appropriate styles and then
+instruct all relevant faces that require emphasis to inherit from them.
+
+ This practically means that users can change the particularities of
+what it means for a construct to be bold/italic, by tweaking the ‘bold’
+and ‘italic’ faces. Cases where that can be useful include:
+
+ • The default typeface does not have a variant with slanted glyphs
+ (e.g. Fira Mono/Code as of this writing on 2021-07-07), so the
+ user wants to add another family for the italics, such as Hack.
+
+ • The typeface of choice provides a multitude of weights and the user
+ prefers the light one by default. To prevent the bold weight from
+ being too heavy compared to the light one, they opt to make ‘bold’
+ use a semibold weight.
+
+ • The typeface distinguishes between oblique and italic forms by
+ providing different font variants (the former are just slanted
+ versions of the upright forms, while the latter have distinguishing
+ features as well). In this case, the user wants to specify the
+ font that applies to the ‘italic’ face.
+
+ To achieve those effects, one must first be sure that the fonts they
+use have support for those features. It then is a matter of following
+the instructions for all typeface tweaks.
+
+ *note Font configurations for Org and others::.
+
+ In this example, we set the default font family to Fira Code, while
+we choose to render italics in the Hack typeface (obviously you need to
+pick fonts that work well together):
+
+ (set-face-attribute 'default nil :family "Fira Code" :height 110)
+ (set-face-attribute 'italic nil :family "Hack")
+
+ And here we play with different weights, using Source Code Pro:
+
+ (set-face-attribute 'default nil :family "Source Code Pro" :height 110 :weight 'light)
+ (set-face-attribute 'bold nil :weight 'semibold)
+
+ To reset the font family, one can use this:
+
+ (set-face-attribute 'italic nil :family 'unspecified)
+
+ To ensure that the effects persist after switching between the Modus
+themes (such as with ‘M-x modus-themes-toggle’), the user needs to write
+their configurations to a function and pass it to the
+‘modus-themes-after-load-theme-hook’. This is necessary because themes
+set the styles of faces upon activation, overriding prior values where
+conflicts occur between the previous and the current states (otherwise
+changing themes would not be possible).
+
+ *note A theme-agnostic hook for theme loading::.
+
+ This is a minimal setup to preserve font configurations across theme
+load phases. For a more permanent setup, it is better to rely on the
+‘custom-set-faces’ function: ‘set-face-attribute’ works just fine,
+though it probably is better suited for quick previews or for smaller
+scale operations (‘custom-set-faces’ follows the format used in the
+source code of the themes, which can make it easier to redefine faces in
+bulk).
+
+ ;; our generic function
+ (defun my-modes-themes-bold-italic-faces ()
+ (set-face-attribute 'default nil :family "Source Code Pro" :height 110)
+ (set-face-attribute 'bold nil :weight 'semibold))
+
+ ;; or use this if you configure a lot of face and attributes and
+ ;; especially if you plan to use `modus-themes-with-colors', as shown
+ ;; elsewhere in the manual
+ (defun my-modes-themes-bold-italic-faces ()
+ (custom-set-faces
+ '(default ((t :family "Source Code Pro" :height 110)))
+ '(bold ((t :weight semibold)))))
+
+ ;; and here is the hook
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modes-themes-bold-italic-faces)
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+
+File: docGYh7V6.info, Node: Custom Org todo keyword and priority faces, Next: Custom Org emphasis faces, Prev: Configure bold and italic faces, Up: Advanced customization
+
+5.14 Custom Org todo keyword and priority faces
+===============================================
+
+Users of ‘org-mode’ have the option to configure various keywords and
+priority cookies to better match their workflow. User options are
+‘org-todo-keyword-faces’ and ‘org-priority-faces’.
+
+ As those are meant to be custom faces, it is futile to have the
+themes guess what each user wants to use, which keywords to target, and
+so on. Instead, we can provide guidelines on how to customize things to
+one’s liking with the intent of retaining the overall aesthetic of the
+themes.
+
+ Please bear in mind that the end result of those is not controlled by
+the active Modus theme but by how Org maps faces to its constructs.
+Editing those while ‘org-mode’ is active requires re-initialization of
+the mode with ‘M-x org-mode-restart’ for changes to take effect.
+
+ Let us assume you wish to visually differentiate your keywords. You
+have something like this:
+
+ (setq org-todo-keywords
+ '((sequence "TODO(t)" "|" "DONE(D)" "CANCEL(C)")
+ (sequence "MEET(m)" "|" "MET(M)")
+ (sequence "STUDY(s)" "|" "STUDIED(S)")
+ (sequence "WRITE(w)" "|" "WROTE(W)")))
+
+ You could then use a variant of the following to inherit from a face
+that uses the styles you want and also to preserve the attributes
+applied by the ‘org-todo’ face (in case there is a difference between
+the two):
+
+ (setq org-todo-keyword-faces
+ '(("MEET" . (:inherit (bold org-todo)))
+ ("STUDY" . (:inherit (warning org-todo)))
+ ("WRITE" . (:inherit (shadow org-todo)))))
+
+ This will refashion the keywords you specify, while letting the other
+items in ‘org-todo-keywords’ use their original styles, which are
+defined in the ‘org-todo’ and ‘org-done’ faces.
+
+ If you want back the defaults, try specifying just the ‘org-todo’
+face:
+
+ (setq org-todo-keyword-faces
+ '(("MEET" . org-todo)
+ ("STUDY" . org-todo)
+ ("WRITE" . org-todo)))
+
+ Or set ‘org-todo-keyword-faces’ to ‘nil’.
+
+ When you inherit from multiple faces, you need to do it the way it is
+shown further above. The order is significant: the first entry is
+applied on top of the second, overriding any attributes that are
+explicitly set for both of them: any attribute that is not specified is
+not overridden, so, for example, if ‘org-todo’ has a background and a
+foreground, while ‘font-lock-type-face’ only has a foreground, the
+merged face will include the background of the former and the foreground
+of the latter. If you do not want to blend multiple faces, you only
+specify one by name without parentheses or an ‘:inherit’ keyword. A
+pattern of ‘keyword . face’ will suffice.
+
+ Both approaches can be used simultaneously, as illustrated in this
+configuration of the priority cookies:
+
+ (setq org-priority-faces
+ '((?A . (:inherit (bold org-priority)))
+ (?B . org-priority)
+ (?C . (:inherit (shadow org-priority)))))
+
+ To find all the faces that are loaded in your current Emacs session,
+use ‘M-x list-faces-display’. Try ‘M-x describe-variable’ as well and
+then specify the name of each of those Org variables demonstrated above.
+Their documentation strings will offer you further guidance.
+
+ Recall that the themes let you retrieve a color from their palette.
+Do it if you plan to control face attributes.
+
+ *note Check color combinations: Measure color contrast.
+
+
+File: docGYh7V6.info, Node: Custom Org emphasis faces, Next: Update Org block delimiter fontification, Prev: Custom Org todo keyword and priority faces, Up: Advanced customization
+
+5.15 Custom Org emphasis faces
+==============================
+
+Org provides the user option ‘org-emphasis-alist’ which associates a
+character with a face, list of faces, or face attributes. The default
+specification of that variable looks like this:
+
+ (setq org-emphasis-alist
+ '(("*" bold)
+ ("/" italic)
+ ("_" underline)
+ ("=" org-verbatim verbatim)
+ ("~" org-code verbatim)
+ ("+" (:strike-through t))))
+
+ With the exception of ‘org-verbatim’ and ‘org-code’ faces, everything
+else uses the corresponding type of emphasis: a bold typographic weight,
+or italicised, underlined, and struck through text.
+
+ The best way for users to add some extra attributes, such as a
+foreground color, is to define their own faces and assign them to the
+given emphasis marker/character.
+
+ This is a custom face that extends the standard ‘bold’ face with a
+red foreground value (so it colorises the text in addition to the bold
+weight):
+
+ (defface my-org-emphasis-bold
+ '((default :inherit bold)
+ (((class color) (min-colors 88) (background light))
+ :foreground "#a60000")
+ (((class color) (min-colors 88) (background dark))
+ :foreground "#ff8059"))
+ "My bold emphasis for Org.")
+
+ This face definition reads as follows:
+
+ • Always inherit the ‘bold’ face (*note Configure bold and italic
+ faces::).
+ • For versions of Emacs that support at least 88 colors (graphical
+ Emacs, for example) and use a light background, apply the ‘#a60000’
+ value.
+ • For the same kind of Emacs that has a dark background use the
+ ‘#ff8059’ color instead.
+
+ Same principle for how to extend ‘italic’ and ‘underline’ with, for
+example, green and yellow hues, respectively:
+
+ (defface my-org-emphasis-italic
+ '((default :inherit italic)
+ (((class color) (min-colors 88) (background light))
+ :foreground "#005e00")
+ (((class color) (min-colors 88) (background dark))
+ :foreground "#44bc44"))
+ "My italic emphasis for Org.")
+
+ (defface my-org-emphasis-underline
+ '((default :inherit underline)
+ (((class color) (min-colors 88) (background light))
+ :foreground "#813e00")
+ (((class color) (min-colors 88) (background dark))
+ :foreground "#d0bc00"))
+ "My underline emphasis for Org.")
+
+ In the case of a strike-through effect, we have no generic face to
+inherit from, so we can write it as follows to also change the
+foreground to a more subtle gray:
+
+ (defface my-org-emphasis-strike-through
+ '((default :strike-through t)
+ (((class color) (min-colors 88) (background light))
+ :foreground "#505050")
+ (((class color) (min-colors 88) (background dark))
+ :foreground "#a8a8a8"))
+ "My strike-through emphasis for Org.")
+
+ Or we can just change the color of the line that strikes through the
+text to, for example, a shade of red:
+
+ (defface my-org-emphasis-strike-through
+ '((((class color) (min-colors 88) (background light))
+ :strike-through "#972500")
+ (((class color) (min-colors 88) (background dark))
+ :strike-through "#ef8b50"))
+ "My strike-through emphasis for Org.")
+
+ It is possible to combine those effects:
+
+ (defface my-org-emphasis-strike-through
+ '((((class color) (min-colors 88) (background light))
+ :strike-through "#972500" :foreground "#505050")
+ (((class color) (min-colors 88) (background dark))
+ :strike-through "#ef8b50" :foreground "#a8a8a8"))
+ "My strike-through emphasis for Org.")
+
+ One may inspect the variables ‘modus-themes-operandi-colors’ and
+‘modus-themes-vivendi-colors’ for possible color values. Or call the
+command ‘modus-themes-list-colors’ to show a buffer that previews each
+entry in the palette.
+
+ *note Visualize the active Modus theme’s palette: Preview theme
+colors.
+
+ Once we have defined the faces we need, we must update the
+‘org-emphasis-alist’. Given that ‘org-verbatim’ and ‘org-code’ are
+already styled by the themes, it probably is best not to edit them:
+
+ (setq org-emphasis-alist
+ '(("*" my-org-emphasis-bold)
+ ("/" my-org-emphasis-italic)
+ ("_" my-org-emphasis-underline)
+ ("=" org-verbatim verbatim)
+ ("~" org-code verbatim)
+ ("+" my-org-emphasis-strike-through)))
+
+ That’s it! For changes to take effect in already visited Org files,
+invoke ‘M-x org-mode-restart’.
+
+
+File: docGYh7V6.info, Node: Update Org block delimiter fontification, Next: Measure color contrast, Prev: Custom Org emphasis faces, Up: Advanced customization
+
+5.16 Update Org block delimiter fontification
+=============================================
+
+As noted in the section about ‘modus-themes-org-blocks’, Org contains a
+variable that determines whether the block’s begin and end lines are
+extended to the edge of the window (*note Option for org-mode block
+styles: Org mode blocks.). The variable is
+‘org-fontify-whole-block-delimiter-line’.
+
+ Users who change the style of Org blocks from time to time may prefer
+to automatically update delimiter line fontification, such as with the
+following setup:
+
+ (defun my-modus-themes-org-fontify-block-delimiter-lines ()
+ "Match `org-fontify-whole-block-delimiter-line' to theme style.
+ Run this function at the post theme load phase, such as with the
+ `modus-themes-after-load-theme-hook'."
+ (if (eq modus-themes-org-blocks 'gray-background)
+ (setq org-fontify-whole-block-delimiter-line t)
+ (setq org-fontify-whole-block-delimiter-line nil)))
+
+ (add-hook 'modus-themes-after-load-theme-hook
+ #'my-modus-themes-org-fontify-block-delimiter-lines)
+
+ Then ‘M-x org-mode-restart’ for changes to take effect, though manual
+intervention can be circumvented by tweaking the function thus:
+
+ (defun my-modus-themes-org-fontify-block-delimiter-lines ()
+ "Match `org-fontify-whole-block-delimiter-line' to theme style.
+ Run this function at the post theme load phase, such as with the
+ `modus-themes-after-load-theme-hook'."
+ (if (eq modus-themes-org-blocks 'gray-background)
+ (setq org-fontify-whole-block-delimiter-line t)
+ (setq org-fontify-whole-block-delimiter-line nil))
+ (when (derived-mode-p 'org-mode)
+ (font-lock-flush)))
+
+
+File: docGYh7V6.info, Node: Measure color contrast, Next: Load theme depending on time of day, Prev: Update Org block delimiter fontification, Up: Advanced customization
+
+5.17 Measure color contrast
+===========================
+
+The themes provide the functions ‘modus-themes-wcag-formula’ and
+‘modus-themes-contrast’. The former is a direct implementation of the
+WCAG formula: <https://www.w3.org/TR/WCAG20-TECHS/G18.html>. It
+calculates the relative luminance of a color value that is expressed in
+hexadecimal RGB notation. While the latter function is just a
+convenient wrapper for comparing the relative luminance between two
+colors.
+
+ In practice, one needs to work only with ‘modus-themes-contrast’. It
+accepts two color values and returns their contrast ratio. Values range
+from 1 to 21 (lowest to highest). The themes are designed to always be
+equal or higher than 7 for each combination of background and foreground
+that they use (this is the WCAG AAA standard—the most demanding of its
+kind).
+
+ A couple of examples (rounded numbers):
+
+ ;; Pure white with pure green
+ (modus-themes-contrast "#ffffff" "#00ff00")
+ ;; => 1.37
+ ;; That is an outright inaccessible combo
+
+ ;; Pure black with pure green
+ (modus-themes-contrast "#000000" "#00ff00")
+ ;; => 15.3
+ ;; That is a highly accessible combo
+
+ It does not matter which color value comes first. The ratio is
+always the same.
+
+ If one does not wish to read all the decimal points, it is possible
+to try something like this:
+
+ (format "%0.2f" (modus-themes-contrast "#000000" "#00ff00"))
+
+ While it is fine to perform such calculations on a case-by-case
+basis, it is preferable to implement formulas and tables for more
+demanding tasks. Such instruments are provided by ‘org-mode’ or
+‘orgtbl-mode’, both of which are built into Emacs. Below is such a
+table that derives the contrast ratio of all colors in the first column
+(pure red, green, blue) relative to the color specified in the first row
+of the second column (pure white) and rounds the results:
+
+ | | #ffffff |
+ |---------+---------|
+ | #ff0000 | 4.00 |
+ | #00ff00 | 1.37 |
+ | #0000ff | 8.59 |
+ #+tblfm: $2='(modus-themes-contrast $1 @1$2);%0.2f
+
+ To measure color contrast one needs to start from a known value.
+This typically is the background. The Modus themes define an expanded
+palette in large part because certain colors are only meant to be used
+in combination with some others. Consult the source code for the
+minutia and relevant commentary.
+
+ Such knowledge may prove valuable while attempting to customize the
+theme’s color palette.
+
+
+File: docGYh7V6.info, Node: Load theme depending on time of day, Next: Backdrop for pdf-tools, Prev: Measure color contrast, Up: Advanced customization
+
+5.18 Load theme depending on time of day
+========================================
+
+While we do provide ‘modus-themes-toggle’ to manually switch between the
+themes, users may also set up their system to perform such a task
+automatically at sunrise and sunset.
+
+ This can be accomplished by specifying the coordinates of one’s
+location using the built-in ‘solar.el’ and then configuring the
+‘circadian’ package:
+
+ (use-package solar ; built-in
+ :config
+ (setq calendar-latitude 35.17
+ calendar-longitude 33.36))
+
+ (use-package circadian ; you need to install this
+ :ensure t
+ :after solar
+ :config
+ (setq circadian-themes '((:sunrise . modus-operandi)
+ (:sunset . modus-vivendi)))
+ (circadian-setup))
+
+
+File: docGYh7V6.info, Node: Backdrop for pdf-tools, Next: Toggle themes without reloading them, Prev: Load theme depending on time of day, Up: Advanced customization
+
+5.19 Backdrop for pdf-tools
+===========================
+
+Most PDF files use a white background for their page, making it
+impossible to discern the file’s boundaries in the buffer while using
+the Modus Operandi theme. To introduce a distinction between the
+buffer’s backdrop and the PDF page’s background, the former must be
+rendered as some shade of gray. Ideally, ‘pdf-tools’ would provide a
+face that the themes could support directly, though this does not seem
+to be the case for the time being. We must thus employ the face
+remapping technique that is documented elsewhere in this document to
+change the buffer-local value of the ‘default’ face.
+
+ *note Remap face with local value::.
+
+ To remap the buffer’s backdrop, we start with a function like this
+one:
+
+ (defun my-pdf-tools-backdrop ()
+ (modus-themes-with-colors
+ (face-remap-add-relative
+ 'default
+ `(:background ,bg-dim))))
+
+ (add-hook 'pdf-tools-enabled-hook #'my-pdf-tools-backdrop)
+
+ The idea is to assign that function to a hook that gets called when
+‘pdf-tools’ renders the document: ‘pdf-tools-enabled-hook’. This is
+enough when you only use one theme. However it has the downside of
+setting the background color value only at render time. In other words,
+the face remapping function does not get evaluated anew whenever the
+theme changes, such as upon invoking ‘M-x modus-themes-toggle’.
+
+ To have our face remapping adapt gracefully while switching between
+the Modus themes, we need to also account for the current theme and
+control the activation of ‘pdf-view-midnight-minor-mode’. To which end
+we arrive at something like the following, which builds on the above
+example:
+
+ (defun my-pdf-tools-backdrop ()
+ (modus-themes-with-colors
+ (face-remap-add-relative
+ 'default
+ `(:background ,bg-dim))))
+
+ (defun my-pdf-tools-midnight-mode-toggle ()
+ (when (derived-mode-p 'pdf-view-mode)
+ (if (eq (car custom-enabled-themes) 'modus-vivendi)
+ (pdf-view-midnight-minor-mode 1)
+ (pdf-view-midnight-minor-mode -1))
+ (my-pdf-tools-backdrop)))
+
+ (defun my-pdf-tools-themes-toggle ()
+ (mapc
+ (lambda (buf)
+ (with-current-buffer buf
+ (my-pdf-tools-midnight-mode-toggle)))
+ (buffer-list)))
+
+ (add-hook 'pdf-tools-enabled-hook #'my-pdf-tools-midnight-mode-toggle)
+ (add-hook 'modus-themes-after-load-theme-hook #'my-pdf-tools-themes-toggle)
+
+ With those in place, PDFs have a distinct backdrop for their page,
+while buffers with major-mode as ‘pdf-view-mode’ automatically switches
+to dark mode when ‘modus-themes-toggle’ is called.
+
+
+File: docGYh7V6.info, Node: Toggle themes without reloading them, Next: A theme-agnostic hook for theme loading, Prev: Backdrop for pdf-tools, Up: Advanced customization
+
+5.20 Toggle themes without reloading them
+=========================================
+
+Users who have a stable setup and who only ever need to toggle between
+the themes without triggering a full reload, are better off defining
+their own command which calls ‘enable-theme’ instead of ‘load-theme’:
+
+ (defun my-modus-themes-toggle ()
+ "Toggle between `modus-operandi' and `modus-vivendi' themes.
+ This uses `enable-theme' instead of the standard method of
+ `load-theme'. The technicalities are covered in the Modus themes
+ manual."
+ (interactive)
+ (pcase (modus-themes--current-theme)
+ ('modus-operandi (progn (enable-theme 'modus-vivendi)
+ (disable-theme 'modus-operandi)))
+ ('modus-vivendi (progn (enable-theme 'modus-operandi)
+ (disable-theme 'modus-vivendi)))
+ (_ (error "No Modus theme is loaded; evaluate `modus-themes-load-themes' first"))))
+
+ *note Differences between loading and enabling::.
+
+ Recall that ‘modus-themes-toggle’ uses ‘load-theme’.
+
+
+File: docGYh7V6.info, Node: A theme-agnostic hook for theme loading, Next: Use more spacious margins or padding in Emacs frames, Prev: Toggle themes without reloading them, Up: Advanced customization
+
+5.21 A theme-agnostic hook for theme loading
+============================================
+
+The themes are designed with the intent to be useful to Emacs users of
+varying skill levels, from beginners to experts. This means that we try
+to make things easier by not expecting anyone reading this document to
+be proficient in Emacs Lisp or programming in general.
+
+ Such a case is with the use of ‘modus-themes-after-load-theme-hook’,
+which runs after the ‘modus-themes-load-theme’ function (used by the
+command ‘modus-themes-toggle’). We recommend using that hook for
+advanced customizations, because (1) we know for sure that it is
+available once the themes are loaded, and (2) anyone consulting this
+manual, especially the sections on enabling and loading the themes, will
+be in a good position to benefit from that hook.
+
+ Advanced users who have a need to switch between the Modus themes and
+other items will find that such a hook does not meet their requirements:
+it only works with the Modus themes and only with the aforementioned
+functions.
+
+ A theme-agnostic setup can be configured thus:
+
+ (defvar after-enable-theme-hook nil
+ "Normal hook run after enabling a theme.")
+
+ (defun run-after-enable-theme-hook (&rest _args)
+ "Run `after-enable-theme-hook'."
+ (run-hooks 'after-enable-theme-hook))
+
+ (advice-add 'enable-theme :after #'run-after-enable-theme-hook)
+
+ This creates the ‘after-enable-theme-hook’ and makes it run after
+each call to ‘enable-theme’, which means that it will work for all
+themes and also has the benefit that it does not depend on functions
+such as ‘modus-themes-toggle’ and the others mentioned above.
+‘enable-theme’ is called internally by ‘load-theme’, so the hook works
+everywhere.
+
+ The downside of the theme-agnostic hook is that any functions added
+to it will likely not be able to benefit from macro calls that read the
+active theme, such as ‘modus-themes-with-colors’. Not all Emacs themes
+have the same capabilities.
+
+ In this document, we cover ‘modus-themes-after-load-theme-hook’
+though the user can replace it with ‘after-enable-theme-hook’ should
+they need to (provided they understand the implications).
+
+
+File: docGYh7V6.info, Node: Use more spacious margins or padding in Emacs frames, Next: Custom hl-todo colors, Prev: A theme-agnostic hook for theme loading, Up: Advanced customization
+
+5.22 Use more spacious margins or padding in Emacs frames
+=========================================================
+
+[ UPDATE 2023-06-25: Instead of following these instructions, you can
+simply install my ‘spacious-padding’ package from GNU ELPA. It
+implements the padding and provides relevant user options. ]
+
+ By default, Emacs frames try to maximize the number of characters
+that fit in the current visible portion of the buffer. Users may prefer
+to have some extra padding instead. This can make Emacs frames look
+more pleasant, but also make it easier to identify the currently active
+window.
+
+ The way to implement such padding is two-fold:
+
+ 1. In the ‘early-init.el’ file instruct Emacs to use a higher value
+ for the ‘internal-border-width’ of all frames, as well as for the
+ ‘right-divider-width’. The former concerns the outer boundaries of
+ Emacs frames, while the latter pertains to dividers between Emacs
+ windows.
+
+ 2. Make the relevant faces invisible by changing the value of their
+ relevant attributes to that of the current theme’s main background.
+
+ The parameters of Emacs frames are specified in the variables
+‘initial-frame-alist’ and ‘default-frame-alist’. The “initial frame”
+refers to the first frame that appears on Emacs startup. The “default”
+refers to the fallback values that apply to all other frames that Emacs
+creates (unless those are explicitly overridden by a bespoke
+‘make-frame’ call).
+
+ In detail, first we use the same values for the two frame alist
+variables:
+
+ ;; This must go in the early-init.el so that it applies to the initial
+ ;; frame.
+ (dolist (var '(default-frame-alist initial-frame-alist))
+ (add-to-list var '(right-divider-width . 20))
+ (add-to-list var '(internal-border-width . 20)))
+
+ What the ‘dolist’ does is to call ‘add-to-list’ for the two variables
+we specify there. This economizes on typing.
+
+ Then we define a function that makes the relevant faces invisible.
+The reason we do this with a function is so we can hook it to the “post
+load” phase of a theme, thus applying the new background value
+(otherwise you keep the old background, which likely means that the
+faces will no longer be invisible).
+
+ (defun my-modus-themes-invisible-dividers ()
+ "Make window dividers invisible.
+ Add this to the `modus-themes-post-load-hook'."
+ (let ((bg (face-background 'default)))
+ (custom-set-faces
+ `(fringe ((t :background ,bg :foreground ,bg)))
+ `(window-divider ((t :background ,bg :foreground ,bg)))
+ `(window-divider-first-pixel ((t :background ,bg :foreground ,bg)))
+ `(window-divider-last-pixel ((t :background ,bg :foreground ,bg))))))
+
+ (add-hook 'modus-themes-post-load-hook #'my-modus-themes-invisible-dividers)
+
+ The above will work only for themes that belong to the Modus family.
+For users of Emacs version 29 or higher, there exists a theme-agnostic
+hook that takes a function with one argument—that of the theme—and calls
+in the the “post enable” phase of theme loading. Here is the above
+snippet, with the necessary tweaks:
+
+ (defun my-modus-themes-invisible-dividers (_theme)
+ "Make window dividers for THEME invisible."
+ (let ((bg (face-background 'default)))
+ (custom-set-faces
+ `(fringe ((t :background ,bg :foreground ,bg)))
+ `(window-divider ((t :background ,bg :foreground ,bg)))
+ `(window-divider-first-pixel ((t :background ,bg :foreground ,bg)))
+ `(window-divider-last-pixel ((t :background ,bg :foreground ,bg))))))
+
+ (add-hook 'enable-theme-functions #'my-modus-themes-invisible-dividers)
+
+ Users of older versions of Emacs can read the entry herein about
+defining their own theme-agnostic hook (*note A theme-agnostic hook for
+theme loading::).
+
+
+File: docGYh7V6.info, Node: Custom hl-todo colors, Next: Add support for solaire-mode, Prev: Use more spacious margins or padding in Emacs frames, Up: Advanced customization
+
+5.23 Custom hl-todo colors
+==========================
+
+The ‘hl-todo’ package provides the user option ‘hl-todo-keyword-faces’:
+it specifies a pair of keyword and corresponding color value. The Modus
+themes configure that option in the interest of legibility. While this
+works for our purposes, users may still prefer to apply their custom
+values, in which case the following approach is necessary:
+
+ (defun my-modus-themes-hl-todo-faces ()
+ (setq hl-todo-keyword-faces '(("TODO" . "#ff0000")
+ ("HACK" . "#ffff00")
+ ("XXX" . "#00ffff")
+ ("NOTE" . "#ff00ff"))))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-hl-todo-faces)
+
+ Or include a ‘let’ form, if needed:
+
+ (defun my-modus-themes-hl-todo-faces ()
+ (let ((red "#ff0000")
+ (blue "#0000ff"))
+ (setq hl-todo-keyword-faces `(("TODO" . ,blue)
+ ("HACK" . ,red)
+ ("XXX" . ,red)
+ ("NOTE" . ,blue)))))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-hl-todo-faces)
+
+ Normally, we do not touch user options, though this is an exception:
+otherwise the defaults are not always legible.
+
+
+File: docGYh7V6.info, Node: Add support for solaire-mode, Prev: Custom hl-todo colors, Up: Advanced customization
+
+5.24 Add support for solaire-mode
+=================================
+
+The ‘solaire-mode’ package dims the background of what it considers
+ancillary “UI” buffers, such as the minibuffer and Dired buffers. The
+Modus themes used to support Solaire on the premise that the user was
+(i) opting in to it, (ii) understood why certain buffers were more gray,
+and (iii) knew what other adjustments had to be made to prevent broken
+visuals (e.g. the default style of the ‘modus-themes-completions’ uses
+a subtle gray background for the selection, which with Solaire becomes
+practically invisible).
+
+ However, the assumption that users opt in to this feature does not
+always hold true. There are cases where it is enabled by defaultsuch as
+in the popular Doom Emacs configuration. Thus, the unsuspecting user
+who loads ‘modus-operandi’ or ‘modus-vivendi’ without the requisite
+customizations is getting a sub-par experience; an experience that we
+did not intend and cannot genuinely fix.
+
+ Because the Modus themes are meant to work everywhere, we cannot make
+an exception for Doom Emacs and/or Solaire users. Furthermore, we shall
+not introduce hacks, such as by adding a check in all relevant faces to
+be adjusted based on Solaire or whatever other package. Hacks of this
+sort are unsustainable and penalize the entire userbase. Besides, the
+themes are built into Emacs and we must keep their standard high.
+
+ The fundamental constraint with Solaire is that Emacs does not have a
+real distinction between “content” and “UI” buffers. For themes to work
+with Solaire, they need to be designed around that package. Such is an
+arrangement that compromises on our accessibility standards and/or
+hinders our efforts to provide the best possible experience while using
+the Modus themes.
+
+ As such, ‘solaire-mode’ is not—and will not be—supported by the Modus
+themes (or any other of my themes, for that matter). Users who want it
+must style the faces manually. Below is some sample code, based on what
+we cover at length elsewhere in this manual:
+
+ *note Advanced customization::.
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+ (defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ `(solaire-default-face ((,c :inherit default :background ,bg-dim :foreground ,fg-dim)))
+ `(solaire-line-number-face ((,c :inherit solaire-default-face :foreground ,fg-unfocused)))
+ `(solaire-hl-line-face ((,c :background ,bg-active)))
+ `(solaire-org-hide-face ((,c :background ,bg-dim :foreground ,bg-dim))))))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+
+ As always, re-load the theme for changes to take effect.
+
+
+File: docGYh7V6.info, Node: Face coverage, Next: Notes on individual packages, Prev: Advanced customization, Up: Top
+
+6 Face coverage
+***************
+
+The Modus themes try to provide as close to full face coverage as
+possible. This is necessary to ensure a consistently accessible reading
+experience across all available interfaces.
+
+* Menu:
+
+* Supported packages:: Full list of covered face groups
+* Indirectly covered packages::
+
+
+File: docGYh7V6.info, Node: Supported packages, Next: Indirectly covered packages, Up: Face coverage
+
+6.1 Full support for packages or face groups
+============================================
+
+This list will always be updated to reflect the current state of the
+project. The idea is to offer an overview of the known status of all
+affected face groups. The items with an appended asterisk ‘*’ tend to
+have lots of extensions, so the “full support” may not be 100% true…
+
+ • ace-window
+ • agda2-mode
+ • all-the-icons
+ • all-the-icons-dired
+ • all-the-icons-ibuffer
+ • annotate
+ • ansi-color
+ • anzu
+ • auctex and TeX
+ • auto-dim-other-buffers
+ • avy
+ • bbdb
+ • binder
+ • breadcrumb
+ • bongo
+ • boon
+ • bookmark
+ • calendar and diary
+ • centaur-tabs
+ • change-log and log-view (such as ‘vc-print-log’,
+ ‘vc-print-root-log’)
+ • chart
+ • cider
+ • circe
+ • citar
+ • clojure-mode
+ • column-enforce-mode
+ • company-mode*
+ • compilation-mode
+ • completions
+ • consult
+ • corfu
+ • corfu-candidate-overlay
+ • corfu-quick
+ • counsel*
+ • cperl-mode
+ • crontab-mode
+ • csv-mode
+ • ctrlf
+ • custom (what you get with ‘M-x customize’)
+ • dashboard
+ • deadgrep
+ • deft
+ • devdocs
+ • dictionary
+ • diff-hl
+ • diff-mode
+ • dim-autoload
+ • dired
+ • dired-async
+ • dired-git
+ • dired-git-info
+ • dired-narrow
+ • dired-subtree
+ • diredfl
+ • disk-usage
+ • display-fill-column-indicator-mode
+ • doom-modeline
+ • ediff
+ • ein (Emacs IPython Notebook)
+ • eglot
+ • el-search
+ • eldoc-box
+ • elfeed
+ • elfeed-score
+ • elpher
+ • embark
+ • ement
+ • emms
+ • enh-ruby-mode (enhanced-ruby-mode)
+ • epa
+ • erc
+ • ert
+ • erts-mode
+ • eshell
+ • eshell-fringe-status
+ • evil* (evil-mode)
+ • eww
+ • exwm
+ • eyebrowse
+ • flycheck
+ • flycheck-color-mode-line
+ • flycheck-indicator
+ • flymake
+ • flyspell
+ • flx
+ • focus
+ • fold-this
+ • font-lock (generic syntax highlighting)
+ • geiser
+ • git-commit
+ • git-gutter (and variants)
+ • git-rebase
+ • git-timemachine
+ • gnus
+ • gotest
+ • golden-ratio-scroll-screen
+ • helpful
+ • highlight-numbers
+ • highlight-parentheses (*note Note on highlight-parentheses.el: Note
+ on highlight-parenthesesel.)
+ • highlight-thing
+ • hl-fill-column
+ • hl-line-mode
+ • hl-todo
+ • hydra
+ • ibuffer
+ • icomplete
+ • ido-mode
+ • iedit
+ • iflipb
+ • image-dired
+ • imenu-list
+ • indium
+ • info
+ • info+ (info-plus)
+ • info-colors
+ • ioccur
+ • isearch, occur, etc.
+ • ivy*
+ • ivy-posframe
+ • japanese-holidays
+ • jira (org-jira)
+ • jit-spell
+ • jinx
+ • journalctl-mode
+ • js2-mode
+ • julia
+ • kaocha-runner
+ • keycast
+ • ledger-mode
+ • leerzeichen
+ • line numbers (‘display-line-numbers-mode’ and global variant)
+ • magit
+ • make-mode
+ • man
+ • marginalia
+ • markdown-mode
+ • markup-faces (‘adoc-mode’)
+ • messages
+ • minimap
+ • mode-line
+ • mood-line
+ • mpdel
+ • mu4e
+ • multiple-cursors
+ • nerd-icons
+ • nerd-icons-completion
+ • nerd-icons-dired
+ • nerd-icons-ibuffer
+ • neotree
+ • notmuch
+ • num3-mode
+ • nxml-mode
+ • olivetti
+ • orderless
+ • org*
+ • org-journal
+ • org-noter
+ • org-pomodoro
+ • org-recur
+ • org-roam
+ • org-superstar
+ • org-table-sticky-header
+ • org-tree-slide
+ • origami
+ • outline-mode
+ • outline-minor-faces
+ • package (what you get with ‘M-x list-packages’)
+ • page-break-lines
+ • pandoc-mode
+ • paren-face
+ • pass
+ • pdf-tools
+ • persp-mode
+ • perspective
+ • popup
+ • powerline
+ • prism (*note Note for prism.el: Note for prism.)
+ • prescient
+ • proced
+ • prodigy
+ • pulse
+ • pyim
+ • quick-peek
+ • rainbow-delimiters
+ • rcirc
+ • rcirc-color
+ • recursion-indicator
+ • regexp-builder (also known as ‘re-builder’)
+ • rg (rg.el)
+ • ripgrep
+ • rmail
+ • rst-mode
+ • ruler-mode
+ • sesman
+ • shell-script-mode
+ • shortdoc
+ • show-paren-mode
+ • shr
+ • side-notes
+ • sieve-mode
+ • skewer-mode
+ • slime (slbd)
+ • sly
+ • smart-mode-line
+ • smerge
+ • speedbar
+ • spell-fu
+ • stripes
+ • suggest
+ • switch-window
+ • swiper
+ • symbol-overlay
+ • syslog-mode
+ • tab-bar-mode
+ • tab-line-mode
+ • table (built-in ‘table.el’)
+ • telega
+ • terraform-mode
+ • term
+ • textsec
+ • transient (pop-up windows such as Magit’s)
+ • trashed
+ • tree-sitter
+ • tty-menu
+ • tuareg
+ • typescript
+ • undo-tree
+ • vc (‘vc-dir.el’, ‘vc-hooks.el’)
+ • vertico
+ • vertico-quick
+ • vimish-fold
+ • visible-mark
+ • visual-regexp
+ • vterm
+ • vundo
+ • wcheck-mode
+ • web-mode
+ • wgrep
+ • which-function-mode
+ • which-key
+ • whitespace-mode
+ • window-divider-mode
+ • writegood-mode
+ • woman
+ • xah-elisp-mode
+ • xterm-color (and ansi-colors)
+ • yaml-mode
+ • yasnippet
+
+ Plus many other miscellaneous faces that are provided by Emacs.
+
+
+File: docGYh7V6.info, Node: Indirectly covered packages, Prev: Supported packages, Up: Face coverage
+
+6.2 Indirectly covered packages
+===============================
+
+These do not require any extra styles because they are configured to
+inherit from some basic faces or their dependencies which are directly
+supported by the themes.
+
+ • ag
+ • apropos
+ • apt-sources-list
+ • bbdb
+ • bm
+ • breakpoint (provided by the built-in ‘gdb-mi.el’ library)
+ • buffer-expose
+ • bufler
+ • counsel-notmuch
+ • counsel-org-capture-string
+ • css-mode
+ • dashboard (emacs-dashboard)
+ • define-word
+ • denote
+ • disk-usage
+ • dtache
+ • dynamic-ruler
+ • easy-kill
+ • ebdb
+ • edit-indirect
+ • egerrit
+ • elfeed-summary
+ • evil-owl
+ • flyspell-correct
+ • fortran-mode
+ • freeze-it
+ • forge
+ • git-walktree
+ • goggles
+ • highlight-defined
+ • highlight-escape-sequences (‘hes-mode’)
+ • icomplete-vertical
+ • i3wm-config-mode
+ • lin
+ • minibuffer-line
+ • no-emoji
+ • org-remark
+ • parrot
+ • perl-mode
+ • php-mode
+ • pulsar
+ • rjsx-mode
+ • side-hustle
+ • spell-fu
+ • swift-mode
+ • tab-bar-echo-area
+ • tide
+ • undo-hl
+ • vdiff
+ • vertico-indexed
+ • vertico-mouse
+ • xref
+
+
+File: docGYh7V6.info, Node: Notes on individual packages, Next: Frequently Asked Questions, Prev: Face coverage, Up: Top
+
+7 Notes on individual packages
+******************************
+
+This section covers information that may be of interest to users of
+individual packages.
+
+* Menu:
+
+* Note on calendar.el weekday and weekend colors: Note on calendarel weekday and weekend colors.
+* Note on git-gutter in Doom Emacs::
+* Note on php-mode multiline comments::
+* Note on underlines in compilation buffers::
+* Note on inline Latex in Org buffers::
+* Note on dimmer.el: Note on dimmerel.
+* Note on display-fill-column-indicator-mode::
+* Note on highlight-parentheses.el: Note on highlight-parenthesesel.
+* Note on mmm-mode.el background colors: Note on mmm-modeel background colors.
+* Note for prism::
+* Note on company-mode overlay pop-up::
+* Note on ERC escaped color sequences::
+* Note on powerline or spaceline::
+* Note on SHR colors::
+* Note on SHR fonts::
+* Note on Ement colors and fonts::
+* Note on pdf-tools link hints::
+* Note on the Notmuch logo::
+* Note on goto-address-mode faces::
+
+
+File: docGYh7V6.info, Node: Note on calendarel weekday and weekend colors, Next: Note on git-gutter in Doom Emacs, Up: Notes on individual packages
+
+7.1 Note on calendar.el weekday and weekend colors
+==================================================
+
+By default, the ‘M-x calendar’ interface differentiates weekdays from
+weekends by applying a gray color to the former and a faint red to the
+latter. The idea for this approach is that the weekend should serve as
+a subtle warning that no work is supposed to be done on that day, per
+the design of traditional calendars.
+
+ Users who prefer all days to look the same can configure the variable
+‘calendar-weekend-days’ to either use gray of weekdays or the faint red
+of weekends uniformly.
+
+ ;; All are treated like weekdays (gray color)
+ (setq calendar-weekend-days nil)
+
+ ;; All are treated like weekends (red-faint color)
+ (setq calendar-weekend-days (number-sequence 0 6))
+
+ ;; The default marks the Saturday and Sunday as the weekend
+ (setq calendar-weekend-days '(0 6))
+
+ For changes to take effect, the Calendar buffer needs to be generated
+anew.
+
+
+File: docGYh7V6.info, Node: Note on git-gutter in Doom Emacs, Next: Note on php-mode multiline comments, Prev: Note on calendarel weekday and weekend colors, Up: Notes on individual packages
+
+7.2 Note on git-gutter in Doom Emacs
+====================================
+
+The ‘git-gutter’ and ‘git-gutter-fr’ packages default to drawing bitmaps
+for the indicators they display (e.g. bitmap of a plus sign for added
+lines). In Doom Emacs, these bitmaps are replaced with contiguous lines
+which may look nicer, but require a change to the foreground of the
+relevant faces to yield the desired color combinations.
+
+ Since this is Doom-specific, we urge users to apply changes in their
+local setup. Below is some sample code, based on what we cover at
+length elsewhere in this manual:
+
+ *note Advanced customization::.
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+ (defun my-modus-themes-custom-faces ()
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Make foreground the same as background for a uniform bar on
+ ;; Doom Emacs.
+ ;;
+ ;; Doom should not be implementing such hacks because themes
+ ;; cannot support them:
+ ;; <https://protesilaos.com/codelog/2022-08-04-doom-git-gutter-modus-themes/>.
+ `(git-gutter-fr:added ((,c :foreground ,bg-added-fringe)))
+ `(git-gutter-fr:deleted ((,c :foreground ,bg-removed-fringe)))
+ `(git-gutter-fr:modified ((,c :foreground ,bg-changed-fringe))))))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+
+ As always, re-load the theme for changes to take effect.
+
+ If the above does not work, try this instead:
+
+ (after! modus-themes
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Make foreground the same as background for a uniform bar on
+ ;; Doom Emacs.
+ ;;
+ ;; Doom should not be implementing such hacks because themes
+ ;; cannot support them:
+ ;; <https://protesilaos.com/codelog/2022-08-04-doom-git-gutter-modus-themes/>.
+ `(git-gutter-fr:added ((,c :foreground ,bg-added-intense)))
+ `(git-gutter-fr:deleted ((,c :foreground ,bg-removed-intense)))
+ `(git-gutter-fr:modified ((,c :foreground ,bg-changed-intense))))))
+
+
+File: docGYh7V6.info, Node: Note on php-mode multiline comments, Next: Note on underlines in compilation buffers, Prev: Note on git-gutter in Doom Emacs, Up: Notes on individual packages
+
+7.3 Note on php-mode multiline comments
+=======================================
+
+Depending on your build of Emacs and/or the environment it runs in,
+multiline comments in PHP with the ‘php-mode’ package use the
+‘font-lock-doc-face’ instead of ‘font-lock-comment-face’.
+
+ This seems to make all comments use the appropriate face:
+
+ (defun my-multine-comments ()
+ (setq-local c-doc-face-name 'font-lock-comment-face))
+
+ (add-hook 'php-mode-hook #'my-multine-comments)
+
+ As always, re-load the theme for changes to take effect.
+
+
+File: docGYh7V6.info, Node: Note on underlines in compilation buffers, Next: Note on inline Latex in Org buffers, Prev: Note on php-mode multiline comments, Up: Notes on individual packages
+
+7.4 Note on underlines in compilation buffers
+=============================================
+
+Various buffers that produce compilation results or run tests on code
+apply an underline to the file names they reference or to relevant
+messages. Users may consider this unnecessary or excessive.
+
+ To outright disable the effect, use this (buffers need to be
+generated anew):
+
+ (setq compilation-message-face nil)
+
+ If some element of differentiation is still desired, a good option is
+to render the affected text with the ‘italic’ face:
+
+ (setq compilation-message-face 'italic)
+
+ *note Configure bold and italic faces::.
+
+
+File: docGYh7V6.info, Node: Note on inline Latex in Org buffers, Next: Note on dimmerel, Prev: Note on underlines in compilation buffers, Up: Notes on individual packages
+
+7.5 Note on inline Latex in Org buffers
+=======================================
+
+Org can work with inline latex and related syntax. To actually fontify
+those constructs, set the variable ‘org-highlight-latex-and-related’ to
+the desired list of values (per its doc string). For example:
+
+ (setq org-highlight-latex-and-related '(latex script))
+
+ Remember to use ‘M-x org-mode-restart’ for changes to take effect.
+
+
+File: docGYh7V6.info, Node: Note on dimmerel, Next: Note on display-fill-column-indicator-mode, Prev: Note on inline Latex in Org buffers, Up: Notes on individual packages
+
+7.6 Note on dimmer.el
+=====================
+
+The ‘dimmer.el’ library by Neil Okamoto can be configured to
+automatically dim the colors of inactive Emacs windows. To guarantee
+consistent results with the Modus themes, we suggest some tweaks to the
+default styles, such as in this minimal setup:
+
+ (use-package dimmer
+ :config
+ (setq dimmer-fraction 0.3)
+ (setq dimmer-adjustment-mode :foreground)
+ (setq dimmer-use-colorspace :rgb)
+
+ (dimmer-mode 1))
+
+ Of the above, we strongly recommend the RGB color space because it is
+the one that remains faithful to the hueness of the colors used by the
+themes. Whereas the default CIELAB space has a tendency to distort
+colors in addition to applying the dim effect, which can be somewhat
+disorienting.
+
+ The value of the ‘dimmer-fraction’ has been selected empirically.
+Users might prefer to tweak it further (increasing it makes the dim
+effect more pronounced).
+
+ Changing the ‘dimmer-adjustment-mode’ is a matter of preference.
+Though because the Modus themes use black and white as their base
+colors, any other value for that variable will turn the main background
+gray. This inadvertently leads to the opposite of the intended utility
+of this package: it draws too much attention to unfocused windows.
+
+
+File: docGYh7V6.info, Node: Note on display-fill-column-indicator-mode, Next: Note on highlight-parenthesesel, Prev: Note on dimmerel, Up: Notes on individual packages
+
+7.7 Note on display-fill-column-indicator-mode
+==============================================
+
+The ‘display-fill-column-indicator-mode’ uses a typographic character to
+draw its line. This has the downside of creating a dashed line. The
+dashes are further apart depending on how tall the font’s glyph height
+is and what integer the ‘line-spacing’ is set to.
+
+ At the theme level we eliminate this effect by making the character
+one pixel tall: the line is contiguous. Users who prefer the dashed
+line are advised to change the ‘fill-column-indicator’ face, as
+explained elsewhere in this document. For example:
+
+ (modus-themes-with-colors
+ (custom-set-faces
+ `(fill-column-indicator ((,c :foreground ,bg-active)))))
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+ To make the line thicker, set the height to be equal to the base font
+size instead of the one pixel we use. This is done by specifying a rate
+instead of an absolute number, as in ‘:height 1.0’ versus ‘:height 1’.
+For example:
+
+ (modus-themes-with-colors
+ (custom-set-faces
+ `(fill-column-indicator ((,c :height 1.0 :background ,bg-inactive :foreground ,bg-inactive)))))
+
+
+File: docGYh7V6.info, Node: Note on highlight-parenthesesel, Next: Note on mmm-modeel background colors, Prev: Note on display-fill-column-indicator-mode, Up: Notes on individual packages
+
+7.8 Note on highlight-parentheses.el
+====================================
+
+The ‘highlight-parentheses’ package provides contextual coloration of
+surrounding parentheses, highlighting only those which are around the
+point. The package expects users to customize the applicable colors on
+their own by configuring certain variables.
+
+ To make the Modus themes work as expected with this, we need to use
+some of the techniques that are discussed at length in the various
+“Do-It-Yourself” (DIY) sections, which provide insight into the more
+advanced customization options of the themes.
+
+ *note Advanced customization::.
+
+ In the following example, we are assuming that the user wants to (i)
+re-use color variables provided by the themes, (ii) be able to retain
+their tweaks while switching between ‘modus-operandi’ and
+‘modus-vivendi’, and (iii) have the option to highlight either the
+foreground of the parentheses or the background as well.
+
+ We start by defining our own variable, which will serve as a toggle
+between foreground and background coloration styles:
+
+ (defvar my-highlight-parentheses-use-background t
+ "Prefer `highlight-parentheses-background-colors'.")
+
+ Then we can update our preference with this:
+
+ ;; Set to nil to disable backgrounds.
+ (setq my-highlight-parentheses-use-background nil)
+
+ To re-use colors from the themes, we must wrap our code in the
+‘modus-themes-with-colors’ macro. Our implementation must interface
+with the variables ‘highlight-parentheses-background-colors’ and/or
+‘highlight-parentheses-colors’.
+
+ So we can have something like this (the doc string of
+‘modus-themes-with-colors’ explains where the names of the colors can be
+found):
+
+ (modus-themes-with-colors
+ ;; Our preference for setting either background or foreground
+ ;; styles, depending on `my-highlight-parentheses-use-background'.
+ (if my-highlight-parentheses-use-background
+
+ ;; Here we set color combinations that involve both a background
+ ;; and a foreground value.
+ (setq highlight-parentheses-background-colors (list bg-cyan-intense
+ bg-magenta-intense
+ bg-green-intense
+ bg-yellow-intense)
+ highlight-parentheses-colors (list cyan
+ magenta
+ green
+ yellow))
+
+ ;; And here we pass only foreground colors while disabling any
+ ;; backgrounds.
+ (setq highlight-parentheses-colors (list green-intense
+ magenta-intense
+ blue-intense
+ red-intense)
+ highlight-parentheses-background-colors nil)))
+
+ ;; Include this if you also want to make the parentheses bold:
+ (set-face-attribute 'highlight-parentheses-highlight nil :inherit 'bold)
+
+ ;; Our changes must be evaluated before enabling the relevant mode, so
+ ;; this comes last.
+ (global-highlight-parentheses-mode 1)
+
+ For our changes to persist while switching between the Modus themes,
+we need to include them in a function which can then get passed to
+‘modus-themes-after-load-theme-hook’. This is the complete
+implementation:
+
+ ;; Configurations for `highlight-parentheses':
+ (require 'highlight-parentheses)
+
+ (defvar my-highlight-parentheses-use-background t
+ "Prefer `highlight-parentheses-background-colors'.")
+
+ (setq my-highlight-parentheses-use-background nil) ; Set to nil to disable backgrounds
+
+ (defun my-modus-themes-highlight-parentheses ()
+ (modus-themes-with-colors
+ ;; Our preference for setting either background or foreground
+ ;; styles, depending on `my-highlight-parentheses-use-background'.
+ (if my-highlight-parentheses-use-background
+
+ ;; Here we set color combinations that involve both a background
+ ;; and a foreground value.
+ (setq highlight-parentheses-background-colors (list bg-cyan-intense
+ bg-magenta-intense
+ bg-green-intense
+ bg-yellow-intense)
+ highlight-parentheses-colors (list cyan
+ magenta
+ green
+ yellow))
+
+ ;; And here we pass only foreground colors while disabling any
+ ;; backgrounds.
+ (setq highlight-parentheses-colors (list green-intense
+ magenta-intense
+ blue-intense
+ red-intense)
+ highlight-parentheses-background-colors nil)))
+
+ ;; Include this if you also want to make the parentheses bold:
+ (set-face-attribute 'highlight-parentheses-highlight nil :inherit 'bold)
+
+ ;; Our changes must be evaluated before enabling the relevant mode, so
+ ;; this comes last.
+ (global-highlight-parentheses-mode 1))
+
+ (add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-highlight-parentheses)
+
+ As always, re-load the theme for changes to take effect.
+
+
+File: docGYh7V6.info, Node: Note on mmm-modeel background colors, Next: Note for prism, Prev: Note on highlight-parenthesesel, Up: Notes on individual packages
+
+7.9 Note on mmm-mode.el background colors
+=========================================
+
+The faces used by ‘mmm-mode.el’ are expected to have a colorful
+background, while they should not touch any foreground value. The idea
+is that they must not interfere with existing fontification. Those
+background colors need to be distinct from each other, such as an
+unambiguous red juxtaposed with a clear blue.
+
+ While this design may be internally consistent with the raison d’être
+of that library, it inevitably produces inaccessible color combinations.
+
+ There are two competing goals at play:
+
+ 1. Legibility of the text, understood as the contrast ratio between
+ the background and the foreground.
+
+ 2. Semantic precision of each face which entails faithfulness to
+ color-coding of the underlying background.
+
+ As the Modus themes are designed with the express purpose of
+conforming with the first point, we have to forgo the apparent
+color-coding of the background elements. Instead we use subtle colors
+that do not undermine the legibility of the affected text while they
+still offer a sense of added context.
+
+ Users who might prefer to fall below the minimum 7:1 contrast ratio
+in relative luminance (the accessibility target we conform with), can
+opt to configure the relevant faces on their own.
+
+ *note Use theme colors in code with modus-themes-with-colors::.
+
+ This example uses more vivid background colors, though it comes at
+the very high cost of degraded legibility.
+
+ (modus-themes-with-colors
+ (custom-set-faces
+ `(mmm-cleanup-submode-face ((,c :background ,bg-yellow-intense)))
+ `(mmm-code-submode-face ((,c :background ,bg-inactive)))
+ `(mmm-comment-submode-face ((,c :background ,bg-blue-intense)))
+ `(mmm-declaration-submode-face ((,c :background ,bg-cyan-intense)))
+ `(mmm-default-submode-face ((,c :background ,bg-dim)))
+ `(mmm-init-submode-face ((,c :background ,bg-magenta-intense)))
+ `(mmm-output-submode-face ((,c :background ,bg-red-intense)))
+ `(mmm-special-submode-face ((,c :background ,bg-green-intense)))))
+
+
+File: docGYh7V6.info, Node: Note for prism, Next: Note on company-mode overlay pop-up, Prev: Note on mmm-modeel background colors, Up: Notes on individual packages
+
+7.10 Note on prism.el
+=====================
+
+This package by Adam Porter, aka “alphapapa” or “github-alphapapa”,
+implements an alternative to the typical coloration of code. Instead of
+highlighting the syntactic constructs, it applies color to different
+levels of depth in the code structure.
+
+ As ‘prism.el’ offers a broad range of customizations, we cannot style
+it directly at the theme level: that would run contrary to the spirit of
+the package. Instead, we may offer preset color schemes. Those should
+offer a starting point for users to adapt to their needs.
+
+ In the following code snippets, we employ the
+‘modus-themes-with-colors’ macro: *note Use theme colors in code with
+modus-themes-with-colors::.
+
+ These are the minimum recommended settings with 16 colors:
+
+ (setq prism-num-faces 16)
+
+ (prism-set-colors
+ :desaturations '(0) ; do not change---may lower the contrast ratio
+ :lightens '(0) ; same
+ :colors (modus-themes-with-colors
+ (list fg-main
+ magenta
+ cyan-cooler
+ magenta-cooler
+ blue
+ magenta-warmer
+ cyan-warmer
+ red-cooler
+ green
+ fg-main
+ cyan
+ yellow
+ blue-warmer
+ red-warmer
+ green-cooler
+ yellow-faint)))
+
+ With 8 colors:
+
+ (setq prism-num-faces 8)
+
+ (prism-set-colors
+ :desaturations '(0) ; do not change---may lower the contrast ratio
+ :lightens '(0) ; same
+ :colors (modus-themes-with-colors
+ (list blue
+ magenta
+ magenta-cooler
+ cyan-cooler
+ fg-main
+ blue-warmer
+ red-cooler
+ cyan)))
+
+ And this is with 4 colors, which produces results that are the
+closest to the themes’ default aesthetic:
+
+ (setq prism-num-faces 4)
+
+ (prism-set-colors
+ :desaturations '(0) ; do not change---may lower the contrast ratio
+ :lightens '(0) ; same
+ :colors (modus-themes-with-colors
+ (list blue
+ magenta
+ magenta-cooler
+ green-warmer)))
+
+ If you need to apply desaturation and lightening, you can use what
+the ‘prism.el’ documentation recommends, like this (adapting to the
+examples with the 4, 8, 16 colors):
+
+ (prism-set-colors
+ :desaturations (cl-loop for i from 0 below 16 collect (* i 2.5))
+ :lightens (cl-loop for i from 0 below 16 collect (* i 2.5))
+ :colors (modus-themes-with-colors
+ (list fg-main
+ cyan-cooler
+ magenta-cooler
+ magenta)))
+
+
+File: docGYh7V6.info, Node: Note on company-mode overlay pop-up, Next: Note on ERC escaped color sequences, Prev: Note for prism, Up: Notes on individual packages
+
+7.11 Note on company-mode overlay pop-up
+========================================
+
+By default, the ‘company-mode’ pop-up that lists completion candidates
+is drawn using an overlay. This creates alignment issues every time it
+is placed above a piece of text that has a different height than the
+default.
+
+ The solution recommended by the project’s maintainer is to use an
+alternative front-end for drawing the pop-up which draws child frames
+instead of overlays.(1)(2)
+
+ Also consider the ‘corfu’ package.
+
+ ---------- Footnotes ----------
+
+ (1) <https://github.com/company-mode/company-mode/issues/1010>
+
+ (2) <https://github.com/tumashu/company-posframe/>
+
+
+File: docGYh7V6.info, Node: Note on ERC escaped color sequences, Next: Note on powerline or spaceline, Prev: Note on company-mode overlay pop-up, Up: Notes on individual packages
+
+7.12 Note on ERC escaped color sequences
+========================================
+
+The built-in IRC client ‘erc’ has the ability to colorize any text using
+escape sequences that start with ‘^C’ (inserted with ‘C-q C-c’) and are
+followed by a number for the foreground and background.(1) Possible
+numbers are 0-15, with the first entry being the foreground and the
+second the background, separated by a comma. Like this ‘^C1,6’. The
+minimum setup is this:
+
+ (add-to-list 'erc-modules 'irccontrols)
+ (setq erc-interpret-controls-p t
+ erc-interpret-mirc-color t)
+
+ As this allows users the chance to make arbitrary combinations, it is
+impossible to guarantee a consistently high contrast ratio. All we can
+we do is provide guidance on the combinations that satisfy the
+accessibility standard of the themes:
+
+Modus Operandi
+ Use foreground color 1 for all backgrounds from 2-15. Like so:
+ ‘C-q C-c1’ where ‘N’ is the background.
+
+Modus Vivendi
+ Use foreground color 0 for all backgrounds from 2-13. Use
+ foreground ‘1’ for backgrounds 14, 15.
+
+ Colors 0 and 1 are white and black respectively. So combine them
+together, if you must.
+
+ ---------- Footnotes ----------
+
+ (1) This page explains the basics, though it is not specific to
+Emacs: <https://www.mirc.com/colors.html>
+
+
+File: docGYh7V6.info, Node: Note on powerline or spaceline, Next: Note on SHR colors, Prev: Note on ERC escaped color sequences, Up: Notes on individual packages
+
+7.13 Note on powerline or spaceline
+===================================
+
+Both Powerline and Spaceline package users will likely need to use the
+command ‘powerline-reset’ whenever they make changes to their themes
+and/or mode line setup.
+
+
+File: docGYh7V6.info, Node: Note on SHR colors, Next: Note on SHR fonts, Prev: Note on powerline or spaceline, Up: Notes on individual packages
+
+7.14 Note on SHR colors
+=======================
+
+Emacs’ HTML rendering library (‘shr.el’) may need explicit configuration
+to respect the theme’s colors instead of whatever specifications the
+webpage provides.
+
+ Consult the doc string of ‘shr-use-colors’.
+
+
+File: docGYh7V6.info, Node: Note on SHR fonts, Next: Note on Ement colors and fonts, Prev: Note on SHR colors, Up: Notes on individual packages
+
+7.15 Note on SHR fonts
+======================
+
+By default, packages that build on top of the Simple HTML Remember
+(‘shr’) use proportionately spaced fonts. This is controlled by the
+user option ‘shr-use-fonts’, which is set to non-‘nil’ by default. To
+use the standard font instead, set that variable to ‘nil’.
+
+ *note Font configurations for Org and others::.
+
+ Packages affected by this are:
+
+ • elfeed
+ • ement
+ • eww
+
+ This is a non-exhaustive list.
+
+
+File: docGYh7V6.info, Node: Note on Ement colors and fonts, Next: Note on pdf-tools link hints, Prev: Note on SHR fonts, Up: Notes on individual packages
+
+7.16 Note on Ement colors and fonts
+===================================
+
+The ‘ement.el’ library by Adam Porter (also known as “alphapapa”)
+defaults to a method of colorizing usernames in a rainbow style. This
+is controlled by the user option ‘ement-room-prism’ and can be disabled
+with:
+
+ (setq ement-room-prism nil)
+
+ The contrast ratio of these colors is governed by another user
+option: ‘ement-room-prism-minimum-contrast’. By default, it is set to 6
+which is slightly below our nominal target. Try this instead:
+
+ (setq ement-room-prism-minimum-contrast 7)
+
+ With regard to fonts, Ement depends on ‘shr’ (*note Note on SHR
+fonts::).
+
+ Since we are here, here is an excerpt from Ement’s source code:
+
+ (defcustom ement-room-prism-minimum-contrast 6
+ "Attempt to enforce this minimum contrast ratio for user faces.
+ This should be a reasonable number from, e.g. 0-7 or so."
+ ;; Prot would almost approve of this default. :) I would go all the way
+ ;; to 7, but 6 already significantly dilutes the colors in some cases.
+ :type 'number)
+
+ Yes, I do approve of that default. Even a 4.5 (the WCAG AA rating)
+would be a good baseline for many themes and/or user configurations.
+Our target is the highest of the sort, though we do not demand that
+everyone conforms with it.
+
+
+File: docGYh7V6.info, Node: Note on pdf-tools link hints, Next: Note on the Notmuch logo, Prev: Note on Ement colors and fonts, Up: Notes on individual packages
+
+7.17 Note on pdf-tools link hints
+=================================
+
+Hints are drawn by ImageMagick (https://imagemagick.org/), not Emacs,
+i.e., ImageMagick doesn’t know about the hint face unless you tell
+ImageMagick about it. By default, only the foreground and background
+color attributes are passed. The below snippet adds to those the
+various font attributes. As it queries various faces, specifically
+‘pdf-links-read-link’ and the faces it inherits, it needs to be added to
+your initialization file after you’ve customized any faces.
+
+ (use-package pdf-links
+ :config
+ (let ((spec
+ (apply #'append
+ (mapcar
+ (lambda (name)
+ (list name
+ (face-attribute 'pdf-links-read-link
+ name nil 'default)))
+ '(:family :width :weight :slant)))))
+ (setq pdf-links-read-link-convert-commands
+ `("-density" "96"
+ "-family" ,(plist-get spec :family)
+ "-stretch" ,(let* ((width (plist-get spec :width))
+ (name (symbol-name width)))
+ (replace-regexp-in-string "-" ""
+ (capitalize name)))
+ "-weight" ,(pcase (plist-get spec :weight)
+ ('ultra-light "Thin")
+ ('extra-light "ExtraLight")
+ ('light "Light")
+ ('semi-bold "SemiBold")
+ ('bold "Bold")
+ ('extra-bold "ExtraBold")
+ ('ultra-bold "Black")
+ (_weight "Normal"))
+ "-style" ,(pcase (plist-get spec :slant)
+ ('italic "Italic")
+ ('oblique "Oblique")
+ (_slant "Normal"))
+ "-pointsize" "%P"
+ "-undercolor" "%f"
+ "-fill" "%b"
+ "-draw" "text %X,%Y '%c'"))))
+
+
+File: docGYh7V6.info, Node: Note on the Notmuch logo, Next: Note on goto-address-mode faces, Prev: Note on pdf-tools link hints, Up: Notes on individual packages
+
+7.18 Note on the Notmuch logo
+=============================
+
+By default, the “hello” buffer of Notmuch includes a header with the
+programs’ logo and a couple of buttons. The logo has the effect of
+enlarging the height of the line, which negatively impacts the shape of
+those buttons. Disabling the logo fixes the problem:
+
+ (setq notmuch-show-logo nil)
+
+
+File: docGYh7V6.info, Node: Note on goto-address-mode faces, Prev: Note on the Notmuch logo, Up: Notes on individual packages
+
+7.19 Note on goto-address-mode faces
+====================================
+
+The built-in ‘goto-address-mode’ uses heuristics to identify URLs and
+email addresses in the current buffer. It then applies a face to them
+to change their style. Some packages, such as ‘notmuch’, use this
+minor-mode automatically.
+
+ The faces are not declared with ‘defface’, meaning that it is better
+that the theme does not modify them. The user is thus encouraged to
+consider including (or equivalent) this in their setup:
+
+ (setq goto-address-url-face 'link
+ goto-address-url-mouse-face 'highlight
+ goto-address-mail-face 'link
+ goto-address-mail-mouse-face 'highlight)
+
+ My personal preference is to set ‘goto-address-mail-face’ to ‘nil’,
+as it otherwise adds too much visual noise to the buffer (email
+addresses stand out more, due to the use of the uncommon ‘@’ character
+but also because they are often enclosed in angled brackets).
+
+
+File: docGYh7V6.info, Node: Frequently Asked Questions, Next: Contributing, Prev: Notes on individual packages, Up: Top
+
+8 Frequently Asked Questions
+****************************
+
+In this section we provide answers related to some aspects of the Modus
+themes’ design and application.
+
+* Menu:
+
+* Is the contrast ratio about adjacent colors?::
+* What does it mean to avoid exaggerations?::
+* Why are colors mostly variants of blue, magenta, cyan?: Why are colors mostly variants of blue magenta cyan?.
+* What is the best setup for legibility?::
+* Are these color schemes?::
+* Port the Modus themes to other platforms?::
+
+
+File: docGYh7V6.info, Node: Is the contrast ratio about adjacent colors?, Next: What does it mean to avoid exaggerations?, Up: Frequently Asked Questions
+
+8.1 Is the contrast ratio about adjacent colors?
+================================================
+
+The minimum contrast ratio in relative luminance that the themes conform
+with always refers to any given combination of background and foreground
+colors. If we have some blue colored text next to a magenta one, both
+against a white background, we do not mean to imply that blue:magenta is
+7:1 in terms of relative luminance. Rather, we state that blue:white
+and magenta:white each are 7:1 or higher.
+
+ The point of reference is always the background. Because colors have
+about the same minimum distance in luminance from their backdrop, they
+necessarily are fairly close to each other in this measure. A possible
+blue:magenta combination would naturally be around 1:1 in contrast of
+the sort here considered.
+
+ To differentiate between sequential colors, we rely on hueness by
+mapping contrasting hues to adjacent constructs, while avoiding
+exaggerations. A blue next to a magenta can be told apart regardless of
+their respective contrast ratio against their common background.
+Exceptions would be tiny characters in arguably not so realistic cases,
+such as two dots drawn side-by-side which for some reason would need to
+be colored differently. They would still be legible though, which is
+the primary objective of the Modus themes.
+
+
+File: docGYh7V6.info, Node: What does it mean to avoid exaggerations?, Next: Why are colors mostly variants of blue magenta cyan?, Prev: Is the contrast ratio about adjacent colors?, Up: Frequently Asked Questions
+
+8.2 What does it mean to avoid exaggerations?
+=============================================
+
+The Modus themes are designed with restraint, so that their default
+looks do not overdo it with the application of color.
+
+ *note Customization Options: Customization options.
+
+ This is the non-quantifiable aspect of the themes’ design: the
+artistic part, if you will. There are a lot of cases where color can be
+used inconsiderately, without accounting for layout, typographic, or
+other properties of the presentation. For example, two headings with
+distinct markers, such as leading asterisks in Org buffers, do not have
+to have highly contrasting hues between them in order to be told apart:
+the added element of contrast in hueness does not contribute
+significantly more to the distinction between the headings than colors
+whose hues are relatively closer to each other in the color space.
+
+ Exaggerations can be hard to anticipate or identify. Multiple shades
+of blue and magenta in the same context may not seem optimal: one might
+think that it would be better to use highly contrasting hues to ensure
+that all colors stand out, such as by placing blue next to yellow, next
+to magenta, and green. That would, however, be a case of design for its
+own sake; a case where color is being applied without consideration of
+its end results in the given context. Too many contrasting hues in
+close proximity force an erratic rate to how the eye jumps from one
+piece of text to the next. Whereas multiple shades of, say, blue and
+magenta can suffice to tell things apart and avoid excess coloration: a
+harmonious rhythm.
+
+
+File: docGYh7V6.info, Node: Why are colors mostly variants of blue magenta cyan?, Next: What is the best setup for legibility?, Prev: What does it mean to avoid exaggerations?, Up: Frequently Asked Questions
+
+8.3 Why are colors mostly variants of blue, magenta, cyan?
+==========================================================
+
+Due to the innate properties of color, some options are better than
+others for the accessibility purposes of the themes, the stylistic
+consistency between ‘modus-operandi’ and ‘modus-vivendi’, and the
+avoidance of exaggerations in design.
+
+ *note What does it mean to avoid exaggerations?::
+
+ What we describe as color is a function of three distinct channels of
+light: red, green, blue. In hexadecimal RGB notation, a color value is
+read as three pairs of red, green, and blue light: ‘#RRGGBB’. Of those
+three, the most luminant is green, while the least luminant is blue.
+
+ The three basic colors represent each of the channels of light. They
+can be intermixed to give us six colors: red and green derive yellow,
+green and blue make cyan, red and blue turn into magenta.
+
+ We can test the luminance of each of those against white and black to
+get a sense of how not all colors are equally good for accessibility
+(white is ‘#ffffff’, which means that all three light channels are fully
+luminated, while black is ‘#000000’ meaning that no light is present
+(notwithstanding display technology)).
+
+ | Name | | #ffffff | #000000 |
+ |---------+---------+---------+---------|
+ | red | #ff0000 | 4.00 | 5.25 |
+ | yellow | #ffff00 | 1.07 | 19.56 |
+ | green | #00ff00 | 1.37 | 15.30 |
+ | cyan | #00ffff | 1.25 | 16.75 |
+ | blue | #0000ff | 8.59 | 2.44 |
+ | magenta | #ff00ff | 3.14 | 6.70 |
+
+ *note Measure color contrast::.
+
+ By reading this table we learn that every color that has a high level
+of green light (green, yellow, cyan) is virtually unreadable against a
+white background and, conversely, can be easily read against black.
+
+ We can then infer that red and blue, in different combinations, with
+green acting as calibrator for luminance, will give us fairly moderate
+colors that pass the 7:1 target. Blue with a bit of green produce
+appropriate variants of cyan. Similarly, blue combined with some red
+and hints of green give us suitable shades of purple.
+
+ Due to the need of maintaining some difference in hueness between
+adjacent colors, it is not possible to make red, green, and yellow the
+main colors, because blue cannot be used to control their luminance and,
+thus the relevant space will shrink considerably.
+
+ *note Is the contrast ratio about adjacent colors?::
+
+ This phenomenon is best illustrated by the following table that
+measures the relative luminance of shades of red, yellow, magenta
+against white:
+
+ | | #ffffff |
+ |---------+---------|
+ | #990000 | 8.92 |
+ | #995500 | 5.75 |
+ | #990099 | 7.46 |
+
+ We notice that equal values of red and blue light in ‘#990099’
+(magenta shade) do not lead to a considerable change in luminance
+compared with ‘#990000’ (red variant). Whereas less amount of green
+light in ‘#995500’ leads to a major drop in luminance relative to white.
+It follows that using the green channel of light to calibrate the
+luminance of colors is more effective than trying to do the same with
+either red or blue (the latter is the least effective in that regard).
+
+ When we need to work with several colors, it is always better to have
+sufficient manoeuvring space, especially since we cannot pick arbitrary
+colors but only those that satisfy the accessibility objectives of the
+themes.
+
+ As for why we do not mostly use green, yellow, cyan for the dark
+theme, it is because those colors are far more luminant than their
+counterparts on the other side of the spectrum, so to ensure that they
+all have about the same contrast ratios we would have to alter their
+hueness considerably. In short, the effect would not be optimal as it
+would lead to exaggerations. Plus, it would make ‘modus-vivendi’ look
+completely different than ‘modus-operandi’, to the effect that the two
+could not be properly considered part of the same project.
+
+
+File: docGYh7V6.info, Node: What is the best setup for legibility?, Next: Are these color schemes?, Prev: Why are colors mostly variants of blue magenta cyan?, Up: Frequently Asked Questions
+
+8.4 What is the best setup for legibility?
+==========================================
+
+The Modus themes can be conceptually simplified as combinations of color
+values that account for relative luminance and inner harmony. Those
+qualities do not guarantee that every end-user will have the same
+experience, due to differences between people, but also because of
+variances in hardware capabilities and configurations. For the purposes
+of this document, we may only provide suggestions pertaining to the
+latter case.
+
+ ‘modus-operandi’ is best used outdoors or in a room that either gets
+direct sunlight or has plenty of light. Whereas ‘modus-vivendi’ works
+better when there is not a lot of sunshine or the room has a source of
+light that is preferably a faint and/or warm one. It is possible to use
+‘modus-operandi’ at night and ‘modus-vivendi’ during the day, though
+that will depend on several variables, such as one’s overall perception
+of color, the paint on the walls and how that contributes to the
+impression of lightness in the room, the sense of space within the eye’s
+peripheral vision, hardware specifications, and environmental factors.
+
+ In general, an additional source of light other than that of the
+monitor can help reduce eye strain: the eyes are more relaxed when they
+do not have to focus on one point to gather light.
+
+ The monitor’s display settings must be accounted for. Gamma values,
+in particular, need to be calibrated to neither amplify nor distort the
+perception of black. Same principle for sharpness, brightness, and
+contrast as determined by the hardware, which all have an effect on how
+text is read on the screen.
+
+ There are software level methods on offer, such as the XrandR utility
+for the X Window System (X.org), which can make gamma corrections for
+each of the three channels of light (red, green, blue). For example:
+
+ xrandr --output LVDS1 --brightness 1.0 --gamma 0.76:0.75:0.68
+
+ Typography is another variable. Some font families are blurry at
+small point sizes. Others may have a regular weight that is lighter
+(thiner) than that of their peers which may, under certain
+circumstances, cause a halo effect around each glyph.
+
+ The gist is that legibility cannot be fully solved at the theme
+level. The color combinations may have been optimized for
+accessibility, though the remaining contributing factors in each case
+need to be considered in full.
+
+
+File: docGYh7V6.info, Node: Are these color schemes?, Next: Port the Modus themes to other platforms?, Prev: What is the best setup for legibility?, Up: Frequently Asked Questions
+
+8.5 Are these color schemes?
+============================
+
+No, the Modus themes are not color schemes.
+
+ A color scheme is a collection of colors. A good color scheme is a
+combination of colors with an inner logic or abstract structure.
+
+ A theme is a set of patterns that are applied across different
+contexts. A good theme is one that does so with consistency, though not
+uniformity.
+
+ In practical terms, a color scheme is what one uses when, for
+example, they replace the first sixteen escape sequences of a terminal
+emulator with color values of their preference. The terminal offers the
+option to choose, say, the exact value of what counts as “red”, but does
+not provide the means to control where that is mapped to and whether it
+should also have other qualities such as a bold weight for the
+underlying text or an added background color. In contradistinction,
+Emacs uses constructs known as “faces” which allow the user/developer to
+specify where a given color will be used and whether it should be
+accompanied by other typographic or stylistic attributes.
+
+ By configuring the multitude of faces on offer we thus control both
+which colors are applied and how they appear in their context. When a
+package wants to render each instance of “foo” with the “bar” face, it
+is not requesting a specific color, which makes things considerably more
+flexible as we can treat “bar” in its own right without necessarily
+having to use some color value that we hardcoded somewhere.
+
+ Which brings us to the distinction between consistency and uniformity
+where our goal is always the former: we want things to look similar
+across all interfaces, but we must never force a visual identity where
+that runs contrary to the functionality of the given interface. For
+instance, all links are underlined by default yet there are cases such
+as when viewing listings of emails in Gnus (and Mu4e, Notmuch) where (i)
+it is already understood that one must follow the indicator or headline
+to view its contents and (ii) underlining everything would make the
+interface virtually unusable.
+
+ Again, one must exercise judgement in order to avoid discrimination,
+where “discrimination” refers to:
+
+ • The treatment of substantially different magnitudes as if they were
+ of the same class.
+ • Or the treatment of the same class of magnitudes as if they were of
+ a different class.
+
+ (To treat similar things differently; to treat dissimilar things
+alike.)
+
+ If, in other words, one is to enforce uniformity without accounting
+for the particular requirements of each case—the contextual demands for
+usability beyond matters of color—they are making a not-so-obvious error
+of treating different cases as if they were the same.
+
+ The Modus themes prioritize “thematic consistency” over abstract
+harmony or regularity among their applicable colors. In concrete terms,
+we do not claim that, say, our yellows are the best complements for our
+blues because we generally avoid using complementary colors
+side-by-side, so it is wrong to optimize for a decontextualised
+blue+yellow combination. Not to imply that our colors do not work well
+together because they do, just to clarify that consistency of context is
+what themes must strive for, and that requires widening the scope of the
+design beyond the particularities of a color scheme.
+
+ Long story short: color schemes and themes have different
+requirements. Please do not conflate the two.
+
+
+File: docGYh7V6.info, Node: Port the Modus themes to other platforms?, Prev: Are these color schemes?, Up: Frequently Asked Questions
+
+8.6 Port the Modus themes to other platforms?
+=============================================
+
+There is no plan to port the themes to other platforms or text editors.
+I (Protesilaos) only use GNU Emacs and thus cannot maintain code that
+targets software I am either not familiar with or am not using on a
+daily basis.
+
+ While it is possible to produce a simulacrum based on a given
+template, doing so would run contrary to how this project is maintained
+where details matter greatly.
+
+ Each program has its own requirements so it won’t always be
+possible—or indeed desirable—to have 1:1 correspondence between what
+applies to Emacs and what should be done elsewhere. No port should ever
+strive to be a copy of the Emacs implementation, as no other program is
+an Emacs equivalent, but instead try to follow the spirit of the design.
+For example, some of the customization options accept a list as their
+value, or an alist, which may not be possible to reproduce on other
+platforms.
+
+ *note Customization options::.
+
+ In other words, if something must be done differently on a certain
+editor then that is acceptable so long as (i) the accessibility
+standards are not compromised and (ii) the overall character of the
+themes remains consistent.
+
+ The former criterion should be crystal clear as it pertains to the
+scientific foundations of the themes: high legibility and taking care of
+the needs of users with red-green/blue-yellow color deficiency
+(deuteranopia and tritanopia) by avoiding red+green color coding
+paradigms and/or by providing yellow+blue variants for deuteranopia and
+red+cyan for tritanopia (*note Overview::).
+
+ The latter criterion is the “je ne sais quoi” of the artistic aspect
+of the themes, which is partially fleshed out in this manual.
+
+ *note Frequently Asked Questions::.
+
+ With regard to the artistic aspect (where “art” qua skill may amount
+to an imprecise science), there is no hard-and-fast rule in effect as it
+requires one to exercize discretion and make decisions based on
+context-dependent information or constraints. As is true with most
+things in life, when in doubt, do not cling on to the letter of the law
+but try to understand its spirit.
+
+ For a trivial example: the curly underline that Emacs draws for
+spelling errors is thinner than, e.g., what a graphical web browser has,
+so if I was to design for an editor than has a thicker curly underline I
+would make the applicable colors less intense to counterbalance the
+typographic intensity of the added thickness.
+
+ With those granted, if anyone is willing to develop a port of the
+themes, they are welcome to contact me and I will do my best to help
+them in their efforts.
+
+
+File: docGYh7V6.info, Node: Contributing, Next: Acknowledgements, Prev: Frequently Asked Questions, Up: Top
+
+9 Contributing
+**************
+
+This section documents the canonical sources of the themes and the ways
+in which you can contribute to their ongoing development.
+
+* Menu:
+
+* Sources of the themes::
+* Issues you can help with::
+* Patches require copyright assignment to the FSF::
+
+
+File: docGYh7V6.info, Node: Sources of the themes, Next: Issues you can help with, Up: Contributing
+
+9.1 Sources of the themes
+=========================
+
+ • Package name (GNU ELPA): ‘modus-themes’
+ • Official manual: <https://protesilaos.com/emacs/modus-themes>
+ • Change log: <https://protesilaos.com/emacs/modus-themes-changelog>
+ • Color palette: <https://protesilaos.com/emacs/modus-themes-colors>
+ • Sample pictures:
+ <https://protesilaos.com/emacs/modus-themes-pictures>
+ • 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>
+ • Backronym: My Old Display Unexpectedly Sharpened ... themes
+
+
+File: docGYh7V6.info, Node: Issues you can help with, Next: Patches require copyright assignment to the FSF, Prev: Sources of the themes, Up: Contributing
+
+9.2 Issues you can help with
+============================
+
+A few tasks you can help with by sending an email to the general
+modus-themes public mailing list
+(https://lists.sr.ht/~protesilaos/modus-themes).
+
+ • Suggest refinements to packages that are covered.
+ • Report packages not covered thus far.
+ • Report bugs, inconsistencies, shortcomings.
+ • Help expand the documentation of covered-but-not-styled packages.
+ • Suggest refinements to the color palette.
+ • Help expand this document or any other piece of documentation.
+ • Send patches for code refinements (if you need, ask me for help
+ with Git—we all start out as beginners).
+
+ *note Patches require copyright assignment to the FSF::.
+
+ It is preferable that your feedback includes some screenshots, GIFs,
+or short videos, as well as further instructions to reproduce a given
+setup. Though this is not a requirement.
+
+ Whatever you do, bear in mind the overarching objective of the Modus
+themes: to keep a contrast ratio that is greater or equal to 7:1 between
+background and foreground colors. If a compromise is ever necessary
+between aesthetics and accessibility, it shall always be made in the
+interest of the latter.
+
+
+File: docGYh7V6.info, Node: Patches require copyright assignment to the FSF, Prev: Issues you can help with, Up: Contributing
+
+9.3 Patches require copyright assignment to the FSF
+===================================================
+
+Code contributions are most welcome. For any major edit (more than 15
+lines, or so, in aggregate per person), you need to make a copyright
+assignment to the Free Software Foundation. This is necessary because
+the themes are part of the upstream Emacs distribution: the FSF must at
+all times be in a position to enforce the GNU General Public License.
+
+ Copyright assignment is a simple process. Check the request form
+below (please adapt it accordingly). You must write an email to the
+address mentioned in the form and then wait for the FSF to send you a
+legal agreement. Sign the document and file it back to them. This
+could all happen via email and take about a week. You are encouraged to
+go through this process. You only need to do it once. It will allow
+you to make contributions to Emacs in general.
+
+ Please email the following information to assign@gnu.org, and we
+ will send you the assignment form for your past and future changes.
+
+ Please use your full legal name (in ASCII characters) as the subject
+ line of the message.
+
+ REQUEST: SEND FORM FOR PAST AND FUTURE CHANGES
+
+ [What is the name of the program or package you're contributing to?]
+
+ GNU Emacs
+
+ [Did you copy any files or text written by someone else in these changes?
+ Even if that material is free software, we need to know about it.]
+
+ Copied a few snippets from the same files I edited. Their author,
+ Protesilaos Stavrou, has already assigned copyright to the Free Software
+ Foundation.
+
+ [Do you have an employer who might have a basis to claim to own
+ your changes? Do you attend a school which might make such a claim?]
+
+
+ [For the copyright registration, what country are you a citizen of?]
+
+
+ [What year were you born?]
+
+
+ [Please write your email address here.]
+
+
+ [Please write your postal address here.]
+
+
+
+
+
+ [Which files have you changed so far, and which new files have you written
+ so far?]
+
+
+
+File: docGYh7V6.info, Node: Acknowledgements, Next: GNU Free Documentation License, Prev: Contributing, Up: Top
+
+10 Acknowledgements
+*******************
+
+The Modus themes are a collective effort. Every bit of work matters.
+
+Author/maintainer
+ Protesilaos Stavrou.
+
+Contributions to code or documentation
+ Aleksei Gusev, Alex Griffin, Anders Johansson, Antonio Ruiz, Basil
+ L. Contovounesios, Björn Lindström, Carlo Zancanaro, Christian
+ Tietze, Daniel Mendler, David Edmondson, Eli Zaretskii, Fritz
+ Grabo, Gautier Ponsinet, Illia Ostapyshyn, Kévin Le Gouguec, Koen
+ van Greevenbroek, Kostadin Ninev, Madhavan Krishnan, Manuel Giraud,
+ Markus Beppler, Matthew Stevenson, Mauro Aranda, Nacho Barrientos,
+ Nicolas De Jaeghere, Paul David, Philip Kaludercic, Pierre
+ Téchoueyres, Rudolf Adamkovič, Sergey Nichiporchik, Shreyas
+ Ragavan, Stefan Kangas, Stephen Berman, Stephen Gildea, Steve
+ Downey, Tomasz Hołubowicz, Utkarsh Singh, Vincent Murphy, Xinglu
+ Chen, Yuanchen Xie, fluentpwn, okamsn.
+
+Ideas and user feedback
+ Aaron Jensen, Adam Porter, Adam Spiers, Adrian Manea, Aleksei
+ Pirogov, Alex Griffin, Alex Koen, Alex Peitsinis, Alexey Shmalko,
+ Alok Singh, Anders Johansson, André Alexandre Gomes, Andrew Tropin,
+ Antonio Hernández Blas, Arif Rezai, Augusto Stoffel, Basil L.
+ Contovounesios, Bernd Rellermeyer, Burgess Chang, Charlotte Van
+ Petegem, Christian Tietze, Christopher Dimech, Christopher League,
+ Damien Cassou, Daniel Mendler, Dario Gjorgjevski, David Edmondson,
+ Davor Rotim, Divan Santana, Eliraz Kedmi, Emanuele Michele Alberto
+ Monterosso, Farasha Euker, Feng Shu, Gautier Ponsinet, Gerry
+ Agbobada, Gianluca Recchia, Gonçalo Marrafa, Guilherme Semente,
+ Gustavo Barros, Hörmetjan Yiltiz, Ilja Kocken, Imran Khan, Iris
+ Garcia, Ivan Popovych, James Ferguson, Jeremy Friesen, Jerry Zhang,
+ Johannes Grødem, John Haman, Jonas Collberg, Jorge Morais, Joshua
+ O’Connor, Julio C. Villasante, Kenta Usami, Kevin Fleming, Kévin
+ Le Gouguec, Kevin Kainan Li, Kostadin Ninev, Laith Bahodi, Lasse
+ Lindner, Len Trigg, Lennart C. Karssen, Luis Miguel Castañeda,
+ Magne Hov, Manuel Giraud, Manuel Uberti, Mark Bestley, Mark Burton,
+ Mark Simpson, Marko Kocic, Markus Beppler, Matt Armstrong, Matthias
+ Fuchs, Mattias Engdegård, Mauro Aranda, Maxime Tréca, Michael
+ Goldenberg, Morgan Smith, Morgan Willcock, Murilo Pereira, Nicky
+ van Foreest, Nicolas De Jaeghere, Nicolas Semrau, Olaf Meeuwissen,
+ Oliver Epper, Pablo Stafforini, Paul Poloskov, Pengji Zhang, Pete
+ Kazmier, Peter Wu, Philip Kaludercic, Pierre Téchoueyres,
+ Przemysław Kryger, Robert Hepple, Roman Rudakov, Russell Sim, Ryan
+ Phillips, Rytis Paškauskas, Rudolf Adamkovič, Sam Kleinman, Samuel
+ Culpepper, Saša Janiška, Shreyas Ragavan, Simon Pugnet, Steve
+ Downey, Tassilo Horn, Thanos Apollo, Thibaut Verron, Thomas
+ Heartman, Togan Muftuoglu, Tony Zorman, Trey Merkley, Tomasz
+ Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh, Vincent Foley,
+ Zoltan Kiraly. As well as users: Ben, CsBigDataHub1, Emacs
+ Contrib, Eugene, Fourchaux, Fredrik, Moesasji, Nick, Summer Emacs,
+ TheBlob42, TitusMu, Trey, bepolymathe, bit9tream, bangedorrunt,
+ derek-upham, doolio, fleimgruber, gitrj95, iSeeU, jixiuf, okamsn,
+ pRot0ta1p, soaringbird, tumashu, wakamenod.
+
+Packaging
+ Basil L. Contovounesios, Eli Zaretskii, Glenn Morris, Mauro Aranda,
+ Richard Stallman, Stefan Kangas (core Emacs), Stefan Monnier (GNU
+ Elpa), André Alexandre Gomes, Andrew Tropin, Dimakakos Dimos,
+ Morgan Smith, Nicolas Goaziou (Guix), Dhavan Vaidya (Debian).
+
+Inspiration for certain features
+ Bozhidar Batsov (zenburn-theme), Fabrice Niessen (leuven-theme).
+
+ Special thanks (from A-Z) to Daniel Mendler, Gustavo Barros, Manuel
+Uberti, Nicolas De Jaeghere, and Omar Antolín Camarena for their long
+time contributions and insightful commentary on key aspects of the
+themes’ design and/or aspects of their functionality.
+
+ All errors are my own.
+
+
+File: docGYh7V6.info, Node: GNU Free Documentation License, Next: Indices, Prev: Acknowledgements, Up: Top
+
+Appendix A GNU Free Documentation License
+*****************************************
+
+ Version 1.3, 3 November 2008
+
+ Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+ <https://fsf.org/>
+
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ 0. PREAMBLE
+
+ The purpose of this License is to make a manual, textbook, or other
+ functional and useful document “free” in the sense of freedom: to
+ assure everyone the effective freedom to copy and redistribute it,
+ with or without modifying it, either commercially or
+ noncommercially. Secondarily, this License preserves for the
+ author and publisher a way to get credit for their work, while not
+ being considered responsible for modifications made by others.
+
+ This License is a kind of “copyleft”, which means that derivative
+ works of the document must themselves be free in the same sense.
+ It complements the GNU General Public License, which is a copyleft
+ license designed for free software.
+
+ We have designed this License in order to use it for manuals for
+ free software, because free software needs free documentation: a
+ free program should come with manuals providing the same freedoms
+ that the software does. But this License is not limited to
+ software manuals; it can be used for any textual work, regardless
+ of subject matter or whether it is published as a printed book. We
+ recommend this License principally for works whose purpose is
+ instruction or reference.
+
+ 1. APPLICABILITY AND DEFINITIONS
+
+ This License applies to any manual or other work, in any medium,
+ that contains a notice placed by the copyright holder saying it can
+ be distributed under the terms of this License. Such a notice
+ grants a world-wide, royalty-free license, unlimited in duration,
+ to use that work under the conditions stated herein. The
+ “Document”, below, refers to any such manual or work. Any member
+ of the public is a licensee, and is addressed as “you”. You accept
+ the license if you copy, modify or distribute the work in a way
+ requiring permission under copyright law.
+
+ A “Modified Version” of the Document means any work containing the
+ Document or a portion of it, either copied verbatim, or with
+ modifications and/or translated into another language.
+
+ A “Secondary Section” is a named appendix or a front-matter section
+ of the Document that deals exclusively with the relationship of the
+ publishers or authors of the Document to the Document’s overall
+ subject (or to related matters) and contains nothing that could
+ fall directly within that overall subject. (Thus, if the Document
+ is in part a textbook of mathematics, a Secondary Section may not
+ explain any mathematics.) The relationship could be a matter of
+ historical connection with the subject or with related matters, or
+ of legal, commercial, philosophical, ethical or political position
+ regarding them.
+
+ The “Invariant Sections” are certain Secondary Sections whose
+ titles are designated, as being those of Invariant Sections, in the
+ notice that says that the Document is released under this License.
+ If a section does not fit the above definition of Secondary then it
+ is not allowed to be designated as Invariant. The Document may
+ contain zero Invariant Sections. If the Document does not identify
+ any Invariant Sections then there are none.
+
+ The “Cover Texts” are certain short passages of text that are
+ listed, as Front-Cover Texts or Back-Cover Texts, in the notice
+ that says that the Document is released under this License. A
+ Front-Cover Text may be at most 5 words, and a Back-Cover Text may
+ be at most 25 words.
+
+ A “Transparent” copy of the Document means a machine-readable copy,
+ represented in a format whose specification is available to the
+ general public, that is suitable for revising the document
+ straightforwardly with generic text editors or (for images composed
+ of pixels) generic paint programs or (for drawings) some widely
+ available drawing editor, and that is suitable for input to text
+ formatters or for automatic translation to a variety of formats
+ suitable for input to text formatters. A copy made in an otherwise
+ Transparent file format whose markup, or absence of markup, has
+ been arranged to thwart or discourage subsequent modification by
+ readers is not Transparent. An image format is not Transparent if
+ used for any substantial amount of text. A copy that is not
+ “Transparent” is called “Opaque”.
+
+ Examples of suitable formats for Transparent copies include plain
+ ASCII without markup, Texinfo input format, LaTeX input format,
+ SGML or XML using a publicly available DTD, and standard-conforming
+ simple HTML, PostScript or PDF designed for human modification.
+ Examples of transparent image formats include PNG, XCF and JPG.
+ Opaque formats include proprietary formats that can be read and
+ edited only by proprietary word processors, SGML or XML for which
+ the DTD and/or processing tools are not generally available, and
+ the machine-generated HTML, PostScript or PDF produced by some word
+ processors for output purposes only.
+
+ The “Title Page” means, for a printed book, the title page itself,
+ plus such following pages as are needed to hold, legibly, the
+ material this License requires to appear in the title page. For
+ works in formats which do not have any title page as such, “Title
+ Page” means the text near the most prominent appearance of the
+ work’s title, preceding the beginning of the body of the text.
+
+ The “publisher” means any person or entity that distributes copies
+ of the Document to the public.
+
+ A section “Entitled XYZ” means a named subunit of the Document
+ whose title either is precisely XYZ or contains XYZ in parentheses
+ following text that translates XYZ in another language. (Here XYZ
+ stands for a specific section name mentioned below, such as
+ “Acknowledgements”, “Dedications”, “Endorsements”, or “History”.)
+ To “Preserve the Title” of such a section when you modify the
+ Document means that it remains a section “Entitled XYZ” according
+ to this definition.
+
+ The Document may include Warranty Disclaimers next to the notice
+ which states that this License applies to the Document. These
+ Warranty Disclaimers are considered to be included by reference in
+ this License, but only as regards disclaiming warranties: any other
+ implication that these Warranty Disclaimers may have is void and
+ has no effect on the meaning of this License.
+
+ 2. VERBATIM COPYING
+
+ You may copy and distribute the Document in any medium, either
+ commercially or noncommercially, provided that this License, the
+ copyright notices, and the license notice saying this License
+ applies to the Document are reproduced in all copies, and that you
+ add no other conditions whatsoever to those of this License. You
+ may not use technical measures to obstruct or control the reading
+ or further copying of the copies you make or distribute. However,
+ you may accept compensation in exchange for copies. If you
+ distribute a large enough number of copies you must also follow the
+ conditions in section 3.
+
+ You may also lend copies, under the same conditions stated above,
+ and you may publicly display copies.
+
+ 3. COPYING IN QUANTITY
+
+ If you publish printed copies (or copies in media that commonly
+ have printed covers) of the Document, numbering more than 100, and
+ the Document’s license notice requires Cover Texts, you must
+ enclose the copies in covers that carry, clearly and legibly, all
+ these Cover Texts: Front-Cover Texts on the front cover, and
+ Back-Cover Texts on the back cover. Both covers must also clearly
+ and legibly identify you as the publisher of these copies. The
+ front cover must present the full title with all words of the title
+ equally prominent and visible. You may add other material on the
+ covers in addition. Copying with changes limited to the covers, as
+ long as they preserve the title of the Document and satisfy these
+ conditions, can be treated as verbatim copying in other respects.
+
+ If the required texts for either cover are too voluminous to fit
+ legibly, you should put the first ones listed (as many as fit
+ reasonably) on the actual cover, and continue the rest onto
+ adjacent pages.
+
+ If you publish or distribute Opaque copies of the Document
+ numbering more than 100, you must either include a machine-readable
+ Transparent copy along with each Opaque copy, or state in or with
+ each Opaque copy a computer-network location from which the general
+ network-using public has access to download using public-standard
+ network protocols a complete Transparent copy of the Document, free
+ of added material. If you use the latter option, you must take
+ reasonably prudent steps, when you begin distribution of Opaque
+ copies in quantity, to ensure that this Transparent copy will
+ remain thus accessible at the stated location until at least one
+ year after the last time you distribute an Opaque copy (directly or
+ through your agents or retailers) of that edition to the public.
+
+ It is requested, but not required, that you contact the authors of
+ the Document well before redistributing any large number of copies,
+ to give them a chance to provide you with an updated version of the
+ Document.
+
+ 4. MODIFICATIONS
+
+ You may copy and distribute a Modified Version of the Document
+ under the conditions of sections 2 and 3 above, provided that you
+ release the Modified Version under precisely this License, with the
+ Modified Version filling the role of the Document, thus licensing
+ distribution and modification of the Modified Version to whoever
+ possesses a copy of it. In addition, you must do these things in
+ the Modified Version:
+
+ A. Use in the Title Page (and on the covers, if any) a title
+ distinct from that of the Document, and from those of previous
+ versions (which should, if there were any, be listed in the
+ History section of the Document). You may use the same title
+ as a previous version if the original publisher of that
+ version gives permission.
+
+ B. List on the Title Page, as authors, one or more persons or
+ entities responsible for authorship of the modifications in
+ the Modified Version, together with at least five of the
+ principal authors of the Document (all of its principal
+ authors, if it has fewer than five), unless they release you
+ from this requirement.
+
+ C. State on the Title page the name of the publisher of the
+ Modified Version, as the publisher.
+
+ D. Preserve all the copyright notices of the Document.
+
+ E. Add an appropriate copyright notice for your modifications
+ adjacent to the other copyright notices.
+
+ F. Include, immediately after the copyright notices, a license
+ notice giving the public permission to use the Modified
+ Version under the terms of this License, in the form shown in
+ the Addendum below.
+
+ G. Preserve in that license notice the full lists of Invariant
+ Sections and required Cover Texts given in the Document’s
+ license notice.
+
+ H. Include an unaltered copy of this License.
+
+ I. Preserve the section Entitled “History”, Preserve its Title,
+ and add to it an item stating at least the title, year, new
+ authors, and publisher of the Modified Version as given on the
+ Title Page. If there is no section Entitled “History” in the
+ Document, create one stating the title, year, authors, and
+ publisher of the Document as given on its Title Page, then add
+ an item describing the Modified Version as stated in the
+ previous sentence.
+
+ J. Preserve the network location, if any, given in the Document
+ for public access to a Transparent copy of the Document, and
+ likewise the network locations given in the Document for
+ previous versions it was based on. These may be placed in the
+ “History” section. You may omit a network location for a work
+ that was published at least four years before the Document
+ itself, or if the original publisher of the version it refers
+ to gives permission.
+
+ K. For any section Entitled “Acknowledgements” or “Dedications”,
+ Preserve the Title of the section, and preserve in the section
+ all the substance and tone of each of the contributor
+ acknowledgements and/or dedications given therein.
+
+ L. Preserve all the Invariant Sections of the Document, unaltered
+ in their text and in their titles. Section numbers or the
+ equivalent are not considered part of the section titles.
+
+ M. Delete any section Entitled “Endorsements”. Such a section
+ may not be included in the Modified Version.
+
+ N. Do not retitle any existing section to be Entitled
+ “Endorsements” or to conflict in title with any Invariant
+ Section.
+
+ O. Preserve any Warranty Disclaimers.
+
+ If the Modified Version includes new front-matter sections or
+ appendices that qualify as Secondary Sections and contain no
+ material copied from the Document, you may at your option designate
+ some or all of these sections as invariant. To do this, add their
+ titles to the list of Invariant Sections in the Modified Version’s
+ license notice. These titles must be distinct from any other
+ section titles.
+
+ You may add a section Entitled “Endorsements”, provided it contains
+ nothing but endorsements of your Modified Version by various
+ parties—for example, statements of peer review or that the text has
+ been approved by an organization as the authoritative definition of
+ a standard.
+
+ You may add a passage of up to five words as a Front-Cover Text,
+ and a passage of up to 25 words as a Back-Cover Text, to the end of
+ the list of Cover Texts in the Modified Version. Only one passage
+ of Front-Cover Text and one of Back-Cover Text may be added by (or
+ through arrangements made by) any one entity. If the Document
+ already includes a cover text for the same cover, previously added
+ by you or by arrangement made by the same entity you are acting on
+ behalf of, you may not add another; but you may replace the old
+ one, on explicit permission from the previous publisher that added
+ the old one.
+
+ The author(s) and publisher(s) of the Document do not by this
+ License give permission to use their names for publicity for or to
+ assert or imply endorsement of any Modified Version.
+
+ 5. COMBINING DOCUMENTS
+
+ You may combine the Document with other documents released under
+ this License, under the terms defined in section 4 above for
+ modified versions, provided that you include in the combination all
+ of the Invariant Sections of all of the original documents,
+ unmodified, and list them all as Invariant Sections of your
+ combined work in its license notice, and that you preserve all
+ their Warranty Disclaimers.
+
+ The combined work need only contain one copy of this License, and
+ multiple identical Invariant Sections may be replaced with a single
+ copy. If there are multiple Invariant Sections with the same name
+ but different contents, make the title of each such section unique
+ by adding at the end of it, in parentheses, the name of the
+ original author or publisher of that section if known, or else a
+ unique number. Make the same adjustment to the section titles in
+ the list of Invariant Sections in the license notice of the
+ combined work.
+
+ In the combination, you must combine any sections Entitled
+ “History” in the various original documents, forming one section
+ Entitled “History”; likewise combine any sections Entitled
+ “Acknowledgements”, and any sections Entitled “Dedications”. You
+ must delete all sections Entitled “Endorsements.”
+
+ 6. COLLECTIONS OF DOCUMENTS
+
+ You may make a collection consisting of the Document and other
+ documents released under this License, and replace the individual
+ copies of this License in the various documents with a single copy
+ that is included in the collection, provided that you follow the
+ rules of this License for verbatim copying of each of the documents
+ in all other respects.
+
+ You may extract a single document from such a collection, and
+ distribute it individually under this License, provided you insert
+ a copy of this License into the extracted document, and follow this
+ License in all other respects regarding verbatim copying of that
+ document.
+
+ 7. AGGREGATION WITH INDEPENDENT WORKS
+
+ A compilation of the Document or its derivatives with other
+ separate and independent documents or works, in or on a volume of a
+ storage or distribution medium, is called an “aggregate” if the
+ copyright resulting from the compilation is not used to limit the
+ legal rights of the compilation’s users beyond what the individual
+ works permit. When the Document is included in an aggregate, this
+ License does not apply to the other works in the aggregate which
+ are not themselves derivative works of the Document.
+
+ If the Cover Text requirement of section 3 is applicable to these
+ copies of the Document, then if the Document is less than one half
+ of the entire aggregate, the Document’s Cover Texts may be placed
+ on covers that bracket the Document within the aggregate, or the
+ electronic equivalent of covers if the Document is in electronic
+ form. Otherwise they must appear on printed covers that bracket
+ the whole aggregate.
+
+ 8. TRANSLATION
+
+ Translation is considered a kind of modification, so you may
+ distribute translations of the Document under the terms of section
+ 4. Replacing Invariant Sections with translations requires special
+ permission from their copyright holders, but you may include
+ translations of some or all Invariant Sections in addition to the
+ original versions of these Invariant Sections. You may include a
+ translation of this License, and all the license notices in the
+ Document, and any Warranty Disclaimers, provided that you also
+ include the original English version of this License and the
+ original versions of those notices and disclaimers. In case of a
+ disagreement between the translation and the original version of
+ this License or a notice or disclaimer, the original version will
+ prevail.
+
+ If a section in the Document is Entitled “Acknowledgements”,
+ “Dedications”, or “History”, the requirement (section 4) to
+ Preserve its Title (section 1) will typically require changing the
+ actual title.
+
+ 9. TERMINATION
+
+ You may not copy, modify, sublicense, or distribute the Document
+ except as expressly provided under this License. Any attempt
+ otherwise to copy, modify, sublicense, or distribute it is void,
+ and will automatically terminate your rights under this License.
+
+ However, if you cease all violation of this License, then your
+ license from a particular copyright holder is reinstated (a)
+ provisionally, unless and until the copyright holder explicitly and
+ finally terminates your license, and (b) permanently, if the
+ copyright holder fails to notify you of the violation by some
+ reasonable means prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+ reinstated permanently if the copyright holder notifies you of the
+ violation by some reasonable means, this is the first time you have
+ received notice of violation of this License (for any work) from
+ that copyright holder, and you cure the violation prior to 30 days
+ after your receipt of the notice.
+
+ Termination of your rights under this section does not terminate
+ the licenses of parties who have received copies or rights from you
+ under this License. If your rights have been terminated and not
+ permanently reinstated, receipt of a copy of some or all of the
+ same material does not give you any rights to use it.
+
+ 10. FUTURE REVISIONS OF THIS LICENSE
+
+ The Free Software Foundation may publish new, revised versions of
+ the GNU Free Documentation License from time to time. Such new
+ versions will be similar in spirit to the present version, but may
+ differ in detail to address new problems or concerns. See
+ <https://www.gnu.org/licenses/>.
+
+ Each version of the License is given a distinguishing version
+ number. If the Document specifies that a particular numbered
+ version of this License “or any later version” applies to it, you
+ have the option of following the terms and conditions either of
+ that specified version or of any later version that has been
+ published (not as a draft) by the Free Software Foundation. If the
+ Document does not specify a version number of this License, you may
+ choose any version ever published (not as a draft) by the Free
+ Software Foundation. If the Document specifies that a proxy can
+ decide which future versions of this License can be used, that
+ proxy’s public statement of acceptance of a version permanently
+ authorizes you to choose that version for the Document.
+
+ 11. RELICENSING
+
+ “Massive Multiauthor Collaboration Site” (or “MMC Site”) means any
+ World Wide Web server that publishes copyrightable works and also
+ provides prominent facilities for anybody to edit those works. A
+ public wiki that anybody can edit is an example of such a server.
+ A “Massive Multiauthor Collaboration” (or “MMC”) contained in the
+ site means any set of copyrightable works thus published on the MMC
+ site.
+
+ “CC-BY-SA” means the Creative Commons Attribution-Share Alike 3.0
+ license published by Creative Commons Corporation, a not-for-profit
+ corporation with a principal place of business in San Francisco,
+ California, as well as future copyleft versions of that license
+ published by that same organization.
+
+ “Incorporate” means to publish or republish a Document, in whole or
+ in part, as part of another Document.
+
+ An MMC is “eligible for relicensing” if it is licensed under this
+ License, and if all works that were first published under this
+ License somewhere other than this MMC, and subsequently
+ incorporated in whole or in part into the MMC, (1) had no cover
+ texts or invariant sections, and (2) were thus incorporated prior
+ to November 1, 2008.
+
+ The operator of an MMC Site may republish an MMC contained in the
+ site under CC-BY-SA on the same site at any time before August 1,
+ 2009, provided the MMC is eligible for relicensing.
+
+ADDENDUM: How to use this License for your documents
+====================================================
+
+To use this License in a document you have written, include a copy of
+the License in the document and put the following copyright and license
+notices just after the title page:
+
+ Copyright (C) YEAR YOUR NAME.
+ Permission is granted to copy, distribute and/or modify this document
+ under the terms of the GNU Free Documentation License, Version 1.3
+ or any later version published by the Free Software Foundation;
+ with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
+ Texts. A copy of the license is included in the section entitled ``GNU
+ Free Documentation License''.
+
+ If you have Invariant Sections, Front-Cover Texts and Back-Cover
+Texts, replace the “with...Texts.” line with this:
+
+ with the Invariant Sections being LIST THEIR TITLES, with
+ the Front-Cover Texts being LIST, and with the Back-Cover Texts
+ being LIST.
+
+ If you have Invariant Sections without Cover Texts, or some other
+combination of the three, merge those two alternatives to suit the
+situation.
+
+ If your document contains nontrivial examples of program code, we
+recommend releasing these examples in parallel under your choice of free
+software license, such as the GNU General Public License, to permit
+their use in free software.
+
+
+File: docGYh7V6.info, Node: Indices, Prev: GNU Free Documentation License, Up: Top
+
+B Indices
+*********
+
+* Menu:
+
+* Function index::
+* Variable index::
+* Concept index::
+
+
+File: docGYh7V6.info, Node: Function index, Next: Variable index, Up: Indices
+
+B.1 Function index
+==================
+
+
+* Menu:
+
+* modus-themes-contrast: Measure color contrast.
+ (line 6)
+* modus-themes-get-color-value: Get a single color from the palette.
+ (line 8)
+* modus-themes-list-colors: Preview theme colors. (line 6)
+* modus-themes-list-colors-current: Preview theme colors. (line 12)
+* modus-themes-load-theme: Enable and load. (line 6)
+* modus-themes-preview-colors: Preview theme colors. (line 25)
+* modus-themes-preview-colors-current: Preview theme colors. (line 25)
+* modus-themes-toggle: Enable and load. (line 6)
+* modus-themes-wcag-formula: Measure color contrast.
+ (line 6)
+* modus-themes-with-colors: Use theme colors in code with modus-themes-with-colors.
+ (line 12)
+
+
+File: docGYh7V6.info, Node: Variable index, Next: Concept index, Prev: Function index, Up: Indices
+
+B.2 Variable index
+==================
+
+
+* Menu:
+
+* modus-operandi-deuteranopia-palette-overrides: Palette overrides.
+ (line 30)
+* modus-operandi-palette-overrides: Palette overrides. (line 28)
+* modus-operandi-tinted-palette-overrides: Palette overrides. (line 32)
+* modus-operandi-tritanopia-palette-overrides: Palette overrides.
+ (line 34)
+* modus-themes-after-load-theme-hook: Enable and load. (line 6)
+* modus-themes-bold-constructs: Bold constructs. (line 6)
+* modus-themes-common-palette-overrides: Palette overrides. (line 22)
+* modus-themes-completions: Completion UIs. (line 6)
+* modus-themes-custom-auto-reload: Custom reload theme. (line 6)
+* modus-themes-disable-other-themes: Disable other themes. (line 6)
+* modus-themes-headings: Heading styles. (line 6)
+* modus-themes-italic-constructs: Italic constructs. (line 6)
+* modus-themes-mixed-fonts: Mixed fonts. (line 6)
+* modus-themes-org-blocks: Org mode blocks. (line 6)
+* modus-themes-preset-overrides-cooler: Palette override presets.
+ (line 29)
+* modus-themes-preset-overrides-faint: Palette override presets.
+ (line 16)
+* modus-themes-preset-overrides-intense: Palette override presets.
+ (line 25)
+* modus-themes-preset-overrides-warmer: Palette override presets.
+ (line 29)
+* modus-themes-prompts: Command prompts. (line 6)
+* modus-themes-variable-pitch-ui: UI typeface. (line 6)
+* modus-vivendi-deuteranopia-palette-overrides: Palette overrides.
+ (line 38)
+* modus-vivendi-palette-overrides: Palette overrides. (line 36)
+* modus-vivendi-tinted-palette-overrides: Palette overrides. (line 40)
+* modus-vivendi-tritanopia-palette-overrides: Palette overrides.
+ (line 42)
+
+
+File: docGYh7V6.info, Node: Concept index, Prev: Variable index, Up: Indices
+
+B.3 Concept index
+=================
+
+
+* Menu:
+
+* Avoiding exaggerations in design: What does it mean to avoid exaggerations?.
+ (line 6)
+* Bold and italic fonts: Configure bold and italic faces.
+ (line 6)
+* Changelog: Learn about the latest changes.
+ (line 6)
+* Color accuracy of terminal emulators: More accurate colors in terminal emulators.
+ (line 6)
+* Color contrast: Measure color contrast.
+ (line 6)
+* Contrast between adjacent colors: Is the contrast ratio about adjacent colors?.
+ (line 6)
+* Contributing: Issues you can help with.
+ (line 6)
+* Contributors: Acknowledgements. (line 6)
+* Essential configuration: Enable and load. (line 6)
+* Explicitly supported packages: Supported packages. (line 6)
+* Font configurations: Font configurations for Org and others.
+ (line 6)
+* Fonts in EWW, Elfeed, Ement, and SHR: Note on SHR fonts. (line 6)
+* Frequently Asked Questions: Frequently Asked Questions.
+ (line 6)
+* General setup for readability: What is the best setup for legibility?.
+ (line 6)
+* Implicitly supported packages: Indirectly covered packages.
+ (line 6)
+* Innate color qualities of the palette: Why are colors mostly variants of blue magenta cyan?.
+ (line 6)
+* load-theme VS enable-theme: Differences between loading and enabling.
+ (line 6)
+* Org custom emphasis faces: Custom Org emphasis faces.
+ (line 6)
+* Org custom todo faces: Custom Org todo keyword and priority faces.
+ (line 6)
+* Porting the themes to other editors: Port the Modus themes to other platforms?.
+ (line 6)
+* Preview named colors or semantic color mappings: Preview theme colors.
+ (line 6)
+* Pure white and pure black in terminal emulators: Range of color with terminal emulators.
+ (line 6)
+* Remapping faces: Remap face with local value.
+ (line 6)
+* Remapping pdf-tools backdrop: Backdrop for pdf-tools.
+ (line 6)
+* sample configuration: Sample configuration with and without use-package.
+ (line 6)
+* Screenshots: How do the themes look like.
+ (line 6)
+* Sources of the themes: Sources of the themes. (line 6)
+* Switch themes without load-theme: Toggle themes without reloading them.
+ (line 6)
+* Themes, not color schemes: Are these color schemes?.
+ (line 6)
+* Use colors from the palette anywhere: Use theme colors in code with modus-themes-with-colors.
+ (line 6)
+* use-package configuration: Sample configuration with and without use-package.
+ (line 6)
+
+
+
+Tag Table:
+Node: Top869
+Node: Overview8121
+Node: How do the themes look like10890
+Node: Learn about the latest changes11246
+Node: Installation11631
+Node: Install manually from source12558
+Node: Install from the archives13380
+Node: Install on GNU/Linux13976
+Node: Debian 11 Bullseye14466
+Node: GNU Guix14873
+Node: Dealing with byte compilation errors15153
+Node: Enable and load16308
+Node: The require-theme for built-in Emacs themes19159
+Node: Sample configuration with and without use-package20276
+Node: Differences between loading and enabling23184
+Node: Customization options25219
+Node: Custom reload theme28964
+Node: Disable other themes29881
+Node: Bold constructs31076
+Node: Italic constructs31910
+Node: Mixed fonts32678
+Node: Command prompts33671
+Node: Completion UIs35473
+Node: Org mode blocks38272
+Node: Heading styles40174
+Node: UI typeface44525
+Node: Palette overrides45453
+Node: Advanced customization49785
+Node: Palette override presets51445
+Node: Stylistic variants using palette overrides54234
+Node: Make the mode line borderless56143
+Node: Make the active mode line colorful57742
+Node: Make the tab bar more or less colorful59684
+Node: Make the fringe invisible or another color61912
+Node: Make links use subtle or no underlines63403
+Node: Make prompts more or less colorful64397
+Node: Make completion matches more or less colorful66058
+Node: Make comments yellow and strings green69955
+Node: Make code syntax use the old alt-syntax style71855
+Node: Make use of alternative styles for code syntax75133
+Node: Make matching parenthesis more or less intense78794
+Node: Make box buttons more or less gray80227
+Node: Make TODO and DONE more or less intense81530
+Node: Make headings more or less colorful83230
+Node: Make Org agenda more or less colorful85627
+Node: Make inline code in prose use alternative styles89084
+Node: Make mail citations and headers more or less colorful91622
+Node: Make the region preserve text colors plus other styles94314
+Node: Make mouse highlights more or less colorful96122
+Node: Make language underlines less colorful97426
+Node: Make line numbers use alternative styles98869
+Node: Make diffs use only a foreground100803
+Node: Make deuteranopia diffs red and blue instead of yellow and blue103570
+Node: Make the themes look like what the maintainer uses105989
+Node: More accurate colors in terminal emulators110684
+Node: Range of color with terminal emulators111973
+Node: Preview theme colors114684
+Node: Per-theme customization settings116526
+Node: Get a single color from the palette117869
+Node: Use theme colors in code with modus-themes-with-colors120114
+Node: Do not extend the region background122444
+Node: Add padding to mode line123239
+Node: Remap face with local value125800
+Node: Font configurations for Org and others128220
+Ref: Font configurations for Org and others-Footnote-1131126
+Node: Configure bold and italic faces131313
+Node: Custom Org todo keyword and priority faces135467
+Node: Custom Org emphasis faces139183
+Node: Update Org block delimiter fontification144003
+Node: Measure color contrast145917
+Node: Load theme depending on time of day148612
+Node: Backdrop for pdf-tools149619
+Node: Toggle themes without reloading them152515
+Node: A theme-agnostic hook for theme loading153788
+Node: Use more spacious margins or padding in Emacs frames156238
+Node: Custom hl-todo colors160325
+Node: Add support for solaire-mode161860
+Node: Face coverage164768
+Node: Supported packages165217
+Node: Indirectly covered packages170775
+Node: Notes on individual packages172141
+Node: Note on calendarel weekday and weekend colors173238
+Node: Note on git-gutter in Doom Emacs174383
+Node: Note on php-mode multiline comments176721
+Node: Note on underlines in compilation buffers177471
+Node: Note on inline Latex in Org buffers178305
+Node: Note on dimmerel178912
+Node: Note on display-fill-column-indicator-mode180394
+Node: Note on highlight-parenthesesel181790
+Node: Note on mmm-modeel background colors187765
+Node: Note for prism190062
+Node: Note on company-mode overlay pop-up193227
+Ref: Note on company-mode overlay pop-up-Footnote-1193954
+Ref: Note on company-mode overlay pop-up-Footnote-2194021
+Node: Note on ERC escaped color sequences194076
+Ref: Note on ERC escaped color sequences-Footnote-1195501
+Node: Note on powerline or spaceline195611
+Node: Note on SHR colors196022
+Node: Note on SHR fonts196443
+Node: Note on Ement colors and fonts197085
+Node: Note on pdf-tools link hints198592
+Node: Note on the Notmuch logo201049
+Node: Note on goto-address-mode faces201584
+Node: Frequently Asked Questions202699
+Node: Is the contrast ratio about adjacent colors?203327
+Node: What does it mean to avoid exaggerations?204831
+Node: Why are colors mostly variants of blue magenta cyan?206678
+Node: What is the best setup for legibility?210981
+Node: Are these color schemes?213623
+Node: Port the Modus themes to other platforms?217302
+Node: Contributing220143
+Node: Sources of the themes220537
+Node: Issues you can help with221428
+Node: Patches require copyright assignment to the FSF222816
+Node: Acknowledgements225033
+Node: GNU Free Documentation License229166
+Node: Indices254527
+Node: Function index254703
+Node: Variable index255883
+Node: Concept index258336
+
+End Tag Table
+
+
+Local Variables:
+coding: utf-8
+End:
diff --git a/elpa/modus-themes-4.3.0/modus-vivendi-deuteranopia-theme.el b/elpa/modus-themes-4.3.0/modus-vivendi-deuteranopia-theme.el
@@ -0,0 +1,485 @@
+;;; modus-vivendi-deuteranopia-theme.el --- Deuteranopia-optimized theme with a black background -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA). Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(eval-and-compile
+ (unless (and (fboundp 'require-theme)
+ load-file-name
+ (equal (file-name-directory load-file-name)
+ (expand-file-name "themes/" data-directory))
+ (require-theme 'modus-themes t))
+ (require 'modus-themes))
+
+;;;###theme-autoload
+ (deftheme modus-vivendi-deuteranopia
+ "Deuteranopia-optimized theme with a black background.
+This variant is optimized for users with red-green color
+deficiency (deuteranopia). It conforms with the highest
+legibility standard for color contrast between background and
+foreground in any given piece of text, which corresponds to a
+minimum contrast in relative luminance of 7:1 (WCAG AAA
+standard)."
+ :background-mode 'dark
+ :kind 'color-scheme
+ :family 'modus)
+
+ (defconst modus-vivendi-deuteranopia-palette
+ '(
+;;; Basic values
+
+ (bg-main "#000000")
+ (bg-dim "#1e1e1e")
+ (fg-main "#ffffff")
+ (fg-dim "#989898")
+ (fg-alt "#c6daff")
+ (bg-active "#535353")
+ (bg-inactive "#303030")
+ (border "#646464")
+
+;;; Common accent foregrounds
+
+ (red "#ff5f59")
+ (red-warmer "#ff6b55")
+ (red-cooler "#ff7f9f")
+ (red-faint "#ff9580")
+ (red-intense "#ff5f5f")
+ (green "#44bc44")
+ (green-warmer "#70b900")
+ (green-cooler "#00c06f")
+ (green-faint "#88ca9f")
+ (green-intense "#44df44")
+ (yellow "#cabf00")
+ (yellow-warmer "#ffa00f")
+ (yellow-cooler "#d8af7a")
+ (yellow-faint "#d2b580")
+ (yellow-intense "#efef00")
+ (blue "#2fafff")
+ (blue-warmer "#79a8ff")
+ (blue-cooler "#00bcff")
+ (blue-faint "#82b0ec")
+ (blue-intense "#338fff")
+ (magenta "#feacd0")
+ (magenta-warmer "#f78fe7")
+ (magenta-cooler "#b6a0ff")
+ (magenta-faint "#caa6df")
+ (magenta-intense "#ff66ff")
+ (cyan "#00d3d0")
+ (cyan-warmer "#4ae2f0")
+ (cyan-cooler "#6ae4b9")
+ (cyan-faint "#9ac8e0")
+ (cyan-intense "#00eff0")
+
+;;; Uncommon accent foregrounds
+
+ (rust "#db7b5f")
+ (gold "#c0965b")
+ (olive "#9cbd6f")
+ (slate "#76afbf")
+ (indigo "#9099d9")
+ (maroon "#cf7fa7")
+ (pink "#d09dc0")
+
+;;; Common accent backgrounds
+
+ (bg-red-intense "#9d1f1f")
+ (bg-green-intense "#2f822f")
+ (bg-yellow-intense "#7a6100")
+ (bg-blue-intense "#1640b0")
+ (bg-magenta-intense "#7030af")
+ (bg-cyan-intense "#2266ae")
+
+ (bg-red-subtle "#620f2a")
+ (bg-green-subtle "#00422a")
+ (bg-yellow-subtle "#4a4000")
+ (bg-blue-subtle "#242679")
+ (bg-magenta-subtle "#552f5f")
+ (bg-cyan-subtle "#004065")
+
+ (bg-red-nuanced "#2c0614")
+ (bg-green-nuanced "#001904")
+ (bg-yellow-nuanced "#221000")
+ (bg-blue-nuanced "#0f0e39")
+ (bg-magenta-nuanced "#230631")
+ (bg-cyan-nuanced "#041529")
+
+;;; Uncommon accent backgrounds
+
+ (bg-ochre "#442c2f")
+ (bg-lavender "#38325c")
+ (bg-sage "#0f3d30")
+
+;;; Graphs
+
+ (bg-graph-red-0 "#bf6000")
+ (bg-graph-red-1 "#733500")
+ (bg-graph-green-0 "#6fbf8f")
+ (bg-graph-green-1 "#2f5f4f")
+ (bg-graph-yellow-0 "#c1c00a")
+ (bg-graph-yellow-1 "#7f6640")
+ (bg-graph-blue-0 "#0f90ef")
+ (bg-graph-blue-1 "#1f2f8f")
+ (bg-graph-magenta-0 "#7f7f8e")
+ (bg-graph-magenta-1 "#4f4f5f")
+ (bg-graph-cyan-0 "#376f9a")
+ (bg-graph-cyan-1 "#00404f")
+
+;;; Special purpose
+
+ (bg-completion "#2f447f")
+ (bg-hover "#45605e")
+ (bg-hover-secondary "#654a39")
+ (bg-hl-line "#2f3849")
+ (bg-region "#5a5a5a")
+ (fg-region "#ffffff")
+
+ (bg-char-0 "#0050af")
+ (bg-char-1 "#7f1f7f")
+ (bg-char-2 "#625a00")
+
+ (bg-mode-line-active "#2a2a6a")
+ (fg-mode-line-active "#f0f0f0")
+ (border-mode-line-active "#8080a7")
+ (bg-mode-line-inactive "#2d2d2d")
+ (fg-mode-line-inactive "#969696")
+ (border-mode-line-inactive "#606060")
+
+ (modeline-err "#e5bf00")
+ (modeline-warning "#c0cf35")
+ (modeline-info "#abeadf")
+
+ (bg-tab-bar "#313131")
+ (bg-tab-current "#000000")
+ (bg-tab-other "#545454")
+
+;;; Diffs
+
+ (bg-added "#003066")
+ (bg-added-faint "#001a4f")
+ (bg-added-refine "#0f4a77")
+ (bg-added-fringe "#006fff")
+ (fg-added "#c4d5ff")
+ (fg-added-intense "#8080ff")
+
+ (bg-changed "#2f123f")
+ (bg-changed-faint "#1f022f")
+ (bg-changed-refine "#3f325f")
+ (bg-changed-fringe "#7f55a0")
+ (fg-changed "#e3cfff")
+ (fg-changed-intense "#cf9fe2")
+
+ (bg-removed "#3d3d00")
+ (bg-removed-faint "#281f00")
+ (bg-removed-refine "#555500")
+ (bg-removed-fringe "#d0c03f")
+ (fg-removed "#d4d48f")
+ (fg-removed-intense "#d0b05f")
+
+ (bg-diff-context "#1a1a1a")
+
+;;; Paren match
+
+ (bg-paren-match "#2f7f9f")
+ (bg-paren-expression "#453040")
+ (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+ (fringe bg-dim)
+ (cursor yellow-intense)
+
+ (keybind blue-cooler)
+ (name blue-cooler)
+ (identifier yellow-faint)
+
+ (err yellow-warmer)
+ (warning yellow)
+ (info blue)
+
+ (underline-err yellow-intense)
+ (underline-warning magenta-faint)
+ (underline-note cyan)
+
+ (bg-prominent-err bg-yellow-intense)
+ (fg-prominent-err fg-main)
+ (bg-prominent-warning bg-magenta-intense)
+ (fg-prominent-warning fg-main)
+ (bg-prominent-note bg-cyan-intense)
+ (fg-prominent-note fg-main)
+
+;;;; Code mappings
+
+ (builtin magenta-warmer)
+ (comment yellow-cooler)
+ (constant blue-cooler)
+ (docstring cyan-faint)
+ (docmarkup magenta-faint)
+ (fnname magenta)
+ (keyword magenta-cooler)
+ (preprocessor red-cooler)
+ (string blue-warmer)
+ (type cyan-cooler)
+ (variable cyan)
+ (rx-construct yellow-cooler)
+ (rx-backslash blue-cooler)
+
+;;;; Accent mappings
+
+ (accent-0 blue-cooler)
+ (accent-1 yellow)
+ (accent-2 cyan-cooler)
+ (accent-3 magenta-warmer)
+
+;;;; Button mappings
+
+ (fg-button-active fg-main)
+ (fg-button-inactive fg-dim)
+ (bg-button-active bg-active)
+ (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+ (fg-completion-match-0 blue-cooler)
+ (fg-completion-match-1 yellow)
+ (fg-completion-match-2 cyan-cooler)
+ (fg-completion-match-3 magenta-warmer)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+ (date-common cyan)
+ (date-deadline yellow-warmer)
+ (date-event fg-alt)
+ (date-holiday yellow-warmer)
+ (date-holiday-other blue)
+ (date-now blue-faint)
+ (date-range fg-alt)
+ (date-scheduled yellow-cooler)
+ (date-weekday cyan)
+ (date-weekend yellow-faint)
+
+;;;; Line number mappings
+
+ (fg-line-number-inactive fg-dim)
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive bg-dim)
+ (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+ (fg-link blue-warmer)
+ (bg-link unspecified)
+ (underline-link blue-warmer)
+
+ (fg-link-symbolic cyan)
+ (bg-link-symbolic unspecified)
+ (underline-link-symbolic cyan)
+
+ (fg-link-visited yellow-faint)
+ (bg-link-visited unspecified)
+ (underline-link-visited yellow-faint)
+
+;;;; Mail mappings
+
+ (mail-cite-0 blue-warmer)
+ (mail-cite-1 yellow-cooler)
+ (mail-cite-2 cyan-faint)
+ (mail-cite-3 yellow)
+ (mail-part blue)
+ (mail-recipient blue)
+ (mail-subject yellow-warmer)
+ (mail-other cyan-faint)
+
+;;;; Mark mappings
+
+ (bg-mark-delete bg-yellow-subtle)
+ (fg-mark-delete yellow)
+ (bg-mark-select bg-cyan-subtle)
+ (fg-mark-select cyan)
+ (bg-mark-other bg-magenta-subtle)
+ (fg-mark-other magenta-warmer)
+
+;;;; Prompt mappings
+
+ (fg-prompt blue)
+ (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+ (prose-block fg-dim)
+ (prose-code cyan-cooler)
+ (prose-done blue)
+ (prose-macro magenta-cooler)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-tag magenta-faint)
+ (prose-todo yellow-warmer)
+ (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+ (rainbow-0 yellow-warmer)
+ (rainbow-1 blue)
+ (rainbow-2 yellow-cooler)
+ (rainbow-3 blue-warmer)
+ (rainbow-4 yellow)
+ (rainbow-5 cyan-warmer)
+ (rainbow-6 yellow-faint)
+ (rainbow-7 blue-faint)
+ (rainbow-8 magenta-faint)
+
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+ (bg-space-err bg-yellow-intense)
+
+;;;; Terminal mappings
+
+ (bg-term-black "black")
+ (fg-term-black "black")
+ (bg-term-black-bright "gray35")
+ (fg-term-black-bright "gray35")
+
+ (bg-term-red red)
+ (fg-term-red red)
+ (bg-term-red-bright red-warmer)
+ (fg-term-red-bright red-warmer)
+
+ (bg-term-green green)
+ (fg-term-green green)
+ (bg-term-green-bright green-cooler)
+ (fg-term-green-bright green-cooler)
+
+ (bg-term-yellow yellow)
+ (fg-term-yellow yellow)
+ (bg-term-yellow-bright yellow-warmer)
+ (fg-term-yellow-bright yellow-warmer)
+
+ (bg-term-blue blue)
+ (fg-term-blue blue)
+ (bg-term-blue-bright blue-warmer)
+ (fg-term-blue-bright blue-warmer)
+
+ (bg-term-magenta magenta)
+ (fg-term-magenta magenta)
+ (bg-term-magenta-bright magenta-cooler)
+ (fg-term-magenta-bright magenta-cooler)
+
+ (bg-term-cyan cyan)
+ (fg-term-cyan cyan)
+ (bg-term-cyan-bright cyan-cooler)
+ (fg-term-cyan-bright cyan-cooler)
+
+ (bg-term-white "gray65")
+ (fg-term-white "gray65")
+ (bg-term-white-bright "white")
+ (fg-term-white-bright "white")
+
+;;;; Heading mappings
+
+ (fg-heading-0 cyan-cooler)
+ (fg-heading-1 fg-main)
+ (fg-heading-2 yellow-faint)
+ (fg-heading-3 blue-faint)
+ (fg-heading-4 magenta)
+ (fg-heading-5 green-faint)
+ (fg-heading-6 red-faint)
+ (fg-heading-7 cyan-faint)
+ (fg-heading-8 fg-dim)
+
+ (bg-heading-0 unspecified)
+ (bg-heading-1 unspecified)
+ (bg-heading-2 unspecified)
+ (bg-heading-3 unspecified)
+ (bg-heading-4 unspecified)
+ (bg-heading-5 unspecified)
+ (bg-heading-6 unspecified)
+ (bg-heading-7 unspecified)
+ (bg-heading-8 unspecified)
+
+ (overline-heading-0 unspecified)
+ (overline-heading-1 unspecified)
+ (overline-heading-2 unspecified)
+ (overline-heading-3 unspecified)
+ (overline-heading-4 unspecified)
+ (overline-heading-5 unspecified)
+ (overline-heading-6 unspecified)
+ (overline-heading-7 unspecified)
+ (overline-heading-8 unspecified))
+ "The entire palette of the `modus-vivendi-deuteranopia' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols. The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.")
+
+ (defcustom modus-vivendi-deuteranopia-palette-overrides nil
+ "Overrides for `modus-vivendi-deuteranopia-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red. Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type '(repeat (list symbol (choice symbol string)))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Palette overrides"))
+
+ (modus-themes-theme modus-vivendi-deuteranopia
+ modus-vivendi-deuteranopia-palette
+ modus-vivendi-deuteranopia-palette-overrides)
+
+ (provide-theme 'modus-vivendi-deuteranopia))
+
+;;; modus-vivendi-deuteranopia-theme.el ends here
diff --git a/elpa/modus-themes-4.3.0/modus-vivendi-theme.el b/elpa/modus-themes-4.3.0/modus-vivendi-theme.el
@@ -0,0 +1,484 @@
+;;; modus-vivendi-theme.el --- Elegant, highly legible theme with a black background -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA). Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(eval-and-compile
+ (unless (and (fboundp 'require-theme)
+ load-file-name
+ (equal (file-name-directory load-file-name)
+ (expand-file-name "themes/" data-directory))
+ (require-theme 'modus-themes t))
+ (require 'modus-themes))
+
+;;;###theme-autoload
+ (deftheme modus-vivendi
+ "Elegant, highly legible theme with a black background.
+Conforms with the highest legibility standard for color contrast
+between background and foreground in any given piece of text,
+which corresponds to a minimum contrast in relative luminance of
+7:1 (WCAG AAA standard)."
+ :background-mode 'dark
+ :kind 'color-scheme
+ :family 'modus)
+
+ (defconst modus-vivendi-palette
+ '(
+;;; Basic values
+
+ (bg-main "#000000")
+ (bg-dim "#1e1e1e")
+ (fg-main "#ffffff")
+ (fg-dim "#989898")
+ (fg-alt "#c6daff")
+ (bg-active "#535353")
+ (bg-inactive "#303030")
+ (border "#646464")
+
+;;; Common accent foregrounds
+
+ (red "#ff5f59")
+ (red-warmer "#ff6b55")
+ (red-cooler "#ff7f9f")
+ (red-faint "#ff9580")
+ (red-intense "#ff5f5f")
+ (green "#44bc44")
+ (green-warmer "#70b900")
+ (green-cooler "#00c06f")
+ (green-faint "#88ca9f")
+ (green-intense "#44df44")
+ (yellow "#d0bc00")
+ (yellow-warmer "#fec43f")
+ (yellow-cooler "#dfaf7a")
+ (yellow-faint "#d2b580")
+ (yellow-intense "#efef00")
+ (blue "#2fafff")
+ (blue-warmer "#79a8ff")
+ (blue-cooler "#00bcff")
+ (blue-faint "#82b0ec")
+ (blue-intense "#338fff")
+ (magenta "#feacd0")
+ (magenta-warmer "#f78fe7")
+ (magenta-cooler "#b6a0ff")
+ (magenta-faint "#caa6df")
+ (magenta-intense "#ff66ff")
+ (cyan "#00d3d0")
+ (cyan-warmer "#4ae2f0")
+ (cyan-cooler "#6ae4b9")
+ (cyan-faint "#9ac8e0")
+ (cyan-intense "#00eff0")
+
+;;; Uncommon accent foregrounds
+
+ (rust "#db7b5f")
+ (gold "#c0965b")
+ (olive "#9cbd6f")
+ (slate "#76afbf")
+ (indigo "#9099d9")
+ (maroon "#cf7fa7")
+ (pink "#d09dc0")
+
+;;; Common accent backgrounds
+
+ (bg-red-intense "#9d1f1f")
+ (bg-green-intense "#2f822f")
+ (bg-yellow-intense "#7a6100")
+ (bg-blue-intense "#1640b0")
+ (bg-magenta-intense "#7030af")
+ (bg-cyan-intense "#2266ae")
+
+ (bg-red-subtle "#620f2a")
+ (bg-green-subtle "#00422a")
+ (bg-yellow-subtle "#4a4000")
+ (bg-blue-subtle "#242679")
+ (bg-magenta-subtle "#552f5f")
+ (bg-cyan-subtle "#004065")
+
+ (bg-red-nuanced "#2c0614")
+ (bg-green-nuanced "#001904")
+ (bg-yellow-nuanced "#221000")
+ (bg-blue-nuanced "#0f0e39")
+ (bg-magenta-nuanced "#230631")
+ (bg-cyan-nuanced "#041529")
+
+;;; Uncommon accent backgrounds
+
+ (bg-ochre "#442c2f")
+ (bg-lavender "#38325c")
+ (bg-sage "#0f3d30")
+
+;;; Graphs
+
+ (bg-graph-red-0 "#b52c2c")
+ (bg-graph-red-1 "#702020")
+ (bg-graph-green-0 "#0fed00")
+ (bg-graph-green-1 "#007800")
+ (bg-graph-yellow-0 "#f1e00a")
+ (bg-graph-yellow-1 "#b08940")
+ (bg-graph-blue-0 "#2fafef")
+ (bg-graph-blue-1 "#1f2f8f")
+ (bg-graph-magenta-0 "#bf94fe")
+ (bg-graph-magenta-1 "#5f509f")
+ (bg-graph-cyan-0 "#47dfea")
+ (bg-graph-cyan-1 "#00808f")
+
+;;; Special purpose
+
+ (bg-completion "#2f447f")
+ (bg-hover "#45605e")
+ (bg-hover-secondary "#654a39")
+ (bg-hl-line "#2f3849")
+ (bg-region "#5a5a5a")
+ (fg-region "#ffffff")
+
+ (bg-char-0 "#0050af")
+ (bg-char-1 "#7f1f7f")
+ (bg-char-2 "#625a00")
+
+ (bg-mode-line-active "#505050")
+ (fg-mode-line-active "#ffffff")
+ (border-mode-line-active "#959595")
+ (bg-mode-line-inactive "#2d2d2d")
+ (fg-mode-line-inactive "#969696")
+ (border-mode-line-inactive "#606060")
+
+ (modeline-err "#ffa9bf")
+ (modeline-warning "#dfcf43")
+ (modeline-info "#9fefff")
+
+ (bg-tab-bar "#313131")
+ (bg-tab-current "#000000")
+ (bg-tab-other "#545454")
+
+;;; Diffs
+
+ (bg-added "#00381f")
+ (bg-added-faint "#002910")
+ (bg-added-refine "#034f2f")
+ (bg-added-fringe "#237f3f")
+ (fg-added "#a0e0a0")
+ (fg-added-intense "#80e080")
+
+ (bg-changed "#363300")
+ (bg-changed-faint "#2a1f00")
+ (bg-changed-refine "#4a4a00")
+ (bg-changed-fringe "#8a7a00")
+ (fg-changed "#efef80")
+ (fg-changed-intense "#c0b05f")
+
+ (bg-removed "#4f1119")
+ (bg-removed-faint "#380a0f")
+ (bg-removed-refine "#781a1f")
+ (bg-removed-fringe "#b81a1f")
+ (fg-removed "#ffbfbf")
+ (fg-removed-intense "#ff9095")
+
+ (bg-diff-context "#1a1a1a")
+
+;;; Paren match
+
+ (bg-paren-match "#2f7f9f")
+ (bg-paren-expression "#453040")
+ (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+ (fringe bg-dim)
+ (cursor fg-main)
+
+ (keybind blue-cooler)
+ (name magenta)
+ (identifier yellow-faint)
+
+ (err red)
+ (warning yellow-warmer)
+ (info cyan-cooler)
+
+ (underline-err red-intense)
+ (underline-warning yellow)
+ (underline-note cyan)
+
+ (bg-prominent-err bg-red-intense)
+ (fg-prominent-err fg-main)
+ (bg-prominent-warning bg-yellow-intense)
+ (fg-prominent-warning fg-main)
+ (bg-prominent-note bg-cyan-intense)
+ (fg-prominent-note fg-main)
+
+;;;; Code mappings
+
+ (builtin magenta-warmer)
+ (comment fg-dim)
+ (constant blue-cooler)
+ (docstring cyan-faint)
+ (docmarkup magenta-faint)
+ (fnname magenta)
+ (keyword magenta-cooler)
+ (preprocessor red-cooler)
+ (string blue-warmer)
+ (type cyan-cooler)
+ (variable cyan)
+ (rx-construct green-cooler)
+ (rx-backslash magenta)
+
+;;;; Accent mappings
+
+ (accent-0 blue-cooler)
+ (accent-1 magenta-warmer)
+ (accent-2 cyan-cooler)
+ (accent-3 yellow)
+
+;;;; Button mappings
+
+ (fg-button-active fg-main)
+ (fg-button-inactive fg-dim)
+ (bg-button-active bg-active)
+ (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+ (fg-completion-match-0 blue-cooler)
+ (fg-completion-match-1 magenta-warmer)
+ (fg-completion-match-2 cyan-cooler)
+ (fg-completion-match-3 yellow)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+ (date-common cyan)
+ (date-deadline red)
+ (date-event fg-alt)
+ (date-holiday red-cooler)
+ (date-holiday-other blue)
+ (date-now fg-main)
+ (date-range fg-alt)
+ (date-scheduled yellow-warmer)
+ (date-weekday cyan)
+ (date-weekend red-faint)
+
+;;;; Line number mappings
+
+ (fg-line-number-inactive fg-dim)
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive bg-dim)
+ (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+ (fg-link blue-warmer)
+ (bg-link unspecified)
+ (underline-link blue-warmer)
+
+ (fg-link-symbolic cyan)
+ (bg-link-symbolic unspecified)
+ (underline-link-symbolic cyan)
+
+ (fg-link-visited magenta)
+ (bg-link-visited unspecified)
+ (underline-link-visited magenta)
+
+;;;; Mail mappings
+
+ (mail-cite-0 blue-warmer)
+ (mail-cite-1 yellow-cooler)
+ (mail-cite-2 cyan-cooler)
+ (mail-cite-3 red-cooler)
+ (mail-part blue)
+ (mail-recipient magenta-cooler)
+ (mail-subject magenta-warmer)
+ (mail-other magenta-faint)
+
+;;;; Mark mappings
+
+ (bg-mark-delete bg-red-subtle)
+ (fg-mark-delete red-cooler)
+ (bg-mark-select bg-cyan-subtle)
+ (fg-mark-select cyan)
+ (bg-mark-other bg-yellow-subtle)
+ (fg-mark-other yellow)
+
+;;;; Prompt mappings
+
+ (fg-prompt cyan-cooler)
+ (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+ (prose-block fg-dim)
+ (prose-code cyan-cooler)
+ (prose-done green)
+ (prose-macro magenta-cooler)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-tag magenta-faint)
+ (prose-todo red)
+ (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+ (rainbow-0 fg-main)
+ (rainbow-1 magenta-intense)
+ (rainbow-2 cyan-intense)
+ (rainbow-3 red-warmer)
+ (rainbow-4 yellow-intense)
+ (rainbow-5 magenta-cooler)
+ (rainbow-6 green-intense)
+ (rainbow-7 blue-warmer)
+ (rainbow-8 magenta-warmer)
+
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+ (bg-space-err bg-red-intense)
+
+;;;; Terminal mappings
+
+ (bg-term-black "black")
+ (fg-term-black "black")
+ (bg-term-black-bright "gray35")
+ (fg-term-black-bright "gray35")
+
+ (bg-term-red red)
+ (fg-term-red red)
+ (bg-term-red-bright red-warmer)
+ (fg-term-red-bright red-warmer)
+
+ (bg-term-green green)
+ (fg-term-green green)
+ (bg-term-green-bright green-cooler)
+ (fg-term-green-bright green-cooler)
+
+ (bg-term-yellow yellow)
+ (fg-term-yellow yellow)
+ (bg-term-yellow-bright yellow-warmer)
+ (fg-term-yellow-bright yellow-warmer)
+
+ (bg-term-blue blue)
+ (fg-term-blue blue)
+ (bg-term-blue-bright blue-warmer)
+ (fg-term-blue-bright blue-warmer)
+
+ (bg-term-magenta magenta)
+ (fg-term-magenta magenta)
+ (bg-term-magenta-bright magenta-cooler)
+ (fg-term-magenta-bright magenta-cooler)
+
+ (bg-term-cyan cyan)
+ (fg-term-cyan cyan)
+ (bg-term-cyan-bright cyan-cooler)
+ (fg-term-cyan-bright cyan-cooler)
+
+ (bg-term-white "gray65")
+ (fg-term-white "gray65")
+ (bg-term-white-bright "white")
+ (fg-term-white-bright "white")
+
+;;;; Heading mappings
+
+ (fg-heading-0 cyan-cooler)
+ (fg-heading-1 fg-main)
+ (fg-heading-2 yellow-faint)
+ (fg-heading-3 blue-faint)
+ (fg-heading-4 magenta)
+ (fg-heading-5 green-faint)
+ (fg-heading-6 red-faint)
+ (fg-heading-7 cyan-faint)
+ (fg-heading-8 fg-dim)
+
+ (bg-heading-0 unspecified)
+ (bg-heading-1 unspecified)
+ (bg-heading-2 unspecified)
+ (bg-heading-3 unspecified)
+ (bg-heading-4 unspecified)
+ (bg-heading-5 unspecified)
+ (bg-heading-6 unspecified)
+ (bg-heading-7 unspecified)
+ (bg-heading-8 unspecified)
+
+ (overline-heading-0 unspecified)
+ (overline-heading-1 unspecified)
+ (overline-heading-2 unspecified)
+ (overline-heading-3 unspecified)
+ (overline-heading-4 unspecified)
+ (overline-heading-5 unspecified)
+ (overline-heading-6 unspecified)
+ (overline-heading-7 unspecified)
+ (overline-heading-8 unspecified))
+ "The entire palette of the `modus-vivendi' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols. The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.")
+
+
+ (defcustom modus-vivendi-palette-overrides nil
+ "Overrides for `modus-vivendi-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red. Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type '(repeat (list symbol (choice symbol string)))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Palette overrides"))
+
+ (modus-themes-theme modus-vivendi
+ modus-vivendi-palette
+ modus-vivendi-palette-overrides)
+
+ (provide-theme 'modus-vivendi))
+
+;;; modus-vivendi-theme.el ends here
diff --git a/elpa/modus-themes-4.3.0/modus-vivendi-tinted-theme.el b/elpa/modus-themes-4.3.0/modus-vivendi-tinted-theme.el
@@ -0,0 +1,483 @@
+;;; modus-vivendi-tinted-theme.el --- Elegant, highly legible theme with a night sky background -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA). Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(eval-and-compile
+ (unless (and (fboundp 'require-theme)
+ load-file-name
+ (equal (file-name-directory load-file-name)
+ (expand-file-name "themes/" data-directory))
+ (require-theme 'modus-themes t))
+ (require 'modus-themes))
+
+;;;###theme-autoload
+ (deftheme modus-vivendi-tinted
+ "Elegant, highly legible theme with a night sky background.
+Conforms with the highest legibility standard for color contrast
+between background and foreground in any given piece of text,
+which corresponds to a minimum contrast in relative luminance of
+7:1 (WCAG AAA standard)."
+ :background-mode 'dark
+ :kind 'color-scheme
+ :family 'modus)
+
+ (defconst modus-vivendi-tinted-palette
+ '(
+;;; Basic values
+
+ (bg-main "#0d0e1c")
+ (bg-dim "#1d2235")
+ (fg-main "#ffffff")
+ (fg-dim "#989898")
+ (fg-alt "#c6daff")
+ (bg-active "#4a4f69")
+ (bg-inactive "#2b3045")
+ (border "#61647a")
+
+;;; Common accent foregrounds
+
+ (red "#ff5f59")
+ (red-warmer "#ff6b55")
+ (red-cooler "#ff7f9f")
+ (red-faint "#ff9f80")
+ (red-intense "#ff5f5f")
+ (green "#44bc44")
+ (green-warmer "#70b900")
+ (green-cooler "#00c06f")
+ (green-faint "#88ca9f")
+ (green-intense "#44df44")
+ (yellow "#d0bc00")
+ (yellow-warmer "#fec43f")
+ (yellow-cooler "#dfaf7a")
+ (yellow-faint "#d2b580")
+ (yellow-intense "#efef00")
+ (blue "#2fafff")
+ (blue-warmer "#79a8ff")
+ (blue-cooler "#00bcff")
+ (blue-faint "#82b0ec")
+ (blue-intense "#338fff")
+ (magenta "#feacd0")
+ (magenta-warmer "#f78fe7")
+ (magenta-cooler "#b6a0ff")
+ (magenta-faint "#caa6df")
+ (magenta-intense "#ff66ff")
+ (cyan "#00d3d0")
+ (cyan-warmer "#4ae2f0")
+ (cyan-cooler "#6ae4b9")
+ (cyan-faint "#9ac8e0")
+ (cyan-intense "#00eff0")
+
+;;; Uncommon accent foregrounds
+
+ (rust "#db7b5f")
+ (gold "#c0965b")
+ (olive "#9cbd6f")
+ (slate "#76afbf")
+ (indigo "#9099d9")
+ (maroon "#cf7fa7")
+ (pink "#d09dc0")
+
+;;; Common accent backgrounds
+
+ (bg-red-intense "#9d1f1f")
+ (bg-green-intense "#2f822f")
+ (bg-yellow-intense "#7a6100")
+ (bg-blue-intense "#1640b0")
+ (bg-magenta-intense "#7030af")
+ (bg-cyan-intense "#2266ae")
+
+ (bg-red-subtle "#620f2a")
+ (bg-green-subtle "#00422a")
+ (bg-yellow-subtle "#4a4000")
+ (bg-blue-subtle "#242679")
+ (bg-magenta-subtle "#552f5f")
+ (bg-cyan-subtle "#004065")
+
+ (bg-red-nuanced "#350f14")
+ (bg-green-nuanced "#002718")
+ (bg-yellow-nuanced "#2c1f00")
+ (bg-blue-nuanced "#131c4d")
+ (bg-magenta-nuanced "#2f133f")
+ (bg-cyan-nuanced "#04253f")
+
+;;; Graphs
+
+ (bg-graph-red-0 "#b52c2c")
+ (bg-graph-red-1 "#702020")
+ (bg-graph-green-0 "#0fed00")
+ (bg-graph-green-1 "#007800")
+ (bg-graph-yellow-0 "#f1e00a")
+ (bg-graph-yellow-1 "#b08940")
+ (bg-graph-blue-0 "#2fafef")
+ (bg-graph-blue-1 "#1f2f8f")
+ (bg-graph-magenta-0 "#bf94fe")
+ (bg-graph-magenta-1 "#5f509f")
+ (bg-graph-cyan-0 "#47dfea")
+ (bg-graph-cyan-1 "#00808f")
+
+;;; Special purpose
+
+ (bg-completion "#483d8a")
+ (bg-hover "#45605e")
+ (bg-hover-secondary "#654a39")
+ (bg-hl-line "#303a6f")
+ (bg-region "#555a66")
+ (fg-region "#ffffff")
+
+ (bg-char-0 "#0050af")
+ (bg-char-1 "#7f1f7f")
+ (bg-char-2 "#625a00")
+
+ (bg-mode-line-active "#484d67")
+ (fg-mode-line-active "#ffffff")
+ (border-mode-line-active "#979797")
+ (bg-mode-line-inactive "#292d48")
+ (fg-mode-line-inactive "#969696")
+ (border-mode-line-inactive "#606270")
+
+ (modeline-err "#ffa9bf")
+ (modeline-warning "#dfcf43")
+ (modeline-info "#9fefff")
+
+ (bg-tab-bar "#2c3045")
+ (bg-tab-current "#0d0e1c")
+ (bg-tab-other "#4a4f6a")
+
+;;; Diffs
+
+ (bg-added "#003a2f")
+ (bg-added-faint "#002922")
+ (bg-added-refine "#035542")
+ (bg-added-fringe "#23884f")
+ (fg-added "#a0e0a0")
+ (fg-added-intense "#80e080")
+
+ (bg-changed "#363300")
+ (bg-changed-faint "#2a1f00")
+ (bg-changed-refine "#4a4a00")
+ (bg-changed-fringe "#8f7a30")
+ (fg-changed "#efef80")
+ (fg-changed-intense "#c0b05f")
+
+ (bg-removed "#4f1127")
+ (bg-removed-faint "#380a19")
+ (bg-removed-refine "#781a3a")
+ (bg-removed-fringe "#b81a26")
+ (fg-removed "#ffbfbf")
+ (fg-removed-intense "#ff9095")
+
+ (bg-diff-context "#1a1f30")
+
+;;; Uncommon accent backgrounds
+
+ (bg-ochre "#442c2f")
+ (bg-lavender "#38325c")
+ (bg-sage "#0f3d30")
+
+;;; Paren match
+
+ (bg-paren-match "#2f7f9f")
+ (bg-paren-expression "#453040")
+ (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+ (fringe bg-dim)
+ (cursor magenta-warmer)
+
+ (keybind blue-cooler)
+ (name magenta)
+ (identifier yellow-faint)
+
+ (err red)
+ (warning yellow-warmer)
+ (info cyan-cooler)
+
+ (underline-err red-intense)
+ (underline-warning yellow)
+ (underline-note cyan)
+
+ (bg-prominent-err bg-red-intense)
+ (fg-prominent-err fg-main)
+ (bg-prominent-warning bg-yellow-intense)
+ (fg-prominent-warning fg-main)
+ (bg-prominent-note bg-cyan-intense)
+ (fg-prominent-note fg-main)
+
+;;;; Code mappings
+
+ (builtin magenta-warmer)
+ (comment red-faint)
+ (constant blue-cooler)
+ (docstring cyan-faint)
+ (docmarkup magenta-faint)
+ (fnname magenta)
+ (keyword magenta-cooler)
+ (preprocessor red-cooler)
+ (string blue-warmer)
+ (type cyan-cooler)
+ (variable cyan)
+ (rx-construct green-cooler)
+ (rx-backslash magenta)
+
+;;;; Accent mappings
+
+ (accent-0 blue-cooler)
+ (accent-1 magenta-warmer)
+ (accent-2 cyan-cooler)
+ (accent-3 yellow)
+
+;;;; Button mappings
+
+ (fg-button-active fg-main)
+ (fg-button-inactive fg-dim)
+ (bg-button-active bg-active)
+ (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+ (fg-completion-match-0 blue-cooler)
+ (fg-completion-match-1 magenta-warmer)
+ (fg-completion-match-2 cyan-cooler)
+ (fg-completion-match-3 yellow)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+ (date-common cyan)
+ (date-deadline red)
+ (date-event fg-alt)
+ (date-holiday red-cooler)
+ (date-holiday-other blue)
+ (date-now fg-main)
+ (date-range fg-alt)
+ (date-scheduled yellow-warmer)
+ (date-weekday cyan)
+ (date-weekend red-faint)
+
+;;;; Line number mappings
+
+ (fg-line-number-inactive fg-dim)
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive bg-dim)
+ (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+ (fg-link blue-warmer)
+ (bg-link unspecified)
+ (underline-link blue-warmer)
+
+ (fg-link-symbolic cyan)
+ (bg-link-symbolic unspecified)
+ (underline-link-symbolic cyan)
+
+ (fg-link-visited magenta)
+ (bg-link-visited unspecified)
+ (underline-link-visited magenta)
+
+;;;; Mail mappings
+
+ (mail-cite-0 blue-warmer)
+ (mail-cite-1 yellow-cooler)
+ (mail-cite-2 cyan-cooler)
+ (mail-cite-3 red-cooler)
+ (mail-part blue)
+ (mail-recipient magenta-cooler)
+ (mail-subject magenta-warmer)
+ (mail-other magenta-faint)
+
+;;;; Mark mappings
+
+ (bg-mark-delete bg-red-subtle)
+ (fg-mark-delete red-cooler)
+ (bg-mark-select bg-cyan-subtle)
+ (fg-mark-select cyan)
+ (bg-mark-other bg-yellow-subtle)
+ (fg-mark-other yellow)
+
+;;;; Prompt mappings
+
+ (fg-prompt cyan-cooler)
+ (bg-prompt unspecified)
+ (bg-space-err bg-red-intense)
+
+;;;; Prose mappings
+
+ (prose-block fg-dim)
+ (prose-code cyan-cooler)
+ (prose-done green)
+ (prose-macro magenta-cooler)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-tag magenta-faint)
+ (prose-todo red)
+ (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+ (rainbow-0 fg-main)
+ (rainbow-1 magenta-intense)
+ (rainbow-2 cyan-intense)
+ (rainbow-3 red-warmer)
+ (rainbow-4 yellow-intense)
+ (rainbow-5 magenta-cooler)
+ (rainbow-6 green-intense)
+ (rainbow-7 blue-warmer)
+ (rainbow-8 magenta-warmer)
+
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+
+;;;; Terminal mappings
+
+ (bg-term-black "black")
+ (fg-term-black "black")
+ (bg-term-black-bright "gray35")
+ (fg-term-black-bright "gray35")
+
+ (bg-term-red red)
+ (fg-term-red red)
+ (bg-term-red-bright red-warmer)
+ (fg-term-red-bright red-warmer)
+
+ (bg-term-green green)
+ (fg-term-green green)
+ (bg-term-green-bright green-cooler)
+ (fg-term-green-bright green-cooler)
+
+ (bg-term-yellow yellow)
+ (fg-term-yellow yellow)
+ (bg-term-yellow-bright yellow-warmer)
+ (fg-term-yellow-bright yellow-warmer)
+
+ (bg-term-blue blue)
+ (fg-term-blue blue)
+ (bg-term-blue-bright blue-warmer)
+ (fg-term-blue-bright blue-warmer)
+
+ (bg-term-magenta magenta)
+ (fg-term-magenta magenta)
+ (bg-term-magenta-bright magenta-cooler)
+ (fg-term-magenta-bright magenta-cooler)
+
+ (bg-term-cyan cyan)
+ (fg-term-cyan cyan)
+ (bg-term-cyan-bright cyan-cooler)
+ (fg-term-cyan-bright cyan-cooler)
+
+ (bg-term-white "gray65")
+ (fg-term-white "gray65")
+ (bg-term-white-bright "white")
+ (fg-term-white-bright "white")
+
+;;;; Heading mappings
+
+ (fg-heading-0 cyan-cooler)
+ (fg-heading-1 fg-main)
+ (fg-heading-2 yellow-faint)
+ (fg-heading-3 blue-faint)
+ (fg-heading-4 magenta)
+ (fg-heading-5 green-faint)
+ (fg-heading-6 red-faint)
+ (fg-heading-7 cyan-faint)
+ (fg-heading-8 fg-dim)
+
+ (bg-heading-0 unspecified)
+ (bg-heading-1 unspecified)
+ (bg-heading-2 unspecified)
+ (bg-heading-3 unspecified)
+ (bg-heading-4 unspecified)
+ (bg-heading-5 unspecified)
+ (bg-heading-6 unspecified)
+ (bg-heading-7 unspecified)
+ (bg-heading-8 unspecified)
+
+ (overline-heading-0 unspecified)
+ (overline-heading-1 unspecified)
+ (overline-heading-2 unspecified)
+ (overline-heading-3 unspecified)
+ (overline-heading-4 unspecified)
+ (overline-heading-5 unspecified)
+ (overline-heading-6 unspecified)
+ (overline-heading-7 unspecified)
+ (overline-heading-8 unspecified))
+ "The entire palette of the `modus-vivendi-tinted' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols. The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.")
+
+ (defcustom modus-vivendi-tinted-palette-overrides nil
+ "Overrides for `modus-vivendi-tinted-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red. Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type '(repeat (list symbol (choice symbol string)))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Palette overrides"))
+
+ (modus-themes-theme modus-vivendi-tinted
+ modus-vivendi-tinted-palette
+ modus-vivendi-tinted-palette-overrides)
+
+ (provide-theme 'modus-vivendi-tinted))
+
+;;; modus-vivendi-tinted-theme.el ends here
diff --git a/elpa/modus-themes-4.3.0/modus-vivendi-tritanopia-theme.el b/elpa/modus-themes-4.3.0/modus-vivendi-tritanopia-theme.el
@@ -0,0 +1,486 @@
+;;; modus-vivendi-tritanopia-theme.el --- Tritanopia-optimized theme with a black background -*- lexical-binding:t -*-
+
+;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
+
+;; Author: Protesilaos Stavrou <info@protesilaos.com>
+;; Maintainer: Modus-Themes Development <~protesilaos/modus-themes@lists.sr.ht>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing-List: https://lists.sr.ht/~protesilaos/modus-themes
+;; Keywords: faces, theme, accessibility
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+;;
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+;;
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+;;
+;; The Modus themes conform with the highest standard for
+;; color-contrast accessibility between background and foreground
+;; values (WCAG AAA). Please refer to the official Info manual for
+;; further documentation (distributed with the themes, or available
+;; at: <https://protesilaos.com/emacs/modus-themes>).
+
+;;; Code:
+
+
+
+(eval-and-compile
+ (unless (and (fboundp 'require-theme)
+ load-file-name
+ (equal (file-name-directory load-file-name)
+ (expand-file-name "themes/" data-directory))
+ (require-theme 'modus-themes t))
+ (require 'modus-themes))
+
+;;;###theme-autoload
+ (deftheme modus-vivendi-tritanopia
+ "Tritanopia-optimized theme with a black background.
+This variant is optimized for users with blue-yellow color
+deficiency (tritanopia). It conforms with the highest
+legibility standard for color contrast between background and
+foreground in any given piece of text, which corresponds to a
+minimum contrast in relative luminance of 7:1 (WCAG AAA
+standard)."
+ :background-mode 'dark
+ :kind 'color-scheme
+ :family 'modus)
+
+ (defconst modus-vivendi-tritanopia-palette
+ '(
+;;; Basic values
+
+ (bg-main "#000000")
+ (bg-dim "#1e1e1e")
+ (fg-main "#ffffff")
+ (fg-dim "#989898")
+ (fg-alt "#c6daff")
+ (bg-active "#535353")
+ (bg-inactive "#303030")
+ (border "#646464")
+
+;;; Common accent foregrounds
+
+ (red "#ff5f59")
+ (red-warmer "#ff6740")
+ (red-cooler "#ff6f9f")
+ (red-faint "#ff9070")
+ (red-intense "#ff5f5f")
+ (green "#44bc44")
+ (green-warmer "#70b900")
+ (green-cooler "#00c06f")
+ (green-faint "#88ca9f")
+ (green-intense "#44df44")
+ (yellow "#cabf00")
+ (yellow-warmer "#ffa00f")
+ (yellow-cooler "#d8af7a")
+ (yellow-faint "#d2b580")
+ (yellow-intense "#efef00")
+ (blue "#2fafff")
+ (blue-warmer "#79a8ff")
+ (blue-cooler "#00bcff")
+ (blue-faint "#82b0ec")
+ (blue-intense "#338fff")
+ (magenta "#feacd0")
+ (magenta-warmer "#f78fe7")
+ (magenta-cooler "#b6a0ff")
+ (magenta-faint "#caa6df")
+ (magenta-intense "#ef7fff")
+ (cyan "#00d3d0")
+ (cyan-warmer "#4ae2ff")
+ (cyan-cooler "#6ae4b9")
+ (cyan-faint "#7fdbdf")
+ (cyan-intense "#00eff0")
+
+;;; Uncommon accent foregrounds
+
+ (rust "#db7b5f")
+ (gold "#c0965b")
+ (olive "#9cbd6f")
+ (slate "#76afbf")
+ (indigo "#9099d9")
+ (maroon "#cf7fa7")
+ (pink "#d09dc0")
+
+;;; Common accent backgrounds
+
+ (bg-red-intense "#9d1f1f")
+ (bg-green-intense "#2f822f")
+ (bg-yellow-intense "#7a6100")
+ (bg-blue-intense "#1640b0")
+ (bg-magenta-intense "#7030af")
+ (bg-cyan-intense "#2266ae")
+
+ (bg-red-subtle "#620f2a")
+ (bg-green-subtle "#00422a")
+ (bg-yellow-subtle "#4a4000")
+ (bg-blue-subtle "#242679")
+ (bg-magenta-subtle "#552f5f")
+ (bg-cyan-subtle "#004065")
+
+ (bg-red-nuanced "#2c0614")
+ (bg-green-nuanced "#001904")
+ (bg-yellow-nuanced "#221000")
+ (bg-blue-nuanced "#0f0e39")
+ (bg-magenta-nuanced "#230631")
+ (bg-cyan-nuanced "#041529")
+
+;;; Uncommon accent backgrounds
+
+ (bg-ochre "#442c2f")
+ (bg-lavender "#38325c")
+ (bg-sage "#0f3d30")
+
+;;; Graphs
+
+ (bg-graph-red-0 "#b52c2c")
+ (bg-graph-red-1 "#702020")
+ (bg-graph-green-0 "#afd1c0")
+ (bg-graph-green-1 "#607a8f")
+ (bg-graph-yellow-0 "#facfd6")
+ (bg-graph-yellow-1 "#b57b85")
+ (bg-graph-blue-0 "#4f9fdf")
+ (bg-graph-blue-1 "#004559")
+ (bg-graph-magenta-0 "#b6427f")
+ (bg-graph-magenta-1 "#7f506f")
+ (bg-graph-cyan-0 "#57dfea")
+ (bg-graph-cyan-1 "#00808f")
+
+;;; Special purpose
+
+ (bg-completion "#004253")
+ (bg-hover "#8e3e3b")
+ (bg-hover-secondary "#00405f")
+ (bg-hl-line "#2f3849")
+ (bg-region "#5a5a5a")
+ (fg-region "#ffffff")
+
+ (bg-char-0 "#922a00")
+ (bg-char-1 "#00709f")
+ (bg-char-2 "#5f3faf")
+
+ (bg-mode-line-active "#003c52")
+ (fg-mode-line-active "#f0f0f0")
+ (border-mode-line-active "#5f8fb4")
+ (bg-mode-line-inactive "#2d2d2d")
+ (fg-mode-line-inactive "#969696")
+ (border-mode-line-inactive "#606060")
+
+ (modeline-err "#ff7fbf")
+ (modeline-warning "#df9f93")
+ (modeline-info "#4fcfef")
+
+ (bg-tab-bar "#313131")
+ (bg-tab-current "#000000")
+ (bg-tab-other "#545454")
+
+;;; Diffs
+
+ (bg-added "#004254")
+ (bg-added-faint "#003042")
+ (bg-added-refine "#004f7f")
+ (bg-added-fringe "#008fcf")
+ (fg-added "#9fdfdf")
+ (fg-added-intense "#50c0ef")
+
+ (bg-changed "#2f123f")
+ (bg-changed-faint "#1f022f")
+ (bg-changed-refine "#3f325f")
+ (bg-changed-fringe "#7f55a0")
+ (fg-changed "#e3cfff")
+ (fg-changed-intense "#cf9fe2")
+
+ (bg-removed "#4f1119")
+ (bg-removed-faint "#380a0f")
+ (bg-removed-refine "#781a1f")
+ (bg-removed-fringe "#b81a1f")
+ (fg-removed "#ffbfbf")
+ (fg-removed-intense "#ff9095")
+
+ (bg-diff-context "#1a1a1a")
+
+;;; Paren match
+
+ (bg-paren-match "#2f7f9f")
+ (bg-paren-expression "#453040")
+ (underline-paren-match unspecified)
+
+;;; Mappings
+
+;;;; General mappings
+
+ (fringe bg-dim)
+ (cursor red-intense)
+
+ (keybind red)
+ (name red-cooler)
+ (identifier red-faint)
+
+ (err red-warmer)
+ (warning magenta)
+ (info cyan)
+
+ (underline-err red-intense)
+ (underline-warning magenta-intense)
+ (underline-note cyan-intense)
+
+ (bg-prominent-err bg-red-intense)
+ (fg-prominent-err fg-main)
+ (bg-prominent-warning bg-magenta-intense)
+ (fg-prominent-warning fg-main)
+ (bg-prominent-note bg-cyan-intense)
+ (fg-prominent-note fg-main)
+
+;;;; Code mappings
+
+ (builtin magenta)
+ (comment red-faint)
+ (constant green-faint)
+ (docstring fg-alt)
+ (docmarkup magenta-faint)
+ (fnname cyan-warmer)
+ (keyword red-cooler)
+ (preprocessor red-warmer)
+ (string cyan)
+ (type blue-warmer)
+ (variable cyan-cooler)
+ (rx-construct red)
+ (rx-backslash magenta)
+
+;;;; Accent mappings
+
+ (accent-0 cyan)
+ (accent-1 red-warmer)
+ (accent-2 cyan-cooler)
+ (accent-3 magenta)
+
+;;;; Button mappings
+
+ (fg-button-active fg-main)
+ (fg-button-inactive fg-dim)
+ (bg-button-active bg-active)
+ (bg-button-inactive bg-dim)
+
+;;;; Completion mappings
+
+ (fg-completion-match-0 cyan)
+ (fg-completion-match-1 red-warmer)
+ (fg-completion-match-2 magenta)
+ (fg-completion-match-3 cyan-cooler)
+ (bg-completion-match-0 unspecified)
+ (bg-completion-match-1 unspecified)
+ (bg-completion-match-2 unspecified)
+ (bg-completion-match-3 unspecified)
+
+;;;; Date mappings
+
+ (date-common cyan-cooler)
+ (date-deadline red)
+ (date-event fg-alt)
+ (date-holiday red-intense)
+ (date-holiday-other cyan-warmer)
+ (date-now fg-main)
+ (date-range fg-alt)
+ (date-scheduled magenta)
+ (date-weekday cyan)
+ (date-weekend red-faint)
+
+;;;; Line number mappings
+
+ (fg-line-number-inactive fg-dim)
+ (fg-line-number-active fg-main)
+ (bg-line-number-inactive bg-dim)
+ (bg-line-number-active bg-active)
+
+;;;; Link mappings
+
+ (fg-link cyan)
+ (bg-link unspecified)
+ (underline-link cyan)
+
+ (fg-link-symbolic cyan-cooler)
+ (bg-link-symbolic unspecified)
+ (underline-link-symbolic cyan-cooler)
+
+ (fg-link-visited magenta)
+ (bg-link-visited unspecified)
+ (underline-link-visited magenta)
+
+;;;; Mail mappings
+
+ (mail-cite-0 cyan-faint)
+ (mail-cite-1 red-faint)
+ (mail-cite-2 magenta-warmer)
+ (mail-cite-3 cyan-warmer)
+ (mail-part cyan-cooler)
+ (mail-recipient cyan)
+ (mail-subject red-cooler)
+ (mail-other cyan)
+
+;;;; Mark mappings
+
+ (bg-mark-delete bg-red-subtle)
+ (fg-mark-delete red)
+ (bg-mark-select bg-cyan-subtle)
+ (fg-mark-select cyan)
+ (bg-mark-other bg-magenta-subtle)
+ (fg-mark-other magenta-warmer)
+
+;;;; Prompt mappings
+
+ (fg-prompt cyan-cooler)
+ (bg-prompt unspecified)
+
+;;;; Prose mappings
+
+ (prose-block fg-dim)
+ (prose-code cyan)
+ (prose-done cyan)
+ (prose-macro red-warmer)
+ (prose-metadata fg-dim)
+ (prose-metadata-value fg-alt)
+ (prose-table fg-alt)
+ (prose-tag fg-alt)
+ (prose-todo red)
+ (prose-verbatim magenta-warmer)
+
+;;;; Rainbow mappings
+
+ (rainbow-0 cyan)
+ (rainbow-1 red)
+ (rainbow-2 cyan-warmer)
+ (rainbow-3 red-cooler)
+ (rainbow-4 cyan-cooler)
+ (rainbow-5 magenta)
+ (rainbow-6 cyan-faint)
+ (rainbow-7 magenta-faint)
+ (rainbow-8 red-faint)
+
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+ (bg-space-err bg-red-intense)
+
+;;;; Terminal mappings
+
+ (bg-term-black "black")
+ (fg-term-black "black")
+ (bg-term-black-bright "gray35")
+ (fg-term-black-bright "gray35")
+
+ (bg-term-red red)
+ (fg-term-red red)
+ (bg-term-red-bright red-warmer)
+ (fg-term-red-bright red-warmer)
+
+ (bg-term-green green)
+ (fg-term-green green)
+ (bg-term-green-bright green-cooler)
+ (fg-term-green-bright green-cooler)
+
+ (bg-term-yellow yellow)
+ (fg-term-yellow yellow)
+ (bg-term-yellow-bright yellow-warmer)
+ (fg-term-yellow-bright yellow-warmer)
+
+ (bg-term-blue blue)
+ (fg-term-blue blue)
+ (bg-term-blue-bright blue-warmer)
+ (fg-term-blue-bright blue-warmer)
+
+ (bg-term-magenta magenta)
+ (fg-term-magenta magenta)
+ (bg-term-magenta-bright magenta-cooler)
+ (fg-term-magenta-bright magenta-cooler)
+
+ (bg-term-cyan cyan)
+ (fg-term-cyan cyan)
+ (bg-term-cyan-bright cyan-cooler)
+ (fg-term-cyan-bright cyan-cooler)
+
+ (bg-term-white "gray65")
+ (fg-term-white "gray65")
+ (bg-term-white-bright "white")
+ (fg-term-white-bright "white")
+
+;;;; Heading mappings
+
+ (fg-heading-0 cyan-cooler)
+ (fg-heading-1 fg-main)
+ (fg-heading-2 red-faint)
+ (fg-heading-3 cyan-faint)
+ (fg-heading-4 magenta)
+ (fg-heading-5 green-faint)
+ (fg-heading-6 magenta-faint)
+ (fg-heading-7 cyan-faint)
+ (fg-heading-8 fg-dim)
+
+ (bg-heading-0 unspecified)
+ (bg-heading-1 unspecified)
+ (bg-heading-2 unspecified)
+ (bg-heading-3 unspecified)
+ (bg-heading-4 unspecified)
+ (bg-heading-5 unspecified)
+ (bg-heading-6 unspecified)
+ (bg-heading-7 unspecified)
+ (bg-heading-8 unspecified)
+
+ (overline-heading-0 unspecified)
+ (overline-heading-1 unspecified)
+ (overline-heading-2 unspecified)
+ (overline-heading-3 unspecified)
+ (overline-heading-4 unspecified)
+ (overline-heading-5 unspecified)
+ (overline-heading-6 unspecified)
+ (overline-heading-7 unspecified)
+ (overline-heading-8 unspecified))
+ "The entire palette of the `modus-vivendi-tritanopia' theme.
+
+Named colors have the form (COLOR-NAME HEX-VALUE) with the former
+as a symbol and the latter as a string.
+
+Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
+with both as symbols. The latter is a named color that already
+exists in the palette and is associated with a HEX-VALUE.")
+
+ (defcustom modus-vivendi-tritanopia-palette-overrides nil
+ "Overrides for `modus-vivendi-tritanopia-palette'.
+
+Mirror the elements of the aforementioned palette, overriding
+their value.
+
+For overrides that are shared across all of the Modus themes,
+refer to `modus-themes-common-palette-overrides'.
+
+Theme-specific overrides take precedence over shared overrides.
+The idea of common overrides is to change semantic color
+mappings, such as to make the cursor red. Wherea theme-specific
+overrides can also be used to change the value of a named color,
+such as what hexadecimal RGB value the red-warmer symbol
+represents."
+ :group 'modus-themes
+ :package-version '(modus-themes . "4.0.0")
+ :version "30.1"
+ :type '(repeat (list symbol (choice symbol string)))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Palette overrides"))
+
+ (modus-themes-theme modus-vivendi-tritanopia
+ modus-vivendi-tritanopia-palette
+ modus-vivendi-tritanopia-palette-overrides)
+
+ (provide-theme 'modus-vivendi-tritanopia))
+
+;;; modus-vivendi-tritanopia-theme.el ends here
diff --git a/elpa/modus-themes-4.3.0/theme-loaddefs.el b/elpa/modus-themes-4.3.0/theme-loaddefs.el
@@ -0,0 +1,63 @@
+;;; theme-loaddefs.el --- automatically extracted autoloads (do not edit) -*- lexical-binding: t -*-
+;; Generated by the `loaddefs-generate' function.
+
+;; This file is part of GNU Emacs.
+
+;;; Code:
+
+(add-to-list 'load-path (or (and load-file-name (directory-file-name (file-name-directory load-file-name))) (car load-path)))
+
+
+
+;;; Generated autoloads from modus-operandi-deuteranopia-theme.el
+
+(put 'modus-operandi-deuteranopia 'theme-properties (list :background-mode 'light :kind 'color-scheme :family 'modus))
+
+
+;;; Generated autoloads from modus-operandi-theme.el
+
+(put 'modus-operandi 'theme-properties (list :background-mode 'light :kind 'color-scheme :family 'modus))
+
+
+;;; Generated autoloads from modus-operandi-tinted-theme.el
+
+(put 'modus-operandi-tinted 'theme-properties (list :background-mode 'light :kind 'color-scheme :family 'modus))
+
+
+;;; Generated autoloads from modus-operandi-tritanopia-theme.el
+
+(put 'modus-operandi-tritanopia 'theme-properties (list :background-mode 'light :kind 'color-scheme :family 'modus))
+
+
+;;; Generated autoloads from modus-vivendi-deuteranopia-theme.el
+
+(put 'modus-vivendi-deuteranopia 'theme-properties (list :background-mode 'dark :kind 'color-scheme :family 'modus))
+
+
+;;; Generated autoloads from modus-vivendi-theme.el
+
+(put 'modus-vivendi 'theme-properties (list :background-mode 'dark :kind 'color-scheme :family 'modus))
+
+
+;;; Generated autoloads from modus-vivendi-tinted-theme.el
+
+(put 'modus-vivendi-tinted 'theme-properties (list :background-mode 'dark :kind 'color-scheme :family 'modus))
+
+
+;;; Generated autoloads from modus-vivendi-tritanopia-theme.el
+
+(put 'modus-vivendi-tritanopia 'theme-properties (list :background-mode 'dark :kind 'color-scheme :family 'modus))
+
+;;; End of scraped data
+
+(provide 'theme-loaddefs)
+
+;; Local Variables:
+;; version-control: never
+;; no-byte-compile: t
+;; no-update-autoloads: t
+;; no-native-compile: t
+;; coding: utf-8-emacs-unix
+;; End:
+
+;;; theme-loaddefs.el ends here
diff --git a/init.el b/init.el
@@ -313,6 +313,9 @@
'(corfu-quit-at-boundary t)
'(create-lockfiles nil)
'(cursor-type 'bar)
+ '(custom-enabled-themes '(modus-operandi))
+ '(custom-safe-themes
+ '("3d94d6d1a1c23113a60c8496c9aed094dbc2695f219e8127bb168d17b1e6dab3" "4b026ac68a1aa4d1a91879b64f54c2490b4ecad8b64de5b1865bca0addd053d9" "58264887d7ab17702ef85bbd96e11bd7f613622ff9c63990be860b958c978f09" "611ef0918b8b413badb8055089b5499c1d4ac20f1861efba8f3bfcb36ad0a448" "15604b083d03519b0c2ed7b32da6d7b2dc2f6630bef62608def60cdcf9216184" "88cb0f9c0c11dbb4c26a628d35eb9239d1cf580cfd28e332e654e7f58b4e721b" "69f7e8101867cfac410e88140f8c51b4433b93680901bb0b52014144366a08c8" "21e3d55141186651571241c2ba3c665979d1e886f53b2e52411e9e96659132d4" default))
'(delete-old-versions t)
'(delete-selection-mode t)
'(denote-modules '(project xref ffap))
@@ -387,7 +390,7 @@
("melpa" . "https://melpa.org/packages/")))
'(package-pinned-packages '((sly . "melpa")))
'(package-selected-packages
- '(imenu-list diff-hl embark-consult embark all-the-icons-completion all-the-icons-ibuffer all-the-icons-dired sly-named-readtables sly-macrostep denote-refs denote-menu denote ox-epub ob-powershell powershell web-mode lexic editorconfig elfeed-tube-mpv elfeed-tube cider restclient-jq graphviz-dot-mode consult-eglot jq-mode ob-restclient restclient vterm deadgrep helpful pdf-tools paredit-menu paredit corfu sly eglot aggressive-indent project nov nhexl-mode elfeed magit yaml-mode json-mode lua-mode go-mode geiser-guile geiser org-contrib org ace-window expand-region consult marginalia uuidgen request diminish which-key))
+ '(modus-themes imenu-list diff-hl embark-consult embark all-the-icons-completion all-the-icons-ibuffer all-the-icons-dired sly-named-readtables sly-macrostep denote-refs denote-menu denote ox-epub ob-powershell powershell web-mode lexic editorconfig elfeed-tube-mpv elfeed-tube cider restclient-jq graphviz-dot-mode consult-eglot jq-mode ob-restclient restclient vterm deadgrep helpful pdf-tools paredit-menu paredit corfu sly eglot aggressive-indent project nov nhexl-mode elfeed magit yaml-mode json-mode lua-mode go-mode geiser-guile geiser org-contrib org ace-window expand-region consult marginalia uuidgen request diminish which-key))
'(pcomplete-ignore-case t t)
'(pixel-scroll-precision-mode t)
'(read-buffer-completion-ignore-case t)