* doc/misc/modus-themes.org: Update the manual.
* etc/themes/modus-operandi-tritanopia-theme.el:
* etc/themes/modus-vivendi-tritanopia-theme.el: Add new themes
optimized for users with blue-yellow color deficiency (tritanopia).
* etc/themes/modus-operandi-deuteranopia-theme.el:
* etc/themes/modus-operandi-theme.el:
* etc/themes/modus-operandi-tinted-theme.el:
* etc/themes/modus-vivendi-deuteranopia-theme.el:
* etc/themes/modus-vivendi-theme.el:
* etc/themes/modus-vivendi-tinted-theme.el: Update theme files.
* etc/themes/modus-themes.el: Update main file to the latest version.
* etc/NEWS: Rephrase the announcement about the new Modus themes to
also mention the tritanopia-optimized items.
Detailed release notes here:
<https://protesilaos.com/codelog/2023-05-30-modus-themes-4-2-0/>.
#+language: en
#+options: ':t toc:nil author:t email:t num:t
#+startup: content
-#+macro: stable-version 4.1.0
-#+macro: release-date 2023-02-22
-#+macro: development-version 4.2.0-dev
+#+macro: stable-version 4.2.0
+#+macro: release-date 2023-05-30
+#+macro: development-version 4.3.0-dev
#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
#+macro: space @@texinfo:@: @@
#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
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 six themes, divided into three subgroups.
+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
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 readability
-and stylistic considerations, we will always opt for the former.
+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.
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
#+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-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
#+end_src
The ~modus-operandi-palette-overrides~ targets the entries that need
-to be changed. For example, to make the main foreground colour a dark
+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:
For a video tutorial that users of all skill levels can approach,
watch: https://protesilaos.com/codelog/2022-12-17-modus-themes-v4-demo/.
-*** Palette override presets
+* 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 or tone down the overall coloration of the
-them.
+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:
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
,@modus-themes-preset-overrides-intense))
#+end_src
-*** Stylistic variants using palette overrides
+** Stylistic variants using palette overrides
:PROPERTIES:
:CUSTOM_ID: h:df1199d8-eaba-47db-805d-6b568a577bf3
:END:
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
+*** Make the mode line borderless
:PROPERTIES:
:CUSTOM_ID: h:80ddba52-e188-411f-8cc0-480ebd75befe
:END:
(border-mode-line-inactive bg-mode-line-inactive)))
#+end_src
-**** Make the active mode line colorful
+*** Make the active mode line colorful
:PROPERTIES:
:CUSTOM_ID: h:e8d781be-eefc-4a81-ac4e-5ed156190df7
:END:
(border-mode-line-active bg-red-subtle)))
#+end_src
-**** Make the tab bar more or less colorful
+*** Make the tab bar more or less colorful
:PROPERTIES:
:CUSTOM_ID: h:096658d7-a0bd-4a99-b6dc-9b20a20cda37
:END:
(bg-tab-other bg-cyan-subtle)))
#+end_src
-**** Make the fringe invisible or another color
+*** Make the fringe invisible or another color
:PROPERTIES:
:CUSTOM_ID: h:c312dcac-36b6-4a1f-b1f5-ab1c9abe27b0
:END:
'((fringe bg-blue-nuanced)))
#+end_src
-**** Make links use subtle or no underlines
+*** Make links use subtle or no underlines
:PROPERTIES:
:CUSTOM_ID: h:6c1d1dea-5cbf-4d92-b7bb-570a7a23ffe9
:END:
(underline-link-symbolic unspecified)))
#+end_src
-**** Make prompts more or less colorful
+*** Make prompts more or less colorful
:PROPERTIES:
:CUSTOM_ID: h:bd75b43a-0bf1-45e7-b8b4-20944ca8b7f8
:END:
(bg-prompt bg-yellow-subtle))) ; try to replace "subtle" with "intense"
#+end_src
-**** Make completion matches more or less colorful
+*** Make completion matches more or less colorful
:PROPERTIES:
:CUSTOM_ID: h:d959f789-0517-4636-8780-18123f936f91
:END:
The user can mix and match to their liking.
-**** Make comments yellow and strings green
+*** Make comments yellow and strings green
:PROPERTIES:
:CUSTOM_ID: h:26f53daa-0065-48dc-88ab-6a718d16cd95
:END:
(string yellow-cooler)))
#+end_src
-**** Make code syntax use the old alt-syntax style
+*** Make code syntax use the old alt-syntax style
:PROPERTIES:
:CUSTOM_ID: h:c8767172-bf11-4c96-81dc-e736c464fc9c
:END:
[[#h:943063da-7b27-4ba4-9afe-f8fe77652fd1][Make use of alternative styles for code syntax]].
-**** 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:
(variable cyan-warmer)))
#+end_src
-**** Make matching parenthesis more or less intense
+*** Make matching parenthesis more or less intense
:PROPERTIES:
:CUSTOM_ID: h:259cf8f5-48ec-4b13-8a69-5d6387094468
:END:
(underline-paren-match fg-main)))
#+end_src
-**** Make box buttons more or less gray
+*** Make box buttons more or less gray
:PROPERTIES:
:CUSTOM_ID: h:4f6b6ca3-f5bb-4830-8312-baa232305360
:END:
(fg-button-inactive "gray50")))
#+end_src
-**** Make TODO and DONE more or less intense
+*** Make TODO and DONE more or less intense
:PROPERTIES:
:CUSTOM_ID: h:b57bb50b-a863-4ea8-bb38-6de2275fa868
:END:
'((prose-done fg-dim)))
#+end_src
-**** Make headings more or less colorful
+*** Make headings more or less colorful
:PROPERTIES:
:CUSTOM_ID: h:11297984-85ea-4678-abe9-a73aeab4676a
:END:
(overline-heading-1 border)))
#+end_src
-**** Make Org agenda more or less colorful
+*** Make Org agenda more or less colorful
:PROPERTIES:
:CUSTOM_ID: h:a5af0452-a50f-481d-bf60-d8143f98105f
:END:
(date-weekend fg-dim)))
#+end_src
-**** Make inline code in prose use alternative styles
+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:
(prose-verbatim red-warmer)))
#+end_src
-**** Make mail citations and headers more or less colorful
+*** Make mail citations and headers more or less colorful
:PROPERTIES:
:CUSTOM_ID: h:7da7a4ad-5d3a-4f11-9796-5a1abed0f0c4
:END:
(mail-other green)))
#+end_src
-**** Make the region preserve text colors, plus other styles
+*** Make the region preserve text colors, plus other styles
:PROPERTIES:
:CUSTOM_ID: h:c8605d37-66e1-42aa-986e-d7514c3af6fe
:END:
(fg-region fg-main)))
#+end_src
-**** Make mouse highlights more or less colorful
+*** Make mouse highlights more or less colorful
:PROPERTIES:
:CUSTOM_ID: h:b5cab69d-d7cb-451c-8ff9-1f545ceb6caf
:END:
'((bg-hover bg-green-subtle)))
#+end_src
-**** Make language underlines less colorful
+*** Make language underlines less colorful
:PROPERTIES:
:CUSTOM_ID: h:03dbd5af-6bae-475e-85a2-cec189f69598
:END:
(underline-note green-intense)))
#+end_src
-**** Make line numbers use alternative styles
+*** Make line numbers use alternative styles
:PROPERTIES:
:CUSTOM_ID: h:b6466f51-cb58-4007-9ebe-53a27af655c7
:END:
(bg-line-number-active bg-cyan-intense)))
#+end_src
-**** Make diffs use only a foreground
+*** Make diffs use only a foreground
:PROPERTIES:
:CUSTOM_ID: h:b3761482-bcbf-4990-a41e-4866fb9dad15
:END:
just using the "common" overrides.
#+begin_src emacs-lisp
-;; Diffs with only foreground colours. Word-wise ("refined") diffs
+;; 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)
(fg-removed-intense yellow-intense)))
#+end_src
-**** Make deuteranopia diffs red and blue instead of yellow and blue
+*** Make deuteranopia diffs red and blue instead of yellow and blue
:PROPERTIES:
:CUSTOM_ID: h:16389ea1-4cb6-4b18-9409-384324113541
:END:
(fg-removed-intense "#ff9095")))
#+end_src
-* Advanced customization
-:properties:
-:custom_id: h:f4651d55-8c07-46aa-b52b-bed1e53463bb
-:end:
+*** Make the themes look like what the maintainer uses
+:PROPERTIES:
+:CUSTOM_ID: h:aabcada6-810d-4eee-b34a-d2a9c301824d
+: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]]).
+Based on what we have learnt from the previous sections of this
+manual, here is what Protesilaos uses:
-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".
+#+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:
[[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]].
-With optional =THEME= as a symbol among ~modus-themes-items~, use the
-palette of that item. Else use the current Modus theme.
+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
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:
+
+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
+ csv-mode
+ ctrlf
+ custom (what you get with {{{kbd(M-x customize)}}})
-- dashboard
++ dashboard
+ deadgrep
+ deft
+ devdocs
+ dired-narrow
+ dired-subtree
+ diredfl
++ disk-usage
+ display-fill-column-indicator-mode
+ doom-modeline
+ ediff
+ ivy*
+ ivy-posframe
+ jira (org-jira)
++ jit-spell
++ jinx
+ journalctl-mode
+ js2-mode
+ julia
+ minimap
+ mode-line
+ mood-line
-+ moody
+ mpdel
+ mu4e
+ multiple-cursors
+ rg (rg.el)
+ ripgrep
+ rmail
++ rst-mode
+ ruler-mode
+ sesman
+ shell-script-mode
;; 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))))))
+ `(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
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 color deficiency (deuteranopia)
-by avoiding red+green color coding paradigms and/or by providing
-yellow+blue variants ([[#h:f0f3dbcb-602d-40cf-b918-8f929c441baf][Overview]]).
+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.
+ 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, Eli Zaretskii, Fritz Grabo, Illia Ostapyshyn, Kévin
- Le Gouguec, Koen van Greevenbroek, Kostadin Ninev, Madhavan
- Krishnan, Manuel Giraud, Markus Beppler, Matthew Stevenson, Mauro
- Aranda, Nicolas De Jaeghere, Paul David, Philip Kaludercic, Pierre
- Téchoueyres, Rudolf Adamkovič, Sergey Nichiporchik, Stephen Gildea,
- Shreyas Ragavan, Stefan Kangas, Utkarsh Singh, Vincent Murphy,
- Xinglu Chen, Yuanchen Xie, okamsn.
+ 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 Gildea, Steve Downey, Tomasz Hołubowicz, Utkarsh Singh,
+ Vincent Murphy, Xinglu Chen, Yuanchen Xie, okamsn.
+ Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers,
Adrian Manea, Aleksei Pirogov, Alex Griffin, Alex Koen, Alex
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, 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, 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.
+ Murilo Pereira, Nicky van Foreest, Nicolas De Jaeghere, Nicolas
+ Semrau, 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
files.
---
-** The highly accessible Modus themes collection has six items.
+** The highly accessible Modus themes collection has eight items.
The 'modus-operandi' and 'modus-vivendi' are the main themes that have
been part of Emacs since version 28. The former is light, the latter
dark. In addition to these, we now have 'modus-operandi-tinted' and
'modus-vivendi-tinted' for easier legibility, as well as
-'modus-operandi-deuteranopia' and 'modus-vivendi-deuteranopia' to
-cover the needs of users with red-green color deficiency. The Info
-manual "(modus-themes) Top" describes the details and showcases all
-their customization options.
+'modus-operandi-deuteranopia', 'modus-vivendi-deuteranopia',
+'modus-operandi-tritanopia', and 'modus-vivendi-tritanopia' to cover
+the needs of users with red-green or blue-yellow color deficiency.
+The Info manual "(modus-themes) Top" describes the details and
+showcases all their customization options.
\f
* Incompatible Lisp Changes in Emacs 30.1
-;;; modus-operandi-deuteranopia-theme.el --- Elegant, highly legible and customizable light theme -*- lexical-binding:t -*-
+;;; modus-operandi-deuteranopia-theme.el --- Deuteranopia-optimized theme with a white background -*- lexical-binding:t -*-
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
(require 'modus-themes))
(deftheme modus-operandi-deuteranopia
- "Elegant, highly legible and customizable light theme.
+ "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
(green-cooler "#00663f")
(green-faint "#2a5045")
(green-intense "#008900")
- (yellow "#7b5000")
- (yellow-warmer "#884900")
- (yellow-cooler "#7a4f2f")
+ (yellow "#695500")
+ (yellow-warmer "#973300")
+ (yellow-cooler "#77492f")
(yellow-faint "#624416")
(yellow-intense "#808000")
(blue "#0031a9")
;;; Graphs
- (bg-graph-red-0 "#b0b029")
+ (bg-graph-red-0 "#d0b029")
(bg-graph-red-1 "#e0cab4")
- (bg-graph-green-0 "#90b7c0")
- (bg-graph-green-1 "#a3dfe5")
+ (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")
(identifier yellow-faint)
(err yellow-warmer)
- (warning yellow-cooler)
+ (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)
+ (comment yellow-cooler)
(constant blue-cooler)
(docstring green-faint)
(docmarkup magenta-faint)
(date-event fg-alt)
(date-holiday yellow-warmer)
(date-now blue-faint)
+ (date-range fg-alt)
(date-scheduled yellow-cooler)
(date-weekday cyan)
(date-weekend yellow-faint)
(mail-cite-0 blue-warmer)
(mail-cite-1 yellow)
- (mail-cite-2 blue-cooler)
+ (mail-cite-2 cyan-faint)
(mail-cite-3 yellow-faint)
(mail-part blue)
(mail-recipient blue)
- (mail-subject yellow-warmer)
+ (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)
(rainbow-7 yellow-faint)
(rainbow-8 cyan)
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+ (bg-space-err bg-yellow-intense)
+
;;;; Heading mappings
(fg-heading-0 cyan-cooler)
-;;; modus-operandi-theme.el --- Elegant, highly legible and customizable light theme -*- lexical-binding:t -*-
+;;; modus-operandi-theme.el --- Elegant, highly legible theme with a white background -*- lexical-binding:t -*-
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
(require 'modus-themes))
(deftheme modus-operandi
- "Elegant, highly legible and customizable light theme.
+ "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
(bg-graph-red-0 "#ef7969")
(bg-graph-red-1 "#ffaab4")
- (bg-graph-green-0 "#4faa09")
- (bg-graph-green-1 "#8fef00")
+ (bg-graph-green-0 "#2fe029")
+ (bg-graph-green-1 "#75ef30")
(bg-graph-yellow-0 "#ffcf00")
(bg-graph-yellow-1 "#f9ff00")
- (bg-graph-blue-0 "#7090ff")
+ (bg-graph-blue-0 "#7f90ff")
(bg-graph-blue-1 "#9fc6ff")
(bg-graph-magenta-0 "#e07fff")
(bg-graph-magenta-1 "#fad0ff")
(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)
(date-common cyan)
(date-deadline red)
(date-event fg-alt)
- (date-holiday magenta)
+ (date-holiday red-cooler)
(date-now fg-main)
+ (date-range fg-alt)
(date-scheduled yellow-warmer)
(date-weekday cyan)
(date-weekend red-faint)
(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)
(rainbow-7 blue-warmer)
(rainbow-8 magenta-warmer)
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+ (bg-space-err bg-red-intense)
+
;;;; Heading mappings
(fg-heading-0 cyan-cooler)
-;;; modus-operandi-tinted-theme.el --- Elegant, highly legible and customizable light theme -*- lexical-binding:t -*-
+;;; 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.
(require 'modus-themes))
(deftheme modus-operandi-tinted
- "Elegant, highly legible and customizable light theme.
+ "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
(bg-graph-red-0 "#ef7969")
(bg-graph-red-1 "#ffaab4")
- (bg-graph-green-0 "#4faa09")
- (bg-graph-green-1 "#8fef00")
+ (bg-graph-green-0 "#2fe029")
+ (bg-graph-green-1 "#75ef30")
(bg-graph-yellow-0 "#ffcf00")
(bg-graph-yellow-1 "#f9ff00")
- (bg-graph-blue-0 "#7090ff")
+ (bg-graph-blue-0 "#7f90ff")
(bg-graph-blue-1 "#9fc6ff")
(bg-graph-magenta-0 "#e07fff")
(bg-graph-magenta-1 "#fad0ff")
(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)
(date-common cyan)
(date-deadline red)
(date-event fg-alt)
- (date-holiday magenta)
+ (date-holiday red-cooler)
(date-now fg-main)
+ (date-range fg-alt)
(date-scheduled yellow-warmer)
(date-weekday cyan)
(date-weekend red-faint)
(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)
(rainbow-7 blue-warmer)
(rainbow-8 magenta-warmer)
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+ (bg-space-err bg-red-intense)
+
;;;; Heading mappings
(fg-heading-0 cyan-cooler)
--- /dev/null
+;;; 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:
+
+\f
+
+(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))
+
+ (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).")
+
+ (defconst modus-operandi-tritanopia-palette
+ '(
+;;; Basic values
+
+ (bg-main "#ffffff")
+ (bg-dim "#f0f0f0")
+ (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 "#ff8a5f")
+ (bg-char-1 "#bf7aff")
+ (bg-char-2 "#7fe0e0")
+
+ (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-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)
+
+;;;; 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))
+
+;;;###theme-autoload
+(put 'modus-operandi-tritanopia 'theme-properties '(:background-mode light :kind color-scheme :family modus))
+
+;;; modus-operandi-tritanopia-theme.el ends here
;; 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.1.0
+;; Version: 4.2.0
;; Package-Requires: ((emacs "27.1"))
;; Keywords: faces, theme, accessibility
"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
-themes also strive to empower users with red-green color
-deficiency: this is achieved through customization variables that
-replace all relevant instances of green with blue, as well as the
-overall design of the themes which relies mostly on colors that
-cover the blue-cyan-magenta side of the spectrum."
+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")
"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")
: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))
: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-deuteranopia modus-vivendi-deuteranopia
+ modus-operandi-tritanopia modus-vivendi-tritanopia)
"Symbols of the Modus themes.")
(defcustom modus-themes-to-toggle '(modus-operandi modus-vivendi)
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'.
-Also see `modus-themes-preset-overrides-intense'.
-
For overriding named colors and/or semantic color mappings read
Info node `(modus-themes) Option for palette overrides'.")
(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)
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'.
-Also see `modus-themes-preset-overrides-faint'.
+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 olive)
+ (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'.")
`modus-themes-disable-other-themes'.
Run the `modus-themes-after-load-theme-hook' as the final step
-after loading the THEME."
+after loading the THEME.
+
+Return THEME."
(modus-themes--disable-themes)
(load-theme theme :no-confirm)
- (run-hooks 'modus-themes-after-load-theme-hook))
+ (run-hooks 'modus-themes-after-load-theme-hook)
+ theme)
(defun modus-themes--retrieve-palette-value (color palette)
"Return COLOR from PALETTE.
(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."
+ (format " -- %s" (car (split-string (get (intern theme) 'theme-documentation) "\\."))))
+
(defun modus-themes--select-prompt ()
"Minibuffer prompt to select a Modus theme."
- (intern
- (completing-read
- "Select Modus theme: "
- (modus-themes--list-known-themes)
- nil t nil
- 'modus-themes--select-theme-history)))
+ (let ((completion-extra-properties `(:annotation-function ,#'modus-themes--annotate-theme)))
+ (intern
+ (completing-read
+ "Select Modus theme: "
+ (modus-themes--list-known-themes)
+ nil t nil
+ 'modus-themes--select-theme-history))))
;;;###autoload
(defun modus-themes-select (theme)
(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))))
+ (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--list-known-themes) nil t nil
`(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-yellow-subtle :foreground ,yellow)))
- `(modus-themes-mark-del ((,c :inherit bold :background ,bg-red-subtle :foreground ,red)))
- `(modus-themes-mark-sel ((,c :inherit bold :background ,bg-cyan-subtle :foreground ,cyan)))
+ `(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-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-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 ,border :background ,bg-button-active :foreground ,fg-button-active)))
+ `(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
`(default ((,c :background ,bg-main :foreground ,fg-main)))
`(cursor ((,c :background ,cursor)))
`(fringe ((,c :background ,fringe :foreground ,fg-main)))
- `(menu ((,c :background ,bg-tab-bar :foreground ,fg-main)))
- `(scroll-bar ((,c :background ,fringe :foreground ,fg-dim)))
- `(tool-bar ((,c :background ,bg-tab-bar :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
`(bold ((,c :weight bold)))
`(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-subtle-red :extend t)))
- `(pgtk-im-0 ((,c :inherit modus-themes-intense-cyan)))
+ `(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)))
`(separator-line ((,c :underline ,bg-active)))
`(shadow ((,c :foreground ,fg-dim)))
`(success ((,c :inherit bold :foreground ,info)))
- `(trailing-whitespace ((,c :background ,bg-red-intense)))
+ `(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)))
`(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-intense-red :underline t)))
+ `(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)))
`(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-intense-red bold))))
+ `(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-subtle-cyan)))
+ `(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-subtle-red)))
+ `(binder-sidebar-missing ((,c :inherit modus-themes-mark-del)))
`(binder-sidebar-tags ((,c :foreground ,variable)))
;;;;; bongo
`(bongo-album-title (( )))
`(calendar-today ((,c :inherit bold :underline t)))
`(calendar-weekday-header ((,c :foreground ,date-weekday)))
`(calendar-weekend-header ((,c :foreground ,date-weekend)))
- `(diary ((,c :background ,bg-dim :foreground ,accent-0)))
- `(diary-anniversary ((,c :foreground ,accent-1)))
+ `(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 colours for the transition 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)))
;;;;; clojure-mode
`(clojure-keyword-face ((,c :inherit font-lock-builtin-face)))
;;;;; column-enforce-mode
- `(column-enforce-face ((,c :inherit modus-themes-intense-yellow)))
+ `(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)))
;;;;; dired-git-info
`(dgi-commit-message-face ((,c :foreground ,docstring)))
;;;;; dired-narrow
- `(dired-narrow-blink ((,c :inherit (modus-themes-subtle-cyan bold))))
+ `(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
`(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-warning ((,c :inherit warning)))
;;;;; ediff
`(ediff-current-diff-A ((,c :background ,bg-removed :foreground ,fg-removed)))
- `(ediff-current-diff-Ancestor ((,c :background ,bg-region))) ; TODO 2022-11-29: Needs review
+ `(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)))
`(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)))
`(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 modus-themes-intense-red)))
+ `(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-timestamp-face ((,c :foreground ,date-common)))
`(erc-underline-face ((,c :underline t)))
;;;;; ert
- `(ert-test-result-expected ((,c :inherit modus-themes-intense-cyan)))
- `(ert-test-result-unexpected ((,c :inherit modus-themes-intense-red)))
+ `(ert-test-result-expected ((,c :inherit modus-themes-prominent-note)))
+ `(ert-test-result-unexpected ((,c :inherit modus-themes-prominent-error)))
;;;;; eshell
`(eshell-ls-archive ((,c :foreground ,accent-2)))
`(eshell-ls-backup ((,c :inherit shadow)))
`(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-intense-yellow :underline t)))
+ `(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)))
`(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-intense-red)))
- `(flycheck-fringe-info ((,c :inherit modus-themes-intense-cyan)))
- `(flycheck-fringe-warning ((,c :inherit modus-themes-intense-yellow)))
+ `(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-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)))
`(ido-subdir ((,c :foreground ,accent-0)))
`(ido-virtual ((,c :foreground ,accent-1)))
;;;;; iedit
- `(iedit-occurrence ((,c :inherit modus-themes-intense-blue)))
- `(iedit-read-only-occurrence ((,c :inherit modus-themes-intense-yellow)))
+ `(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-intense-red)))
+ `(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-intense-cyan)))
+ `(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)))
`(info-header-xref ((,c :foreground ,fg-link)))
`(info-index-match ((,c :inherit match)))
`(info-menu-header ((,c :inherit bold)))
- `(info-menu-star ((,c :foreground ,red-intense)))
+ `(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)))
`(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-intense-red)))
+ `(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-intense-red)))
+ `(query-replace ((,c :inherit modus-themes-prominent-error)))
;;;;; ivy
`(ivy-action ((,c :inherit modus-themes-key-binding)))
`(ivy-confirm-face ((,c :inherit success)))
`(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)))
`(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)))
`(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)))
`(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 modus-themes-intense-magenta)))
- `(powerline-evil-insert-face ((,c :inherit modus-themes-intense-green)))
- `(powerline-evil-motion-face ((,c :inherit modus-themes-intense-blue)))
- `(powerline-evil-normal-face ((,c :background ,fg-alt :foreground ,bg-main)))
- `(powerline-evil-operator-face ((,c :inherit modus-themes-intense-yellow)))
- `(powerline-evil-replace-face ((,c :inherit modus-themes-intense-red)))
- `(powerline-evil-visual-face ((,c :inherit modus-themes-intense-cyan)))
+ `(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)))
`(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-subtle-red)))
+ `(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-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-intense-yellow))))
- `(rainbow-delimiters-unmatched-face ((,c :inherit (bold modus-themes-intense-red))))
+ `(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)))
;;;;; 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)))
;;;;; 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-intense-red)))
+ `(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-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-subtle-red)))
+ `(shr-selected-link ((,c :inherit modus-themes-mark-sel)))
;;;;; side-notes
`(side-notes ((,c :background ,bg-dim :foreground ,fg-dim)))
;;;;; sieve-mode
`(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-intense-red)))
+ `(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)))
;;;;; smerge
`(smerge-base ((,c :inherit diff-changed)))
`(smerge-lower ((,c :inherit diff-added)))
- `(smerge-markers ((,c :inherit diff-heading)))
+ `(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)))
;; 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-intense-red)))
+ `(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)))
`(vr/match-1 ((,c :inherit modus-themes-intense-yellow)))
`(vr/match-separator-face ((,c :inherit bold :background ,bg-active)))
;;;;; vterm
- `(vterm-color-black ((,c :background "gray35" :foreground "gray35")))
- `(vterm-color-blue ((,c :background ,blue :foreground ,blue)))
- `(vterm-color-cyan ((,c :background ,cyan :foreground ,cyan)))
+ `(vterm-color-black ((,c :background "gray35" :foreground "black")))
+ `(vterm-color-blue ((,c :background ,blue-warmer :foreground ,blue)))
+ `(vterm-color-cyan ((,c :background ,cyan-cooler :foreground ,cyan)))
`(vterm-color-default ((,c :background ,bg-main :foreground ,fg-main)))
- `(vterm-color-green ((,c :background ,green :foreground ,green)))
+ `(vterm-color-green ((,c :background ,green-cooler :foreground ,green)))
`(vterm-color-inverse-video ((,c :background ,bg-main :inverse-video t)))
- `(vterm-color-magenta ((,c :background ,magenta :foreground ,magenta)))
- `(vterm-color-red ((,c :background ,red :foreground ,red)))
+ `(vterm-color-magenta ((,c :background ,magenta-cooler :foreground ,magenta)))
+ `(vterm-color-red ((,c :background ,red-warmer :foreground ,red)))
`(vterm-color-underline ((,c :underline t)))
- `(vterm-color-white ((,c :background "gray65" :foreground "gray65")))
- `(vterm-color-yellow ((,c :background ,yellow :foreground ,yellow)))
+ `(vterm-color-white ((,c :background "white" :foreground "gray65")))
+ `(vterm-color-yellow ((,c :background ,yellow-warmer :foreground ,yellow)))
;;;;; vundo
- `(vundo-highlight ((,c :inherit (bold vundo-node) :foreground ,red-intense)))
+ `(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-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 modus-themes-intense-red)))
+ `(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-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 font-lock-warning-face)))
+ `(web-mode-warning-face ((,c :inherit warning)))
`(web-mode-whitespace-face ((,c :background ,bg-inactive)))
;;;;; wgrep
`(wgrep-delete-face ((,c :inherit warning)))
`(which-func ((,c :inherit bold :foreground ,modeline-info)))
;;;;; which-key
`(which-key-command-description-face ((,c :foreground ,fg-main)))
- `(which-key-group-description-face ((,c :foreground ,err)))
+ `(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-separator-face ((,c :inherit shadow)))
`(which-key-special-key-face ((,c :inherit error)))
;;;;; whitespace-mode
- `(whitespace-big-indent ((,c :inherit modus-themes-subtle-red)))
+ `(whitespace-big-indent ((,c :background ,bg-space-err)))
`(whitespace-empty ((,c :inherit modus-themes-intense-magenta)))
- `(whitespace-hspace ((,c :background ,bg-dim :foreground ,fg-dim)))
- `(whitespace-indentation ((,c :background ,bg-dim :foreground ,fg-dim)))
- `(whitespace-line ((,c :inherit modus-themes-subtle-yellow)))
- `(whitespace-newline ((,c :background ,bg-dim :foreground ,fg-dim)))
- `(whitespace-space ((,c :background ,bg-dim :foreground ,fg-dim)))
+ `(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-dim :foreground ,fg-dim)))
- `(whitespace-trailing ((,c :inherit modus-themes-intense-red)))
+ `(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-buton :foreground ,fg-link-visited)))
+ `(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)))
`(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 :inherit modus-themes-intense-red)))
+ `(yaml-tab-face ((,c :background ,bg-space-err)))
;;;;; yasnippet
`(yas-field-highlight-face ((,c :inherit highlight))))
"Face specs for use with `modus-themes-theme'.")
;;;; exwm
`(exwm-floating-border-color ,border)
;;;; flymake fringe indicators
- `(flymake-error-bitmap '(flymake-double-exclamation-mark modus-themes-intense-red))
- `(flymake-warning-bitmap '(exclamation-mark modus-themes-intense-yellow))
- `(flymake-note-bitmap '(exclamation-mark modus-themes-intense-cyan))
+ `(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))
-;;; modus-vivendi-deuteranopia-theme.el --- Elegant, highly legible and customizable dark theme -*- lexical-binding:t -*-
+;;; modus-vivendi-deuteranopia-theme.el --- Deuteranopia-optimized theme with a black background -*- lexical-binding:t -*-
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
(require 'modus-themes))
(deftheme modus-vivendi-deuteranopia
- "Elegant, highly legible and customizable dark theme.
+ "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
(green-cooler "#00c06f")
(green-faint "#88ca9f")
(green-intense "#44df44")
- (yellow "#d0bc00")
- (yellow-warmer "#fec43f")
- (yellow-cooler "#dfaf7a")
+ (yellow "#cabf00")
+ (yellow-warmer "#ffa00f")
+ (yellow-cooler "#d8af7a")
(yellow-faint "#d2b580")
(yellow-intense "#efef00")
(blue "#2fafff")
;;; Graphs
- (bg-graph-red-0 "#705c3c")
- (bg-graph-red-1 "#504420")
- (bg-graph-green-0 "#4f666f")
- (bg-graph-green-1 "#204840")
+ (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 "#6f6f00")
- (bg-graph-blue-0 "#2fafef")
+ (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")
(identifier yellow-faint)
(err yellow-warmer)
- (warning yellow-cooler)
+ (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)
(date-event fg-alt)
(date-holiday yellow-warmer)
(date-now blue-faint)
+ (date-range fg-alt)
(date-scheduled yellow-cooler)
(date-weekday cyan)
(date-weekend yellow-faint)
(mail-cite-0 blue-warmer)
(mail-cite-1 yellow-cooler)
- (mail-cite-2 blue-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)
(rainbow-7 blue-faint)
(rainbow-8 magenta-faint)
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+ (bg-space-err bg-yellow-intense)
+
;;;; Heading mappings
(fg-heading-0 cyan-cooler)
-;;; modus-vivendi-theme.el --- Elegant, highly legible and customizable dark theme -*- lexical-binding:t -*-
+;;; modus-vivendi-theme.el --- Elegant, highly legible theme with a black background -*- lexical-binding:t -*-
;; Copyright (C) 2019-2023 Free Software Foundation, Inc.
(require 'modus-themes))
(deftheme modus-vivendi
- "Elegant, highly legible and customizable dark theme.
+ "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
(bg-graph-red-0 "#b52c2c")
(bg-graph-red-1 "#702020")
- (bg-graph-green-0 "#4fd100")
+ (bg-graph-green-0 "#0fed00")
(bg-graph-green-1 "#007800")
(bg-graph-yellow-0 "#f1e00a")
- (bg-graph-yellow-1 "#b08600")
+ (bg-graph-yellow-1 "#b08940")
(bg-graph-blue-0 "#2fafef")
(bg-graph-blue-1 "#1f2f8f")
(bg-graph-magenta-0 "#bf94fe")
(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)
(date-common cyan)
(date-deadline red)
(date-event fg-alt)
- (date-holiday magenta)
+ (date-holiday red-cooler)
(date-now fg-main)
+ (date-range fg-alt)
(date-scheduled yellow-warmer)
(date-weekday cyan)
(date-weekend red-faint)
(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)
(rainbow-7 blue-warmer)
(rainbow-8 magenta-warmer)
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+ (bg-space-err bg-red-intense)
+
;;;; Heading mappings
(fg-heading-0 cyan-cooler)
-;;; modus-vivendi-tinted-theme.el --- Elegant, highly legible and customizable dark theme -*- lexical-binding:t -*-
+;;; 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.
(require 'modus-themes))
(deftheme modus-vivendi-tinted
- "Elegant, highly legible and customizable dark theme.
+ "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
(bg-graph-red-0 "#b52c2c")
(bg-graph-red-1 "#702020")
- (bg-graph-green-0 "#4fd100")
+ (bg-graph-green-0 "#0fed00")
(bg-graph-green-1 "#007800")
(bg-graph-yellow-0 "#f1e00a")
- (bg-graph-yellow-1 "#b08600")
+ (bg-graph-yellow-1 "#b08940")
(bg-graph-blue-0 "#2fafef")
(bg-graph-blue-1 "#1f2f8f")
(bg-graph-magenta-0 "#bf94fe")
(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)
(date-common cyan)
(date-deadline red)
(date-event fg-alt)
- (date-holiday magenta)
+ (date-holiday red-cooler)
(date-now fg-main)
+ (date-range fg-alt)
(date-scheduled yellow-warmer)
(date-weekday cyan)
(date-weekend red-faint)
(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
(rainbow-7 blue-warmer)
(rainbow-8 magenta-warmer)
+;;;; Space mappings
+
+ (bg-space unspecified)
+ (fg-space border)
+
;;;; Heading mappings
(fg-heading-0 cyan-cooler)
--- /dev/null
+;;; 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
+
+;; 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:
+
+\f
+
+(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))
+
+ (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).")
+
+ (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 "#4f3f7f")
+ (bg-char-2 "#00709f")
+
+ (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-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)
+
+;;;; 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))
+
+;;;###theme-autoload
+(put 'modus-vivendi-tritanopia 'theme-properties '(:background-mode dark :kind color-scheme :family modus))
+
+;;; modus-vivendi-tritanopia-theme.el ends here