aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorProtesilaos Stavrou2024-08-21 11:07:47 +0300
committerProtesilaos Stavrou2024-08-21 11:07:47 +0300
commit3efb89ddb9633569a1ef3a4a7ffad0ce68e1ef29 (patch)
tree802d99ca72a75f93cf70d57c8ff8dc9040c4208b
parent53ea5f1df411aa349fb99d6b444d433a42ded594 (diff)
downloademacs-3efb89ddb9633569a1ef3a4a7ffad0ce68e1ef29.tar.gz
emacs-3efb89ddb9633569a1ef3a4a7ffad0ce68e1ef29.zip
Update to modus-themes version 4.5.0
* doc/misc/modus-themes.org (COPYING): Update the version headers. (Option to extend the palette): Document new user options. (Full support for packages or face groups): Document more packages that are explicitly supported by the themes. (Acknowledgements): Update the list of people who have contributed to the project in one way or another. * etc/themes/modus-operandi-deuteranopia-theme.el: * etc/themes/modus-operandi-deuteranopia-theme.el: * etc/themes/modus-operandi-tinted-theme.el: * etc/themes/modus-operandi-tritanopia-theme.el: * etc/themes/modus-vivendi-deuteranopia-theme.el: * etc/themes/modus-vivendi-theme.el: * etc/themes/modus-vivendi-tinted-theme.el: * etc/themes/modus-vivendi-tritanopia-theme.el: Update the palette of each theme and include the new user option to extend its palette. * etc/themes/modus-themes.el: Cover more faces and include user option for common extension to all theme palettes. Detailed release notes: <https://protesilaos.com/codelog/2024-08-21-modus-themes-4-5-0/>.
-rw-r--r--doc/misc/modus-themes.org251
-rw-r--r--etc/themes/modus-operandi-deuteranopia-theme.el42
-rw-r--r--etc/themes/modus-operandi-theme.el42
-rw-r--r--etc/themes/modus-operandi-tinted-theme.el46
-rw-r--r--etc/themes/modus-operandi-tritanopia-theme.el44
-rw-r--r--etc/themes/modus-themes.el106
-rw-r--r--etc/themes/modus-vivendi-deuteranopia-theme.el38
-rw-r--r--etc/themes/modus-vivendi-theme.el38
-rw-r--r--etc/themes/modus-vivendi-tinted-theme.el38
-rw-r--r--etc/themes/modus-vivendi-tritanopia-theme.el38
10 files changed, 523 insertions, 160 deletions
diff --git a/doc/misc/modus-themes.org b/doc/misc/modus-themes.org
index 70ba8cdc02f..c02da3fbad1 100644
--- a/doc/misc/modus-themes.org
+++ b/doc/misc/modus-themes.org
@@ -4,9 +4,9 @@
4#+language: en 4#+language: en
5#+options: ':t toc:nil author:t email:t num:t 5#+options: ':t toc:nil author:t email:t num:t
6#+startup: content 6#+startup: content
7#+macro: stable-version 4.4.0 7#+macro: stable-version 4.5.0
8#+macro: release-date 2024-03-17 8#+macro: release-date 2024-08-21
9#+macro: development-version 4.5.0-dev 9#+macro: development-version 4.6.0-dev
10#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@ 10#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
11#+macro: space @@texinfo:@: @@ 11#+macro: space @@texinfo:@: @@
12#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@ 12#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
@@ -50,7 +50,7 @@ Current development target is {{{development-version}}}.
50:custom_id: h:b14c3fcb-13dd-4144-9d92-2c58b3ed16d3 50:custom_id: h:b14c3fcb-13dd-4144-9d92-2c58b3ed16d3
51:end: 51:end:
52 52
53Copyright (C) 2020-2024 Free Software Foundation, Inc. 53Copyright (C) 2020-2023 Free Software Foundation, Inc.
54 54
55#+begin_quote 55#+begin_quote
56Permission is granted to copy, distribute and/or modify this document 56Permission is granted to copy, distribute and/or modify this document
@@ -88,7 +88,7 @@ The Modus themes consist of eight themes, divided into four subgroups.
88 are variants of the two main themes. They slightly tone down the 88 are variants of the two main themes. They slightly tone down the
89 intensity of the background and provide a bit more color variety. 89 intensity of the background and provide a bit more color variety.
90 ~modus-operandi-tinted~ has a set of base tones that are shades of 90 ~modus-operandi-tinted~ has a set of base tones that are shades of
91 light ocher (earthly colors), while ~modus-vivendi-tinted~ gives a 91 light ochre (earthly colors), while ~modus-vivendi-tinted~ gives a
92 night sky impression. 92 night sky impression.
93 93
94- Deuteranopia themes :: ~modus-operandi-deuteranopia~ and its 94- Deuteranopia themes :: ~modus-operandi-deuteranopia~ and its
@@ -144,7 +144,7 @@ and covers everything that goes into every tagged release of the themes.
144:end: 144:end:
145 145
146The Modus themes are distributed with Emacs starting with version 28.1. 146The Modus themes are distributed with Emacs starting with version 28.1.
147On older versions of Emacs, they can be installed using Emacs's package 147On older versions of Emacs, they can be installed using Emacs' package
148manager or manually from their code repository. There also exist 148manager or manually from their code repository. There also exist
149packages for distributions of GNU/Linux. 149packages for distributions of GNU/Linux.
150 150
@@ -486,7 +486,7 @@ The reason we recommend ~load-theme~ instead of the other option of
486~enable-theme~ is that the former does a kind of "reset" on the face 486~enable-theme~ is that the former does a kind of "reset" on the face
487specs. It quite literally loads (or reloads) the theme. Whereas the 487specs. It quite literally loads (or reloads) the theme. Whereas the
488~enable-theme~ function simply puts an already loaded theme to the top 488~enable-theme~ function simply puts an already loaded theme to the top
489of the list of enabled items, reusing whatever state was last loaded. 489of the list of enabled items, re-using whatever state was last loaded.
490 490
491As such, ~load-theme~ reads all customizations that may happen during 491As such, ~load-theme~ reads all customizations that may happen during
492any given Emacs session: even after the initial setup of a theme. 492any given Emacs session: even after the initial setup of a theme.
@@ -1190,6 +1190,92 @@ Named colors can be previewed, such as with the command
1190For a video tutorial that users of all skill levels can approach, 1190For a video tutorial that users of all skill levels can approach,
1191watch: https://protesilaos.com/codelog/2022-12-17-modus-themes-v4-demo/. 1191watch: https://protesilaos.com/codelog/2022-12-17-modus-themes-v4-demo/.
1192 1192
1193** Option to extend the palette
1194:PROPERTIES:
1195:ALT_TITLE: Palette extension
1196:DESCRIPTION: Define new colors and use them like the original ones
1197:CUSTOM_ID: h:287fb971-a866-4d88-9993-56e902dd63c4
1198:END:
1199
1200It is possible to extend the palette of each theme. For example, the
1201user may define their own =cherry= color with a value of =#a0134f= and
1202then apply it as an override ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]). Those
1203colors may also be used in custom code that leverages either the
1204~modus-themes-with-colors~ macro or the function
1205~modus-themes-get-color-value~.
1206
1207The palette extension can be done in the form of a common set of
1208definitions that are shared among the themes or on a per-theme basis.
1209
1210#+vindex: modus-themes-common-palette-user
1211The common values are stored in the user option ~modus-themes-common-palette-user~.
1212As for per-theme variables, we have the following user options:
1213
1214#+vindex: modus-operandi-palette-user
1215- ~modus-operandi-palette-user~
1216
1217#+vindex: modus-operandi-tinted-palette-user
1218- ~modus-operandi-tinted-palette-user~
1219
1220#+vindex: modus-operandi-deuteranopia-palette-user
1221- ~modus-operandi-deuteranopia-palette-user~
1222
1223#+vindex: modus-operandi-tritanopia-palette-user
1224- ~modus-operandi-tritanopia-palette-user~
1225
1226#+vindex: modus-vivendi-palette-user
1227- ~modus-vivendi-palette-user~
1228
1229#+vindex: modus-vivendi-tinted-palette-user
1230- ~modus-vivendi-tinted-palette-user~
1231
1232#+vindex: modus-vivendi-deuteranopia-palette-user
1233- ~modus-vivendi-deuteranopia-palette-user~
1234
1235#+vindex: modus-vivendi-tritanopia-palette-user
1236- ~modus-vivendi-tritanopia-palette-user~
1237
1238Examples demonstrating how to use the aforementioned:
1239
1240#+begin_src emacs-lisp
1241;;; Common customizations
1242
1243;; Define two new colors in the common "user" palette of all the Modus themes.
1244(setq modus-themes-common-palette-user
1245 '((cherry "#a0134f")
1246 (plum "#6f459a")))
1247
1248;; Use them in the overrides.
1249(setq modus-themes-common-palette-overrides
1250 '((cursor cherry)
1251 (string plum)))
1252
1253;;; Per-theme customizations
1254
1255;; Define two new colors in the "user" palette of `modus-operandi'.
1256;; Other themes will not use these.
1257(setq modus-operandi-palette-user
1258 '((cherry "#a0134f")
1259 (plum "#6f459a")))
1260
1261;; Use them in the overrides.
1262(setq modus-operandi-palette-overrides
1263 '((cursor cherry)
1264 (string plum)))
1265
1266
1267;; Tweaks on a per-theme basis give the user maximum flexibility. For
1268;; example, they can have the above for `modus-operandi' while they use
1269;; these for `modus-vivendi':
1270(setq modus-vivendi-palette-user
1271 '((apricot "#dfb350")
1272 (kiwi "#80d458")))
1273
1274(setq modus-vivendi-palette-overrides
1275 '((cursor apricot)
1276 (string kiwi)))
1277#+end_src
1278
1193* Preview theme colors 1279* Preview theme colors
1194:properties: 1280:properties:
1195:custom_id: h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d 1281:custom_id: h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d
@@ -1237,7 +1323,7 @@ and ==*modus-operandi-list-mappings*= for the semantic color mappings.
1237:END: 1323:END:
1238 1324
1239The Modus themes provide the means to access the palette of (i) the 1325The Modus themes provide the means to access the palette of (i) the
1240active theme or (ii) any theme in the Modus collection. These are 1326active theme or (ii) any theme in the Modus collection. These are
1241useful for Do-It-Yourself customizations ([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]]), 1327useful for Do-It-Yourself customizations ([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]]),
1242though it can also be helpful in other cases, such as to reuse a color 1328though it can also be helpful in other cases, such as to reuse a color
1243value in some other application. 1329value in some other application.
@@ -1251,9 +1337,9 @@ value in some other application.
1251:END: 1337:END:
1252 1338
1253#+findex: modus-themes-get-color-value 1339#+findex: modus-themes-get-color-value
1254The function ~modus-themes-get-color-value~ can be called from Lisp to 1340The fuction ~modus-themes-get-color-value~ can be called from Lisp to
1255return the value of a color from the active Modus theme palette. It 1341return the value of a color from the active Modus theme palette. It
1256takea a =COLOR= argument and an optional =OVERRIDES=. It also accepts 1342takea a =COLOR= argument and an optional =OVERRIDES=. It also accepts
1257a third =THEME= argument, to get the color from the given theme. 1343a third =THEME= argument, to get the color from the given theme.
1258 1344
1259=COLOR= is a symbol that represents a named color entry in the 1345=COLOR= is a symbol that represents a named color entry in the
@@ -1264,7 +1350,7 @@ mapping), this function recurs until it finds the underlying color
1264value. 1350value.
1265 1351
1266With an optional =OVERRIDES= argument as a non-~nil~ value, it 1352With an optional =OVERRIDES= argument as a non-~nil~ value, it
1267accounts for palette overrides. Else it reads only the default palette 1353accounts for palette overrides. Else it reads only the default palette
1268([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]) 1354([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]])
1269 1355
1270With an optional =THEME= as a symbol among the ~modus-themes-items~ 1356With an optional =THEME= as a symbol among the ~modus-themes-items~
@@ -1309,12 +1395,12 @@ with/without overrides and when recursive mappings are introduced.
1309 1395
1310#+findex: modus-themes-with-colors 1396#+findex: modus-themes-with-colors
1311Advanced users may want to apply many colors from the palette of the 1397Advanced users may want to apply many colors from the palette of the
1312active Modus theme in their custom code. In such a case, retrieving 1398active Modus theme in their custom code. In such a case, retrieving
1313each value with the function ~modus-themes-get-color-value~ is 1399each value with the function ~modus-themes-get-color-value~ is
1314inefficient ([[#h:1cc552c1-5f5f-4a56-ae78-7b69e8512c4e][Get a single color from the palette]]). The Lisp macro 1400inefficient ([[#h:1cc552c1-5f5f-4a56-ae78-7b69e8512c4e][Get a single color from the palette]]). The Lisp macro
1315~modus-themes-with-colors~ provides the requisite functionality. It 1401~modus-themes-with-colors~ provides the requisite functionality. It
1316supplies the current theme's palette to the code called from inside of 1402supplies the current theme's palette to the code called from inside of
1317it. For example: 1403it. For example:
1318 1404
1319#+begin_src emacs-lisp 1405#+begin_src emacs-lisp
1320(modus-themes-with-colors 1406(modus-themes-with-colors
@@ -1323,9 +1409,9 @@ it. For example:
1323#+end_src 1409#+end_src
1324 1410
1325The above return value is for ~modus-operandi~ when that is the active 1411The above return value is for ~modus-operandi~ when that is the active
1326theme. Switching to another theme and evaluating this code anew will 1412theme. Switching to another theme and evaluating this code anew will
1327return the relevant results for that theme (remember that since 1413return the relevant results for that theme (remember that since
1328version 4, the Modus themes consist of many items ([[#h:f0f3dbcb-602d-40cf-b918-8f929c441baf][Overview]])). The 1414version 4, the Modus themes consist of many items ([[#h:f0f3dbcb-602d-40cf-b918-8f929c441baf][Overview]])). The
1329same with ~modus-vivendi~ as the active theme: 1415same with ~modus-vivendi~ as the active theme:
1330 1416
1331#+begin_src emacs-lisp 1417#+begin_src emacs-lisp
@@ -1340,7 +1426,7 @@ like =blue-warmer= and (ii) semantic color mappings like =warning=.
1340We provide commands to inspect those ([[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Preview theme colors]]). 1426We provide commands to inspect those ([[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Preview theme colors]]).
1341 1427
1342Others sections in this manual show how to use the aforementioned 1428Others sections in this manual show how to use the aforementioned
1343macro ([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]]). In practice, the use of a hook will 1429macro ([[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]]). In practice, the use of a hook will
1344also be needed ([[#h:d87673fe-2ce1-4c80-a4b8-be36ca9f2d24][DIY Use a hook at the post-load-theme phase]]). 1430also be needed ([[#h:d87673fe-2ce1-4c80-a4b8-be36ca9f2d24][DIY Use a hook at the post-load-theme phase]]).
1345 1431
1346* Advanced customization 1432* Advanced customization
@@ -1355,7 +1441,7 @@ mechanism to control things with precision ([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd
1355 1441
1356This section is of interest only to users who are prepared to maintain 1442This section is of interest only to users who are prepared to maintain
1357their own local tweaks and who are willing to deal with any possible 1443their own local tweaks and who are willing to deal with any possible
1358incompatibilities between versioned releases of the themes. As such, 1444incompatibilities between versioned releases of the themes. As such,
1359they are labeled as "do-it-yourself" or "DIY". 1445they are labeled as "do-it-yourself" or "DIY".
1360 1446
1361** DIY Palette override presets 1447** DIY Palette override presets
@@ -2076,14 +2162,14 @@ Reload the theme for changes to take effect.
2076:end: 2162:end:
2077 2163
2078This is one of our practical examples to override the semantic colors 2164This is one of our practical examples to override the semantic colors
2079of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). Here 2165of the Modus themes ([[#h:df1199d8-eaba-47db-805d-6b568a577bf3][Stylistic variants using palette overrides]]). Here
2080we show how to change the presentation of Org blocks (and other such 2166we show how to change the presentation of Org blocks (and other such
2081blocks like Markdown fenced code sections, though the exact 2167blocks like Markdown fenced code sections, though the exact
2082presentation depends on each major mode). 2168presentation depends on each major mode).
2083 2169
2084The default style of Org blocks is a subtle gray background for the 2170The default style of Org blocks is a subtle gray background for the
2085contents and for the delimiter lines (the =#+begin_= and =#+end_= 2171contents and for the delimiter lines (the =#+begin_= and =#+end_=
2086parts). The text of the delimiter lines is a subtle gray foreground 2172parts). The text of the delimiter lines is a subtle gray foreground
2087color. 2173color.
2088 2174
2089[[#h:bb5b396f-5532-4d52-ab13-149ca24854f1][Make inline code in prose use alternative styles]]. 2175[[#h:bb5b396f-5532-4d52-ab13-149ca24854f1][Make inline code in prose use alternative styles]].
@@ -2123,8 +2209,8 @@ color.
2123#+end_src 2209#+end_src
2124 2210
2125The previous examples differentiate the delimiter lines from the 2211The previous examples differentiate the delimiter lines from the
2126block's contents. Though we can mimic the default aesthetic of a 2212block's contents. Though we can mimic the default aesthetic of a
2127uniform background, while changing the applicable colors. Here are 2213uniform background, while changing the applicable colors. Here are
2128some nice combinations: 2214some nice combinations:
2129 2215
2130#+begin_src emacs-lisp 2216#+begin_src emacs-lisp
@@ -2152,7 +2238,7 @@ some nice combinations:
2152 2238
2153Finally, the following makes code blocks have no distinct background. 2239Finally, the following makes code blocks have no distinct background.
2154The minimal styles are applied to the delimiter lines, which only use 2240The minimal styles are applied to the delimiter lines, which only use
2155a subtle gray foreground. This was the default for the Modus themes up 2241a subtle gray foreground. This was the default for the Modus themes up
2156until version 4.3.0. 2242until version 4.3.0.
2157 2243
2158#+begin_src emacs-lisp 2244#+begin_src emacs-lisp
@@ -2162,7 +2248,7 @@ until version 4.3.0.
2162;; was the default in versions of the Modus themes before 4.4.0 2248;; was the default in versions of the Modus themes before 4.4.0
2163(setq modus-themes-common-palette-overrides 2249(setq modus-themes-common-palette-overrides
2164 '((bg-prose-block-contents unspecified) 2250 '((bg-prose-block-contents unspecified)
2165 (bg-prose-block-delimiter unspecified) 2251 (bg-prose-block-delimiter unspeficied)
2166 (fg-prose-block-delimiter fg-dim))) 2252 (fg-prose-block-delimiter fg-dim)))
2167#+end_src 2253#+end_src
2168 2254
@@ -2806,7 +2892,7 @@ above:
2806The reason we no longer provide this option is because it depends on a 2892The reason we no longer provide this option is because it depends on a
2807non-~nil~ value for ~x-underline-at-descent-line~. That variable 2893non-~nil~ value for ~x-underline-at-descent-line~. That variable
2808affects ALL underlines, including those of links. The effect is 2894affects ALL underlines, including those of links. The effect is
2809intrusive and looks awkward in prose. 2895intrusive and looks awkard in prose.
2810 2896
2811As such, the Modus themes no longer provide that option but instead 2897As such, the Modus themes no longer provide that option but instead
2812offer this piece of documentation to make the user fully aware of the 2898offer this piece of documentation to make the user fully aware of the
@@ -2821,7 +2907,7 @@ Reload the theme for changes to take effect.
2821#+cindex: Remapping faces 2907#+cindex: Remapping faces
2822 2908
2823There are cases where we need to change the buffer-local attributes of a 2909There are cases where we need to change the buffer-local attributes of a
2824face. This might be because we have our own minor mode that reuses a 2910face. This might be because we have our own minor mode that re-uses a
2825face for a particular purpose, such as a line selection tool that 2911face for a particular purpose, such as a line selection tool that
2826activates ~hl-line-mode~, but we wish to keep it distinct from other 2912activates ~hl-line-mode~, but we wish to keep it distinct from other
2827buffers. This is where ~face-remap-add-relative~ can be applied and may 2913buffers. This is where ~face-remap-add-relative~ can be applied and may
@@ -3160,7 +3246,7 @@ specification of that variable looks like this:
3160 3246
3161With the exception of ~org-verbatim~ and ~org-code~ faces, everything else 3247With the exception of ~org-verbatim~ and ~org-code~ faces, everything else
3162uses the corresponding type of emphasis: a bold typographic weight, or 3248uses the corresponding type of emphasis: a bold typographic weight, or
3163italicized, underlined, and struck through text. 3249italicised, underlined, and struck through text.
3164 3250
3165The best way for users to add some extra attributes, such as a 3251The best way for users to add some extra attributes, such as a
3166foreground color, is to define their own faces and assign them to the 3252foreground color, is to define their own faces and assign them to the
@@ -3280,11 +3366,11 @@ invoke {{{kbd(M-x org-mode-restart)}}}.
3280 3366
3281In versions of the Modus themes before =4.4.0= there was an option to 3367In versions of the Modus themes before =4.4.0= there was an option to
3282change the coloration of Org source blocks so that certain languages 3368change the coloration of Org source blocks so that certain languages
3283would have a distinctly colored background. This was not flexible 3369would have a distinctly colored background. This was not flexible
3284enough, because (i) we cannot cover all languages effectively and (ii) 3370enough, because (i) we cannot cover all languages effectively and (ii)
3285the user had no choice over the =language --> color= mapping. 3371the user had no choice over the =language --> color= mapping.
3286 3372
3287As such, the old user option is no more. Users can use the following 3373As such, the old user option is no more. Users can use the following
3288to achieve what they want: 3374to achieve what they want:
3289 3375
3290[ All this is done by setting the Org user option ~org-src-block-faces~, 3376[ All this is done by setting the Org user option ~org-src-block-faces~,
@@ -3323,9 +3409,9 @@ to achieve what they want:
3323[[#h:d87673fe-2ce1-4c80-a4b8-be36ca9f2d24][DIY Use a hook at the post-load-theme phase]]. 3409[[#h:d87673fe-2ce1-4c80-a4b8-be36ca9f2d24][DIY Use a hook at the post-load-theme phase]].
3324 3410
3325Note that the ~org-src-block-faces~ accepts a named face, as shown 3411Note that the ~org-src-block-faces~ accepts a named face, as shown
3326above, as well as a list of face attributes. The latter approach is 3412above, as well as a list of face attributes. The latter approach is
3327not good enough because it hardcodes values in such a way that an 3413not good enough because it hardcodes values in such a way that an
3328~org-mode-restart~ is necessary. Whereas the indirection of the named 3414~org-mode-restart~ is necessary. Whereas the indirection of the named
3329face lets the theme change the values while Org buffers continue to 3415face lets the theme change the values while Org buffers continue to
3330show the right colors. 3416show the right colors.
3331 3417
@@ -3638,7 +3724,7 @@ Add this to the `modus-themes-post-load-hook'."
3638The above will work only for themes that belong to the Modus family. 3724The above will work only for themes that belong to the Modus family.
3639For users of Emacs version 29 or higher, there exists a theme-agnostic 3725For users of Emacs version 29 or higher, there exists a theme-agnostic
3640hook that takes a function with one argument---that of the theme---and 3726hook that takes a function with one argument---that of the theme---and
3641calls in the "post enable" phase of theme loading. Here is the 3727calls in the the "post enable" phase of theme loading. Here is the
3642above snippet, with the necessary tweaks: 3728above snippet, with the necessary tweaks:
3643 3729
3644#+begin_src emacs-lisp 3730#+begin_src emacs-lisp
@@ -3768,7 +3854,7 @@ Reload the theme for changes to take effect.
3768:END: 3854:END:
3769 3855
3770Many of the Do-It-Yourself (DIY) snippets provided herein make use of 3856Many of the Do-It-Yourself (DIY) snippets provided herein make use of
3771a hook to apply the desired changes. In most examples, this hook is 3857a hook to apply the desired changes. In most examples, this hook is
3772the ~modus-themes-after-load-theme-hook~ (alias ~modus-themes-post-load-hook~). 3858the ~modus-themes-after-load-theme-hook~ (alias ~modus-themes-post-load-hook~).
3773This hook is provided by the Modus themes and is called at the end of 3859This hook is provided by the Modus themes and is called at the end of
3774one the following: 3860one the following:
@@ -3786,7 +3872,7 @@ one the following:
3786 3872
3787Users who switch between themes that are not limited to the Modus 3873Users who switch between themes that are not limited to the Modus
3788collection cannot benefit from the aforementioned hook: it only works 3874collection cannot benefit from the aforementioned hook: it only works
3789with the Modus themes. A theme-agnostic hook is needed in such a case. 3875with the Modus themes. A theme-agnostic hook is needed in such a case.
3790Before Emacs 29, this had to be set up manually ([[#h:86f6906b-f090-46cc-9816-1fe8aeb38776][DIY A theme-agnostic hook for theme loading]]). 3876Before Emacs 29, this had to be set up manually ([[#h:86f6906b-f090-46cc-9816-1fe8aeb38776][DIY A theme-agnostic hook for theme loading]]).
3791Starting with Emacs 29, the special hook ~enable-theme-functions~ 3877Starting with Emacs 29, the special hook ~enable-theme-functions~
3792works with anything that uses the basic ~enable-theme~ function. 3878works with anything that uses the basic ~enable-theme~ function.
@@ -3799,7 +3885,7 @@ the way it is done with every hook:
3799#+end_src 3885#+end_src
3800 3886
3801Functions added to ~enable-theme-functions~ accept a single =THEME= 3887Functions added to ~enable-theme-functions~ accept a single =THEME=
3802argument. The examples shown in this manual use the pattern =(&rest 3888argument. The examples shown in this manual use the pattern =(&rest
3803_)=, which is how a function accepts one or more arguments but 3889_)=, which is how a function accepts one or more arguments but
3804declares it will not use them (in plain terms, the code works with or 3890declares it will not use them (in plain terms, the code works with or
3805without ~enable-theme-functions~). 3891without ~enable-theme-functions~).
@@ -3809,7 +3895,7 @@ without ~enable-theme-functions~).
3809:custom_id: h:86f6906b-f090-46cc-9816-1fe8aeb38776 3895:custom_id: h:86f6906b-f090-46cc-9816-1fe8aeb38776
3810:end: 3896:end:
3811 3897
3812[ NOTE: The following is for versions of Emacs before 29. For Emacs 29 3898[ NOTE: The following is for versions of Emacs before 29. For Emacs 29
3813 or higher, users can rely on the built-in ~enable-theme-functions~ 3899 or higher, users can rely on the built-in ~enable-theme-functions~
3814 ([[#h:d87673fe-2ce1-4c80-a4b8-be36ca9f2d24][Using a hook at the post-load-theme phase]]). ] 3900 ([[#h:d87673fe-2ce1-4c80-a4b8-be36ca9f2d24][Using a hook at the post-load-theme phase]]). ]
3815 3901
@@ -4002,6 +4088,7 @@ have lots of extensions, so the "full support" may not be 100% true…
4002+ isearch, occur, etc. 4088+ isearch, occur, etc.
4003+ ivy* 4089+ ivy*
4004+ ivy-posframe 4090+ ivy-posframe
4091+ jabber
4005+ japanese-holidays 4092+ japanese-holidays
4006+ jira (org-jira) 4093+ jira (org-jira)
4007+ jit-spell 4094+ jit-spell
@@ -4011,6 +4098,7 @@ have lots of extensions, so the "full support" may not be 100% true…
4011+ julia 4098+ julia
4012+ kaocha-runner 4099+ kaocha-runner
4013+ keycast 4100+ keycast
4101+ kmacro-menu
4014+ ledger-mode 4102+ ledger-mode
4015+ leerzeichen 4103+ leerzeichen
4016+ line numbers (~display-line-numbers-mode~ and global variant) 4104+ line numbers (~display-line-numbers-mode~ and global variant)
@@ -4020,6 +4108,7 @@ have lots of extensions, so the "full support" may not be 100% true…
4020+ marginalia 4108+ marginalia
4021+ markdown-mode 4109+ markdown-mode
4022+ markup-faces (~adoc-mode~) 4110+ markup-faces (~adoc-mode~)
4111+ mb-depth
4023+ mct 4112+ mct
4024+ messages 4113+ messages
4025+ minimap 4114+ minimap
@@ -4115,8 +4204,10 @@ have lots of extensions, so the "full support" may not be 100% true…
4115+ vertico 4204+ vertico
4116+ vertico-quick 4205+ vertico-quick
4117+ vimish-fold 4206+ vimish-fold
4207+ viper
4118+ visible-mark 4208+ visible-mark
4119+ visual-regexp 4209+ visual-regexp
4210+ vtable
4120+ vterm 4211+ vterm
4121+ vundo 4212+ vundo
4122+ wcheck-mode 4213+ wcheck-mode
@@ -4126,6 +4217,7 @@ have lots of extensions, so the "full support" may not be 100% true…
4126+ which-key 4217+ which-key
4127+ whitespace-mode 4218+ whitespace-mode
4128+ window-divider-mode 4219+ window-divider-mode
4220+ window-tool-bar
4129+ writegood-mode 4221+ writegood-mode
4130+ woman 4222+ woman
4131+ xah-elisp-mode 4223+ xah-elisp-mode
@@ -4442,7 +4534,7 @@ advanced customization options of the themes.
4442[[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]]. 4534[[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]].
4443 4535
4444In the following example, we are assuming that the user wants to (i) 4536In the following example, we are assuming that the user wants to (i)
4445reuse color variables provided by the themes, (ii) be able to retain 4537re-use color variables provided by the themes, (ii) be able to retain
4446their tweaks while switching between ~modus-operandi~ and ~modus-vivendi~, 4538their tweaks while switching between ~modus-operandi~ and ~modus-vivendi~,
4447and (iii) have the option to highlight either the foreground of the 4539and (iii) have the option to highlight either the foreground of the
4448parentheses or the background as well. 4540parentheses or the background as well.
@@ -4462,7 +4554,7 @@ Then we can update our preference with this:
4462(setq my-highlight-parentheses-use-background nil) 4554(setq my-highlight-parentheses-use-background nil)
4463#+end_src 4555#+end_src
4464 4556
4465To reuse colors from the themes, we must wrap our code in the 4557To re-use colors from the themes, we must wrap our code in the
4466~modus-themes-with-colors~ macro. Our implementation must interface with 4558~modus-themes-with-colors~ macro. Our implementation must interface with
4467the variables ~highlight-parentheses-background-colors~ and/or 4559the variables ~highlight-parentheses-background-colors~ and/or
4468~highlight-parentheses-colors~. 4560~highlight-parentheses-colors~.
@@ -4769,7 +4861,7 @@ and/or mode line setup.
4769:custom_id: h:4cc767dc-ffef-4c5c-9f10-82eb7b8921bf 4861:custom_id: h:4cc767dc-ffef-4c5c-9f10-82eb7b8921bf
4770:end: 4862:end:
4771 4863
4772Emacs's HTML rendering library ({{{file(shr.el)}}}) may need explicit 4864Emacs' HTML rendering library ({{{file(shr.el)}}}) may need explicit
4773configuration to respect the theme's colors instead of whatever 4865configuration to respect the theme's colors instead of whatever
4774specifications the webpage provides. 4866specifications the webpage provides.
4775 4867
@@ -5074,7 +5166,7 @@ more effective than trying to do the same with either red or blue (the
5074latter is the least effective in that regard). 5166latter is the least effective in that regard).
5075 5167
5076When we need to work with several colors, it is always better to have 5168When we need to work with several colors, it is always better to have
5077sufficient maneuvering space, especially since we cannot pick arbitrary 5169sufficient manoeuvring space, especially since we cannot pick arbitrary
5078colors but only those that satisfy the accessibility objectives of the 5170colors but only those that satisfy the accessibility objectives of the
5079themes. 5171themes.
5080 5172
@@ -5128,7 +5220,7 @@ each of the three channels of light (red, green, blue). For example:
5128: xrandr --output LVDS1 --brightness 1.0 --gamma 0.76:0.75:0.68 5220: xrandr --output LVDS1 --brightness 1.0 --gamma 0.76:0.75:0.68
5129 5221
5130Typography is another variable. Some font families are blurry at small 5222Typography is another variable. Some font families are blurry at small
5131point sizes. Others may have a regular weight that is lighter (thinner) 5223point sizes. Others may have a regular weight that is lighter (thiner)
5132than that of their peers which may, under certain circumstances, cause a 5224than that of their peers which may, under certain circumstances, cause a
5133halo effect around each glyph. 5225halo effect around each glyph.
5134 5226
@@ -5180,7 +5272,7 @@ it is already understood that one must follow the indicator or headline
5180to view its contents and (ii) underlining everything would make the 5272to view its contents and (ii) underlining everything would make the
5181interface virtually unusable. 5273interface virtually unusable.
5182 5274
5183Again, one must exercise judgment in order to avoid discrimination, 5275Again, one must exercise judgement in order to avoid discrimination,
5184where "discrimination" refers to: 5276where "discrimination" refers to:
5185 5277
5186+ The treatment of substantially different magnitudes as if they were of 5278+ The treatment of substantially different magnitudes as if they were of
@@ -5254,7 +5346,7 @@ the themes, which is partially fleshed out in this manual.
5254 5346
5255With regard to the artistic aspect (where "art" qua skill may amount to 5347With regard to the artistic aspect (where "art" qua skill may amount to
5256an imprecise science), there is no hard-and-fast rule in effect as it 5348an imprecise science), there is no hard-and-fast rule in effect as it
5257requires one to exercise discretion and make decisions based on 5349requires one to exercize discretion and make decisions based on
5258context-dependent information or constraints. As is true with most 5350context-dependent information or constraints. As is true with most
5259things in life, when in doubt, do not cling on to the letter of the law 5351things in life, when in doubt, do not cling on to the letter of the law
5260but try to understand its spirit. 5352but try to understand its spirit.
@@ -5402,14 +5494,15 @@ The Modus themes are a collective effort. Every bit of work matters.
5402 Griffin, Anders Johansson, Antonio Ruiz, Basil L.{{{space()}}} 5494 Griffin, Anders Johansson, Antonio Ruiz, Basil L.{{{space()}}}
5403 Contovounesios, Björn Lindström, Carlo Zancanaro, Christian Tietze, 5495 Contovounesios, Björn Lindström, Carlo Zancanaro, Christian Tietze,
5404 Daniel Mendler, David Edmondson, Eli Zaretskii, Fritz Grabo, Gautier 5496 Daniel Mendler, David Edmondson, Eli Zaretskii, Fritz Grabo, Gautier
5405 Ponsinet, Illia Ostapyshyn, Kévin Le Gouguec, Koen van Greevenbroek, 5497 Ponsinet, Illia Ostapyshyn, Jared Finder, Kévin Le Gouguec, Koen van
5406 Kostadin Ninev, Madhavan Krishnan, Manuel Giraud, Markus Beppler, 5498 Greevenbroek, Kostadin Ninev, Madhavan Krishnan, Manuel Giraud,
5407 Matthew Stevenson, Mauro Aranda, Nacho Barrientos, Niall Dooley, 5499 Markus Beppler, Matthew Stevenson, Mauro Aranda, Nacho Barrientos,
5408 Nicolas De Jaeghere, Paul David, Philip Kaludercic, Pierre 5500 Niall Dooley, Nicolas De Jaeghere, Paul David, Pavel Novichkov,
5409 Téchoueyres, Rudolf Adamkovič, Sergey Nichiporchik, Shreyas Ragavan, 5501 Philip Kaludercic, Pierre Téchoueyres, Rudolf Adamkovič, Sergey
5410 Stefan Kangas, Stephen Berman, Stephen Gildea, Steve Downey, Tomasz 5502 Nichiporchik, Shreyas Ragavan, Stefan Kangas, Stephen Berman,
5411 Hołubowicz, Utkarsh Singh, Vincent Murphy, Xinglu Chen, Yuanchen 5503 Stephen Gildea, Steve Downey, Thanos Apollo, Tomasz Hołubowicz,
5412 Xie, fluentpwn, okamsn. 5504 Utkarsh Singh, Vincent Murphy, Xinglu Chen, Yuanchen Xie, fluentpwn,
5505 okamsn.
5413 5506
5414+ Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers, 5507+ Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers,
5415 Adrian Manea, Aleksei Pirogov, Alex Griffin, Alex Koen, Alex 5508 Adrian Manea, Aleksei Pirogov, Alex Griffin, Alex Koen, Alex
@@ -5420,32 +5513,32 @@ The Modus themes are a collective effort. Every bit of work matters.
5420 Christopher Dimech, Christopher League, Damien Cassou, Daniel 5513 Christopher Dimech, Christopher League, Damien Cassou, Daniel
5421 Mendler, Dario Gjorgjevski, David Edmondson, Davor Rotim, Divan 5514 Mendler, Dario Gjorgjevski, David Edmondson, Davor Rotim, Divan
5422 Santana, Eliraz Kedmi, Emanuele Michele Alberto Monterosso, Farasha 5515 Santana, Eliraz Kedmi, Emanuele Michele Alberto Monterosso, Farasha
5423 Euker, Feng Shu, Gautier Ponsinet, Gerry Agbobada, Gianluca Recchia, 5516 Euker, Feng Shu, Filippo Argiolas, Gautier Ponsinet, Gerry Agbobada,
5424 Gonçalo Marrafa, Guilherme Semente, Gustavo Barros, Hörmetjan 5517 Gianluca Recchia, Gonçalo Marrafa, Guilherme Semente, Gustavo
5425 Yiltiz, Ilja Kocken, Imran Khan, Iris Garcia, Ivan Popovych, James 5518 Barros, Hörmetjan Yiltiz, Ilja Kocken, Imran Khan, Iris Garcia, Ivan
5426 Ferguson, Jeremy Friesen, Jerry Zhang, Johannes Grødem, John Haman, 5519 Popovych, James Ferguson, Jeremy Friesen, Jerry Zhang, Johannes
5427 John Wick, Jonas Collberg, Jorge Morais, Joshua O'Connor, Julio C. 5520 Grødem, John Haman, John Wick, Jonas Collberg, Jorge Morais, Joshua
5428 Villasante, Kenta Usami, Kevin Fleming, Kévin Le Gouguec, Kevin 5521 O'Connor, Julio C. Villasante, Kenta Usami, Kevin Fleming, Kévin Le
5429 Kainan Li, Kostadin Ninev, Laith Bahodi, Lasse Lindner, Len Trigg, 5522 Gouguec, Kevin Kainan Li, Kostadin Ninev, Laith Bahodi, Lasse
5430 Lennart C.{{{space()}}} Karssen, Luis Miguel Castañeda, Magne Hov, Manuel Giraud, 5523 Lindner, Len Trigg, Lennart C.{{{space()}}} Karssen, Luis Miguel
5431 Manuel Uberti, Mark Bestley, Mark Burton, Mark Simpson, Marko Kocic, 5524 Castañeda, Magne Hov, Manuel Giraud, Manuel Uberti, Mark Bestley,
5432 Markus Beppler, Matt Armstrong, Matthias Fuchs, Mattias Engderd, 5525 Mark Burton, Mark Simpson, Marko Kocic, Markus Beppler, Matt
5433 Mauro Aranda, Maxime Tréca, Michael Goldenberg, Morgan Smith, Morgan 5526 Armstrong, Matthias Fuchs, Mattias Engdegård, Mauro Aranda, Maxime
5434 Willcock, Murilo Pereira, Nicky van Foreest, Nicolas De Jaeghere, 5527 Tréca, Michael Goldenberg, Morgan Smith, Morgan Willcock, Murilo
5435 Nicolas Semrau, Olaf Meeuwissen, Oliver Epper, Pablo Stafforini, 5528 Pereira, Nicky van Foreest, Nicolas De Jaeghere, Nicolas Semrau,
5436 Paul Poloskov, Pengji Zhang, Pete Kazmier, Peter Wu, Philip 5529 Olaf Meeuwissen, Oliver Epper, Pablo Stafforini, Paul Poloskov,
5437 Kaludercic, Pierre Téchoueyres, Przemysław Kryger, Robert Hepple, 5530 Pengji Zhang, Pete Kazmier, Peter Wu, Philip Kaludercic, Pierre
5438 Roman Rudakov, Russell Sim, Ryan Phillips, Rytis Paškauskas, Rudolf 5531 Téchoueyres, Przemyaw Kryger, Robert Hepple, Roman Rudakov,
5439 Adamkovič, Sam Kleinman, Samuel Culpepper, Saša Janiška, Shreyas 5532 Russell Sim, Ryan Phillips, Rytis Pkauskas, Rudolf Adamkovič, Sam
5440 Ragavan, Simon Pugnet, Steve Downey, Tassilo Horn, Thanos Apollo, 5533 Kleinman, Samuel Culpepper, Saša Janiška, Shreyas Ragavan, Simon
5441 Thibaut Verron, Thomas Heartman, Togan Muftuoglu, Tony Zorman, Trey 5534 Pugnet, Steve Downey, Tassilo Horn, Thanos Apollo, Thibaut Verron,
5442 Merkley, Tomasz Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh, 5535 Thomas Heartman, Togan Muftuoglu, Tony Zorman, Trey Merkley, Tomasz
5443 Vincent Foley, Zoltan Kiraly. As well as users: Ben, CsBigDataHub1, 5536 Hołubowicz, Toon Claes, Uri Sharf, Utkarsh Singh, Vincent Foley,
5444 Emacs Contrib, Eugene, Fourchaux, Fredrik, Moesasji, Nick, Summer 5537 Zoltan Kiraly. As well as users: Ben, CsBigDataHub1, Emacs Contrib,
5445 Emacs, TheBlob42, TitusMu, Trey, bepolymathe, bit9tream, 5538 Eugene, Fourchaux, Fredrik, Moesasji, Nick, Summer Emacs, TheBlob42,
5446 bangedorrunt, derek-upham, doolio, fleimgruber, gitrj95, iSeeU, 5539 TitusMu, Trey, ZharMeny, bepolymathe, bit9tream, bangedorrunt,
5447 jixiuf, ltmsyvag, okamsn, pRot0ta1p, soaringbird, tumashu, 5540 derek-upham, doolio, fleimgruber, gitrj95, iSeeU, jixiuf, ltmsyvag,
5448 wakamenod. 5541 okamsn, pRot0ta1p, shipmints, soaringbird, tumashu, wakamenod.
5449 5542
5450+ Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii, 5543+ Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii,
5451 Glenn Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core 5544 Glenn Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core
diff --git a/etc/themes/modus-operandi-deuteranopia-theme.el b/etc/themes/modus-operandi-deuteranopia-theme.el
index 42479965300..485a71e19b5 100644
--- a/etc/themes/modus-operandi-deuteranopia-theme.el
+++ b/etc/themes/modus-operandi-deuteranopia-theme.el
@@ -134,22 +134,30 @@ standard)."
134 (bg-magenta-nuanced "#f8e6f5") 134 (bg-magenta-nuanced "#f8e6f5")
135 (bg-cyan-nuanced "#e0f2fa") 135 (bg-cyan-nuanced "#e0f2fa")
136 136
137;;; Uncommon accent backgrounds 137;;; Uncommon accent background and foreground pairs
138
139 (bg-clay "#f1c8b5")
140 (fg-clay "#63192a")
141
142 (bg-ochre "#f0e3c0")
143 (fg-ochre "#573a30")
144
145 (bg-lavender "#dfcdfa")
146 (fg-lavender "#443379")
138 147
139 (bg-ochre "#f0e0cc")
140 (bg-lavender "#dfdbfa")
141 (bg-sage "#c0e7d4") 148 (bg-sage "#c0e7d4")
149 (fg-sage "#124b41")
142 150
143;;; Graphs 151;;; Graphs
144 152
145 (bg-graph-red-0 "#d0b029") 153 (bg-graph-red-0 "#d0b029")
146 (bg-graph-red-1 "#e0cab4") 154 (bg-graph-red-1 "#e0cab4")
147 (bg-graph-green-0 "#8ad080") 155 (bg-graph-green-0 "#8ac050")
148 (bg-graph-green-1 "#afdfa5") 156 (bg-graph-green-1 "#afdfa5")
149 (bg-graph-yellow-0 "#ffcf00") 157 (bg-graph-yellow-0 "#ffcf00")
150 (bg-graph-yellow-1 "#f9ff00") 158 (bg-graph-yellow-1 "#f9ff00")
151 (bg-graph-blue-0 "#7f9fff") 159 (bg-graph-blue-0 "#7f9fff")
152 (bg-graph-blue-1 "#9fc6ff") 160 (bg-graph-blue-1 "#afd0ff")
153 (bg-graph-magenta-0 "#b0b0d0") 161 (bg-graph-magenta-0 "#b0b0d0")
154 (bg-graph-magenta-1 "#d0dfdf") 162 (bg-graph-magenta-1 "#d0dfdf")
155 (bg-graph-cyan-0 "#6faad9") 163 (bg-graph-cyan-0 "#6faad9")
@@ -248,19 +256,24 @@ standard)."
248 256
249;;;; Code mappings 257;;;; Code mappings
250 258
259 (bracket fg-main)
251 (builtin magenta-warmer) 260 (builtin magenta-warmer)
252 (comment yellow-cooler) 261 (comment yellow-cooler)
253 (constant blue-cooler) 262 (constant blue-cooler)
254 (docstring green-faint) 263 (delimiter fg-main)
255 (docmarkup magenta-faint) 264 (docmarkup magenta-faint)
265 (docstring green-faint)
256 (fnname magenta) 266 (fnname magenta)
257 (keyword magenta-cooler) 267 (keyword magenta-cooler)
268 (number fg-main)
269 (operator fg-main)
258 (preprocessor red-cooler) 270 (preprocessor red-cooler)
271 (punctuation fg-main)
272 (rx-backslash blue-cooler)
273 (rx-construct yellow-cooler)
259 (string blue-warmer) 274 (string blue-warmer)
260 (type cyan-cooler) 275 (type cyan-cooler)
261 (variable cyan) 276 (variable cyan)
262 (rx-construct yellow-cooler)
263 (rx-backslash blue-cooler)
264 277
265;;;; Accent mappings 278;;;; Accent mappings
266 279
@@ -483,6 +496,19 @@ Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
483with both as symbols. The latter is a named color that already 496with both as symbols. The latter is a named color that already
484exists in the palette and is associated with a HEX-VALUE.") 497exists in the palette and is associated with a HEX-VALUE.")
485 498
499 (defcustom modus-operandi-deuteranopia-palette-user nil
500 "Like the `modus-operandi-deuteranopia-palette' for user-defined entries.
501This is meant to extend the palette with custom named colors and/or
502semantic palette mappings. Those may then be used in combination with
503palette overrides (also see `modus-themes-common-palette-overrides' and
504`modus-operandi-deuteranopia-palette-overrides')."
505 :group 'modus-themes
506 :package-version '(modus-themes . "4.5.0")
507 :type '(repeat (list symbol (choice symbol string)))
508 :set #'modus-themes--set-option
509 :initialize #'custom-initialize-default
510 :link '(info-link "(modus-themes) Option to extend the palette for use with overrides"))
511
486 (defcustom modus-operandi-deuteranopia-palette-overrides nil 512 (defcustom modus-operandi-deuteranopia-palette-overrides nil
487 "Overrides for `modus-operandi-deuteranopia-palette'. 513 "Overrides for `modus-operandi-deuteranopia-palette'.
488 514
diff --git a/etc/themes/modus-operandi-theme.el b/etc/themes/modus-operandi-theme.el
index fb2ff99a74b..6fd2ddd57de 100644
--- a/etc/themes/modus-operandi-theme.el
+++ b/etc/themes/modus-operandi-theme.el
@@ -132,22 +132,30 @@ which corresponds to a minimum contrast in relative luminance of
132 (bg-magenta-nuanced "#f8e6f5") 132 (bg-magenta-nuanced "#f8e6f5")
133 (bg-cyan-nuanced "#e0f2fa") 133 (bg-cyan-nuanced "#e0f2fa")
134 134
135;;; Uncommon accent backgrounds 135;;; Uncommon accent background and foreground pairs
136
137 (bg-clay "#f1c8b5")
138 (fg-clay "#63192a")
139
140 (bg-ochre "#f0e3c0")
141 (fg-ochre "#573a30")
142
143 (bg-lavender "#dfcdfa")
144 (fg-lavender "#443379")
136 145
137 (bg-ochre "#f0e0cc")
138 (bg-lavender "#dfdbfa")
139 (bg-sage "#c0e7d4") 146 (bg-sage "#c0e7d4")
147 (fg-sage "#124b41")
140 148
141;;; Graphs 149;;; Graphs
142 150
143 (bg-graph-red-0 "#ef7969") 151 (bg-graph-red-0 "#ef7969")
144 (bg-graph-red-1 "#ffaab4") 152 (bg-graph-red-1 "#ffaab4")
145 (bg-graph-green-0 "#2fe029") 153 (bg-graph-green-0 "#45c050")
146 (bg-graph-green-1 "#75ef30") 154 (bg-graph-green-1 "#75ef30")
147 (bg-graph-yellow-0 "#ffcf00") 155 (bg-graph-yellow-0 "#ffcf00")
148 (bg-graph-yellow-1 "#f9ff00") 156 (bg-graph-yellow-1 "#f9ff00")
149 (bg-graph-blue-0 "#7f90ff") 157 (bg-graph-blue-0 "#7f90ff")
150 (bg-graph-blue-1 "#9fc6ff") 158 (bg-graph-blue-1 "#a6c0ff")
151 (bg-graph-magenta-0 "#e07fff") 159 (bg-graph-magenta-0 "#e07fff")
152 (bg-graph-magenta-1 "#fad0ff") 160 (bg-graph-magenta-1 "#fad0ff")
153 (bg-graph-cyan-0 "#70d3f0") 161 (bg-graph-cyan-0 "#70d3f0")
@@ -246,19 +254,24 @@ which corresponds to a minimum contrast in relative luminance of
246 254
247;;;; Code mappings 255;;;; Code mappings
248 256
257 (bracket fg-main)
249 (builtin magenta-warmer) 258 (builtin magenta-warmer)
250 (comment fg-dim) 259 (comment fg-dim)
251 (constant blue-cooler) 260 (constant blue-cooler)
252 (docstring green-faint) 261 (delimiter fg-main)
253 (docmarkup magenta-faint) 262 (docmarkup magenta-faint)
263 (docstring green-faint)
254 (fnname magenta) 264 (fnname magenta)
255 (keyword magenta-cooler) 265 (keyword magenta-cooler)
266 (number fg-main)
267 (operator fg-main)
256 (preprocessor red-cooler) 268 (preprocessor red-cooler)
269 (punctuation fg-main)
270 (rx-backslash magenta)
271 (rx-construct green-cooler)
257 (string blue-warmer) 272 (string blue-warmer)
258 (type cyan-cooler) 273 (type cyan-cooler)
259 (variable cyan) 274 (variable cyan)
260 (rx-construct green-cooler)
261 (rx-backslash magenta)
262 275
263;;;; Accent mappings 276;;;; Accent mappings
264 277
@@ -481,6 +494,19 @@ Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
481with both as symbols. The latter is a named color that already 494with both as symbols. The latter is a named color that already
482exists in the palette and is associated with a HEX-VALUE.") 495exists in the palette and is associated with a HEX-VALUE.")
483 496
497 (defcustom modus-operandi-palette-user nil
498 "Like the `modus-operandi-palette' for user-defined entries.
499This is meant to extend the palette with custom named colors and/or
500semantic palette mappings. Those may then be used in combination with
501palette overrides (also see `modus-themes-common-palette-overrides' and
502`modus-operandi-palette-overrides')."
503 :group 'modus-themes
504 :package-version '(modus-themes . "4.5.0")
505 :type '(repeat (list symbol (choice symbol string)))
506 :set #'modus-themes--set-option
507 :initialize #'custom-initialize-default
508 :link '(info-link "(modus-themes) Option to extend the palette for use with overrides"))
509
484 (defcustom modus-operandi-palette-overrides nil 510 (defcustom modus-operandi-palette-overrides nil
485 "Overrides for `modus-operandi-palette'. 511 "Overrides for `modus-operandi-palette'.
486 512
diff --git a/etc/themes/modus-operandi-tinted-theme.el b/etc/themes/modus-operandi-tinted-theme.el
index d906715e44c..c901e834d15 100644
--- a/etc/themes/modus-operandi-tinted-theme.el
+++ b/etc/themes/modus-operandi-tinted-theme.el
@@ -1,4 +1,4 @@
1;;; modus-operandi-tinted-theme.el --- Elegant, highly legible theme with a light ocher background -*- lexical-binding:t -*- 1;;; modus-operandi-tinted-theme.el --- Elegant, highly legible theme with a light ochre background -*- lexical-binding:t -*-
2 2
3;; Copyright (C) 2019-2024 Free Software Foundation, Inc. 3;; Copyright (C) 2019-2024 Free Software Foundation, Inc.
4 4
@@ -44,7 +44,7 @@
44 44
45;;;###theme-autoload 45;;;###theme-autoload
46 (deftheme modus-operandi-tinted 46 (deftheme modus-operandi-tinted
47 "Elegant, highly legible theme with a light ocher background. 47 "Elegant, highly legible theme with a light ochre background.
48Conforms with the highest legibility standard for color contrast 48Conforms with the highest legibility standard for color contrast
49between background and foreground in any given piece of text, 49between background and foreground in any given piece of text,
50which corresponds to a minimum contrast in relative luminance of 50which corresponds to a minimum contrast in relative luminance of
@@ -132,22 +132,30 @@ which corresponds to a minimum contrast in relative luminance of
132 (bg-magenta-nuanced "#f8e6f5") 132 (bg-magenta-nuanced "#f8e6f5")
133 (bg-cyan-nuanced "#e0f2fa") 133 (bg-cyan-nuanced "#e0f2fa")
134 134
135;;; Uncommon accent backgrounds 135;;; Uncommon accent background and foreground pairs
136
137 (bg-clay "#f1c8b5")
138 (fg-clay "#63192a")
139
140 (bg-ochre "#f0e3c0")
141 (fg-ochre "#573a30")
142
143 (bg-lavender "#dfcdfa")
144 (fg-lavender "#443379")
136 145
137 (bg-ochre "#f0e0cc")
138 (bg-lavender "#dfdbfa")
139 (bg-sage "#c0e7d4") 146 (bg-sage "#c0e7d4")
147 (fg-sage "#124b41")
140 148
141;;; Graphs 149;;; Graphs
142 150
143 (bg-graph-red-0 "#ef7969") 151 (bg-graph-red-0 "#ef7969")
144 (bg-graph-red-1 "#ffaab4") 152 (bg-graph-red-1 "#ffaab4")
145 (bg-graph-green-0 "#2fe029") 153 (bg-graph-green-0 "#45c050")
146 (bg-graph-green-1 "#75ef30") 154 (bg-graph-green-1 "#75ef30")
147 (bg-graph-yellow-0 "#ffcf00") 155 (bg-graph-yellow-0 "#ffcf00")
148 (bg-graph-yellow-1 "#f9ff00") 156 (bg-graph-yellow-1 "#f9ff00")
149 (bg-graph-blue-0 "#7f90ff") 157 (bg-graph-blue-0 "#7f90ff")
150 (bg-graph-blue-1 "#9fc6ff") 158 (bg-graph-blue-1 "#a6c0ff")
151 (bg-graph-magenta-0 "#e07fff") 159 (bg-graph-magenta-0 "#e07fff")
152 (bg-graph-magenta-1 "#fad0ff") 160 (bg-graph-magenta-1 "#fad0ff")
153 (bg-graph-cyan-0 "#70d3f0") 161 (bg-graph-cyan-0 "#70d3f0")
@@ -246,19 +254,24 @@ which corresponds to a minimum contrast in relative luminance of
246 254
247;;;; Code mappings 255;;;; Code mappings
248 256
257 (bracket fg-main)
249 (builtin magenta-warmer) 258 (builtin magenta-warmer)
250 (comment red-faint) 259 (comment red-faint)
251 (constant blue-cooler) 260 (constant blue-cooler)
252 (docstring green-faint) 261 (delimiter fg-main)
253 (docmarkup magenta-faint) 262 (docmarkup magenta-faint)
263 (docstring green-faint)
254 (fnname magenta) 264 (fnname magenta)
255 (keyword magenta-cooler) 265 (keyword magenta-cooler)
266 (number fg-main)
267 (operator fg-main)
256 (preprocessor red-cooler) 268 (preprocessor red-cooler)
269 (punctuation fg-main)
270 (rx-backslash magenta)
271 (rx-construct green-cooler)
257 (string blue-warmer) 272 (string blue-warmer)
258 (type cyan-cooler) 273 (type cyan-cooler)
259 (variable cyan) 274 (variable cyan)
260 (rx-construct green-cooler)
261 (rx-backslash magenta)
262 275
263;;;; Accent mappings 276;;;; Accent mappings
264 277
@@ -481,6 +494,19 @@ Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
481with both as symbols. The latter is a named color that already 494with both as symbols. The latter is a named color that already
482exists in the palette and is associated with a HEX-VALUE.") 495exists in the palette and is associated with a HEX-VALUE.")
483 496
497 (defcustom modus-operandi-tinted-palette-user nil
498 "Like the `modus-operandi-tinted-palette' for user-defined entries.
499This is meant to extend the palette with custom named colors and/or
500semantic palette mappings. Those may then be used in combination with
501palette overrides (also see `modus-themes-common-palette-overrides' and
502`modus-operandi-tinted-palette-overrides')."
503 :group 'modus-themes
504 :package-version '(modus-themes . "4.5.0")
505 :type '(repeat (list symbol (choice symbol string)))
506 :set #'modus-themes--set-option
507 :initialize #'custom-initialize-default
508 :link '(info-link "(modus-themes) Option to extend the palette for use with overrides"))
509
484 (defcustom modus-operandi-tinted-palette-overrides nil 510 (defcustom modus-operandi-tinted-palette-overrides nil
485 "Overrides for `modus-operandi-tinted-palette'. 511 "Overrides for `modus-operandi-tinted-palette'.
486 512
diff --git a/etc/themes/modus-operandi-tritanopia-theme.el b/etc/themes/modus-operandi-tritanopia-theme.el
index 56be8329784..ae62198c4ed 100644
--- a/etc/themes/modus-operandi-tritanopia-theme.el
+++ b/etc/themes/modus-operandi-tritanopia-theme.el
@@ -134,22 +134,30 @@ standard)."
134 (bg-magenta-nuanced "#f8e6f5") 134 (bg-magenta-nuanced "#f8e6f5")
135 (bg-cyan-nuanced "#e0f2fa") 135 (bg-cyan-nuanced "#e0f2fa")
136 136
137;;; Uncommon accent backgrounds 137;;; Uncommon accent background and foreground pairs
138
139 (bg-clay "#f1c8b5")
140 (fg-clay "#63192a")
141
142 (bg-ochre "#f0e3c0")
143 (fg-ochre "#573a30")
144
145 (bg-lavender "#dfcdfa")
146 (fg-lavender "#443379")
138 147
139 (bg-ochre "#f0e0cc")
140 (bg-lavender "#dfdbfa")
141 (bg-sage "#c0e7d4") 148 (bg-sage "#c0e7d4")
149 (fg-sage "#124b41")
142 150
143;;; Graphs 151;;; Graphs
144 152
145 (bg-graph-red-0 "#ef7969") 153 (bg-graph-red-0 "#ef7969")
146 (bg-graph-red-1 "#ffaab4") 154 (bg-graph-red-1 "#ffaab4")
147 (bg-graph-green-0 "#70c3b0") 155 (bg-graph-green-0 "#68c0a0")
148 (bg-graph-green-1 "#a3dfe5") 156 (bg-graph-green-1 "#a5dfd0")
149 (bg-graph-yellow-0 "#d99f9f") 157 (bg-graph-yellow-0 "#d99f9f")
150 (bg-graph-yellow-1 "#ffb58f") 158 (bg-graph-yellow-1 "#ffb58f")
151 (bg-graph-blue-0 "#80a0df") 159 (bg-graph-blue-0 "#80a0df")
152 (bg-graph-blue-1 "#9fcaff") 160 (bg-graph-blue-1 "#a8cfff")
153 (bg-graph-magenta-0 "#efafcf") 161 (bg-graph-magenta-0 "#efafcf")
154 (bg-graph-magenta-1 "#ffdaef") 162 (bg-graph-magenta-1 "#ffdaef")
155 (bg-graph-cyan-0 "#7fd3ed") 163 (bg-graph-cyan-0 "#7fd3ed")
@@ -248,19 +256,24 @@ standard)."
248 256
249;;;; Code mappings 257;;;; Code mappings
250 258
259 (bracket fg-main)
251 (builtin magenta) 260 (builtin magenta)
252 (comment red-faint) 261 (comment red-faint)
253 (constant green-cooler) 262 (constant green-cooler)
254 (docstring fg-alt) 263 (delimiter fg-main)
255 (docmarkup magenta-faint) 264 (docmarkup magenta-faint)
265 (docstring fg-alt)
256 (fnname cyan-warmer) 266 (fnname cyan-warmer)
257 (keyword red-cooler) 267 (keyword red-cooler)
268 (number fg-main)
269 (operator fg-main)
258 (preprocessor red-warmer) 270 (preprocessor red-warmer)
271 (punctuation fg-main)
272 (rx-backslash magenta)
273 (rx-construct red)
259 (string cyan) 274 (string cyan)
260 (type blue-warmer) 275 (type blue-warmer)
261 (variable cyan-cooler) 276 (variable cyan-cooler)
262 (rx-construct red)
263 (rx-backslash magenta)
264 277
265;;;; Accent mappings 278;;;; Accent mappings
266 279
@@ -483,6 +496,19 @@ Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
483with both as symbols. The latter is a named color that already 496with both as symbols. The latter is a named color that already
484exists in the palette and is associated with a HEX-VALUE.") 497exists in the palette and is associated with a HEX-VALUE.")
485 498
499 (defcustom modus-operandi-tritanopia-palette-user nil
500 "Like the `modus-operandi-tritanopia-palette' for user-defined entries.
501This is meant to extend the palette with custom named colors and/or
502semantic palette mappings. Those may then be used in combination with
503palette overrides (also see `modus-themes-common-palette-overrides' and
504`modus-operandi-tritanopia-palette-overrides')."
505 :group 'modus-themes
506 :package-version '(modus-themes . "4.5.0")
507 :type '(repeat (list symbol (choice symbol string)))
508 :set #'modus-themes--set-option
509 :initialize #'custom-initialize-default
510 :link '(info-link "(modus-themes) Option to extend the palette for use with overrides"))
511
486 (defcustom modus-operandi-tritanopia-palette-overrides nil 512 (defcustom modus-operandi-tritanopia-palette-overrides nil
487 "Overrides for `modus-operandi-tritanopia-palette'. 513 "Overrides for `modus-operandi-tritanopia-palette'.
488 514
diff --git a/etc/themes/modus-themes.el b/etc/themes/modus-themes.el
index b8be7f07a57..7950a3da39d 100644
--- a/etc/themes/modus-themes.el
+++ b/etc/themes/modus-themes.el
@@ -5,7 +5,7 @@
5;; Author: Protesilaos Stavrou <info@protesilaos.com> 5;; Author: Protesilaos Stavrou <info@protesilaos.com>
6;; Maintainer: Protesilaos Stavrou <info@protesilaos.com> 6;; Maintainer: Protesilaos Stavrou <info@protesilaos.com>
7;; URL: https://github.com/protesilaos/modus-themes 7;; URL: https://github.com/protesilaos/modus-themes
8;; Version: 4.4.0 8;; Version: 4.5.0
9;; Package-Requires: ((emacs "27.1")) 9;; Package-Requires: ((emacs "27.1"))
10;; Keywords: faces, theme, accessibility 10;; Keywords: faces, theme, accessibility
11 11
@@ -641,6 +641,20 @@ In user configuration files the form may look like this:
641 :initialize #'custom-initialize-default 641 :initialize #'custom-initialize-default
642 :link '(info-link "(modus-themes) Command prompts")) 642 :link '(info-link "(modus-themes) Command prompts"))
643 643
644
645(defcustom modus-themes-common-palette-user nil
646 "Common user-defined colors to extend all the themes' palettes.
647This is meant to extend the palette of the active Modus theme with
648custom named colors and/or semantic palette mappings. Those may then be
649used in combination with palette overrides (see
650`modus-themes-common-palette-overrides')."
651 :group 'modus-themes
652 :package-version '(modus-themes . "4.5.0")
653 :type '(repeat (list symbol (choice symbol string)))
654 :set #'modus-themes--set-option
655 :initialize #'custom-initialize-default
656 :link '(info-link "(modus-themes) Extend the palette for use with overrides"))
657
644(defcustom modus-themes-common-palette-overrides nil 658(defcustom modus-themes-common-palette-overrides nil
645 "Set palette overrides for all the Modus themes. 659 "Set palette overrides for all the Modus themes.
646 660
@@ -1068,22 +1082,22 @@ C1 and C2 are color values written in hexadecimal RGB."
1068 (car (or (modus-themes--list-enabled-themes) 1082 (car (or (modus-themes--list-enabled-themes)
1069 (modus-themes--list-known-themes)))) 1083 (modus-themes--list-known-themes))))
1070 1084
1071(defun modus-themes--palette-symbol (theme &optional overrides) 1085(defun modus-themes--palette-symbol (theme &optional suffix)
1072 "Return THEME palette as a symbol. 1086 "Return THEME palette as a symbol of the form THEME-palette.
1073With optional OVERRIDES, return THEME palette overrides as a 1087With optional SUFFIX, return THEME-palette-SUFFIX as a symbol."
1074symbol." 1088 (when theme
1075 (when-let ((suffix (cond 1089 (intern
1076 ((and theme overrides) 1090 (if suffix
1077 "palette-overrides") 1091 (format "%s-palette-%s" theme suffix)
1078 (theme 1092 (format "%s-palette" theme)))))
1079 "palette"))))
1080 (intern (format "%s-%s" theme suffix))))
1081 1093
1082(defun modus-themes--palette-value (theme &optional overrides) 1094(defun modus-themes--palette-value (theme &optional overrides)
1083 "Return palette value of THEME with optional OVERRIDES." 1095 "Return palette value of THEME with optional OVERRIDES."
1084 (let ((base-value (symbol-value (modus-themes--palette-symbol theme)))) 1096 (let* ((core-palette (symbol-value (modus-themes--palette-symbol theme)))
1097 (user-palette (symbol-value (modus-themes--palette-symbol theme "user")))
1098 (base-value (append user-palette modus-themes-common-palette-user core-palette)))
1085 (if overrides 1099 (if overrides
1086 (append (symbol-value (modus-themes--palette-symbol theme :overrides)) 1100 (append (symbol-value (modus-themes--palette-symbol theme "overrides"))
1087 modus-themes-common-palette-overrides 1101 modus-themes-common-palette-overrides
1088 base-value) 1102 base-value)
1089 base-value))) 1103 base-value)))
@@ -1389,7 +1403,7 @@ color that is combined with FG-FOR-BG."
1389 :foreground fg 1403 :foreground fg
1390 :weight 1404 :weight
1391 ;; If we have `bold' specifically, we inherit the face of 1405 ;; If we have `bold' specifically, we inherit the face of
1392 ;; the same name. This allows the user to customize that 1406 ;; the same name. This allows the user to customise that
1393 ;; face, such as to change its font family. 1407 ;; face, such as to change its font family.
1394 (if (and weight (not (eq weight 'bold))) 1408 (if (and weight (not (eq weight 'bold)))
1395 weight 1409 weight
@@ -1621,7 +1635,7 @@ FG and BG are the main colors."
1621 `(comint-highlight-prompt ((,c :inherit modus-themes-prompt))) 1635 `(comint-highlight-prompt ((,c :inherit modus-themes-prompt)))
1622 `(confusingly-reordered ((,c :inherit modus-themes-lang-error))) 1636 `(confusingly-reordered ((,c :inherit modus-themes-lang-error)))
1623 `(edmacro-label ((,c :inherit bold :foreground ,accent-0))) 1637 `(edmacro-label ((,c :inherit bold :foreground ,accent-0)))
1624 `(elisp-shorthand-font-lock-face ((,c :inherit font-lock-variable-name-face))) 1638 `(elisp-shorthand-font-lock-face ((,c :inherit (italic font-lock-preprocessor-face))))
1625 `(error ((,c :inherit bold :foreground ,err))) 1639 `(error ((,c :inherit bold :foreground ,err)))
1626 `(escape-glyph ((,c :foreground ,err))) 1640 `(escape-glyph ((,c :foreground ,err)))
1627 `(file-name-shadow ((,c :inherit shadow))) 1641 `(file-name-shadow ((,c :inherit shadow)))
@@ -1650,6 +1664,10 @@ FG and BG are the main colors."
1650 `(shadow ((,c :foreground ,fg-dim))) 1664 `(shadow ((,c :foreground ,fg-dim)))
1651 `(success ((,c :inherit bold :foreground ,info))) 1665 `(success ((,c :inherit bold :foreground ,info)))
1652 `(trailing-whitespace ((,c :background ,bg-space-err))) 1666 `(trailing-whitespace ((,c :background ,bg-space-err)))
1667 ;; NOTE 2024-06-22: I use `list' here to suppress a bogus warning
1668 ;; from the compiler: it says I should depend on Emacs 29 to use
1669 ;; vtable.
1670 (list 'vtable `((,c :inherit modus-themes-fixed-pitch)))
1653 `(warning ((,c :inherit bold :foreground ,warning))) 1671 `(warning ((,c :inherit bold :foreground ,warning)))
1654;;;;; buttons, links, widgets 1672;;;;; buttons, links, widgets
1655 `(button ((,c :background ,bg-link :foreground ,fg-link :underline ,underline-link))) 1673 `(button ((,c :background ,bg-link :foreground ,fg-link :underline ,underline-link)))
@@ -1768,7 +1786,7 @@ FG and BG are the main colors."
1768 `(font-latex-italic-face ((,c :inherit italic))) 1786 `(font-latex-italic-face ((,c :inherit italic)))
1769 `(font-latex-math-face ((,c :inherit font-lock-constant-face))) 1787 `(font-latex-math-face ((,c :inherit font-lock-constant-face)))
1770 `(font-latex-script-char-face ((,c :inherit font-lock-builtin-face))) 1788 `(font-latex-script-char-face ((,c :inherit font-lock-builtin-face)))
1771 `(font-latex-sectioning-5-face ((,c :inherit (bold modus-themes-variable-pitch) :foreground ,fg-alt))) 1789 `(font-latex-sectioning-5-face ((,c :inherit bold :foreground ,fg-alt)))
1772 `(font-latex-sedate-face ((,c :inherit font-lock-keyword-face))) 1790 `(font-latex-sedate-face ((,c :inherit font-lock-keyword-face)))
1773 `(font-latex-slide-title-face ((,c :inherit modus-themes-heading-1))) 1791 `(font-latex-slide-title-face ((,c :inherit modus-themes-heading-1)))
1774 `(font-latex-string-face ((,c :inherit font-lock-string-face))) 1792 `(font-latex-string-face ((,c :inherit font-lock-string-face)))
@@ -2175,7 +2193,7 @@ FG and BG are the main colors."
2175 `(doom-modeline-evil-visual-state ((,c :inherit warning))) 2193 `(doom-modeline-evil-visual-state ((,c :inherit warning)))
2176 `(doom-modeline-info ((,c :inherit success))) 2194 `(doom-modeline-info ((,c :inherit success)))
2177 `(doom-modeline-input-method (( ))) 2195 `(doom-modeline-input-method (( )))
2178 `(doom-modeline-lsp-error ((,c :inherit bold-italic))) 2196 `(doom-modeline-lsp-error ((,c :inherit bold)))
2179 `(doom-modeline-lsp-running (( ))) 2197 `(doom-modeline-lsp-running (( )))
2180 `(doom-modeline-lsp-success ((,c :inherit success))) 2198 `(doom-modeline-lsp-success ((,c :inherit success)))
2181 `(doom-modeline-lsp-warning ((,c :inherit warning))) 2199 `(doom-modeline-lsp-warning ((,c :inherit warning)))
@@ -2186,7 +2204,7 @@ FG and BG are the main colors."
2186 `(doom-modeline-repl-success ((,c :inherit success))) 2204 `(doom-modeline-repl-success ((,c :inherit success)))
2187 `(doom-modeline-repl-warning ((,c :inherit warning))) 2205 `(doom-modeline-repl-warning ((,c :inherit warning)))
2188 `(doom-modeline-time (( ))) 2206 `(doom-modeline-time (( )))
2189 `(doom-modeline-urgent ((,c :inherit bold-italic :foreground ,modeline-err))) 2207 `(doom-modeline-urgent ((,c :inherit bold :foreground ,modeline-err)))
2190 `(doom-modeline-warning ((,c :inherit warning))) 2208 `(doom-modeline-warning ((,c :inherit warning)))
2191;;;;; ediff 2209;;;;; ediff
2192 `(ediff-current-diff-A ((,c :background ,bg-removed :foreground ,fg-removed))) 2210 `(ediff-current-diff-A ((,c :background ,bg-removed :foreground ,fg-removed)))
@@ -2400,16 +2418,21 @@ FG and BG are the main colors."
2400;;;;; fold-this 2418;;;;; fold-this
2401 `(fold-this-overlay ((,c :background ,bg-inactive))) 2419 `(fold-this-overlay ((,c :background ,bg-inactive)))
2402;;;;; font-lock 2420;;;;; font-lock
2421 `(font-lock-bracket-face ((,c :foreground ,bracket)))
2403 `(font-lock-builtin-face ((,c :inherit modus-themes-bold :foreground ,builtin))) 2422 `(font-lock-builtin-face ((,c :inherit modus-themes-bold :foreground ,builtin)))
2404 `(font-lock-comment-delimiter-face ((,c :inherit font-lock-comment-face))) 2423 `(font-lock-comment-delimiter-face ((,c :inherit font-lock-comment-face)))
2405 `(font-lock-comment-face ((,c :inherit modus-themes-slant :foreground ,comment))) 2424 `(font-lock-comment-face ((,c :inherit modus-themes-slant :foreground ,comment)))
2406 `(font-lock-constant-face ((,c :foreground ,constant))) 2425 `(font-lock-constant-face ((,c :foreground ,constant)))
2426 `(font-lock-delimiter-face ((,c :foreground ,delimiter)))
2407 `(font-lock-doc-face ((,c :inherit modus-themes-slant :foreground ,docstring))) 2427 `(font-lock-doc-face ((,c :inherit modus-themes-slant :foreground ,docstring)))
2408 `(font-lock-doc-markup-face ((,c :inherit modus-themes-slant :foreground ,docmarkup))) 2428 `(font-lock-doc-markup-face ((,c :inherit modus-themes-slant :foreground ,docmarkup)))
2409 `(font-lock-function-name-face ((,c :foreground ,fnname))) 2429 `(font-lock-function-name-face ((,c :foreground ,fnname)))
2410 `(font-lock-keyword-face ((,c :inherit modus-themes-bold :foreground ,keyword))) 2430 `(font-lock-keyword-face ((,c :inherit modus-themes-bold :foreground ,keyword)))
2411 `(font-lock-negation-char-face ((,c :inherit error))) 2431 `(font-lock-negation-char-face ((,c :inherit error)))
2432 `(font-lock-number-face ((,c :foreground ,number)))
2433 `(font-lock-operator-face ((,c :foreground ,operator)))
2412 `(font-lock-preprocessor-face ((,c :foreground ,preprocessor))) 2434 `(font-lock-preprocessor-face ((,c :foreground ,preprocessor)))
2435 `(font-lock-punctuation-face ((,c :foreground ,punctuation)))
2413 `(font-lock-regexp-grouping-backslash ((,c :inherit modus-themes-bold :foreground ,rx-backslash))) 2436 `(font-lock-regexp-grouping-backslash ((,c :inherit modus-themes-bold :foreground ,rx-backslash)))
2414 `(font-lock-regexp-grouping-construct ((,c :inherit modus-themes-bold :foreground ,rx-construct))) 2437 `(font-lock-regexp-grouping-construct ((,c :inherit modus-themes-bold :foreground ,rx-construct)))
2415 `(font-lock-string-face ((,c :foreground ,string))) 2438 `(font-lock-string-face ((,c :foreground ,string)))
@@ -2712,6 +2735,24 @@ FG and BG are the main colors."
2712;;;;; ivy-posframe 2735;;;;; ivy-posframe
2713 `(ivy-posframe-border ((,c :background ,border))) 2736 `(ivy-posframe-border ((,c :background ,border)))
2714 `(ivy-posframe-cursor ((,c :background ,fg-main :foreground ,bg-main))) 2737 `(ivy-posframe-cursor ((,c :background ,fg-main :foreground ,bg-main)))
2738;;;;; jabber
2739 `(jabber-activity-face ((,c :foreground ,modeline-info)))
2740 `(jabber-roster-user-away ((,c :foreground ,red-faint)))
2741 `(jabber-roster-user-xa ((,c :foreground ,magenta :italic t)))
2742 `(jabber-roster-user-dnd ((,c :foreground ,red :bold t)))
2743 `(jabber-roster-user-chatty ((,c :foreground ,cyan-intense)))
2744 `(jabber-roster-user-error ((,c :inherit error)))
2745 `(jabber-roster-user-offline ((,c :foreground ,fg-dim :italic t)))
2746 `(jabber-roster-user-online ((,c :foreground ,cyan :weight bold)))
2747 `(jabber-chat-prompt-foreign ((,c :foreground ,red :weight bold)))
2748 `(jabber-chat-prompt-system ((,c :foreground ,green)))
2749 `(jabber-chat-prompt-local ((,c :foreground ,cyan)))
2750 `(jabber-chat-error ((,c :inherit error)))
2751 `(jabber-activity-personal-face ((,c :foreground ,blue-intense)))
2752 `(jabber-rare-time-face ((,c :foreground ,green-faint :underline t)))
2753 `(jabber-title-small ((,c :weight bold :height 1.0 :foreground ,fg-heading-3)))
2754 `(jabber-title-medium ((,c :weight bold :width expanded :height 2.0 :foreground ,fg-heading-2)))
2755 `(jabber-title-large ((,c :weight bold :width ultra-expanded :height 3.0 :foreground ,fg-heading-1)))
2715;;;;; japanese-holidays 2756;;;;; japanese-holidays
2716 `(japanese-holiday-saturday ((,c :foreground ,date-holiday-other))) 2757 `(japanese-holiday-saturday ((,c :foreground ,date-holiday-other)))
2717;;;;; jira (org-jira) 2758;;;;; jira (org-jira)
@@ -2761,6 +2802,10 @@ FG and BG are the main colors."
2761;;;;; keycast 2802;;;;; keycast
2762 `(keycast-command ((,c :inherit bold))) 2803 `(keycast-command ((,c :inherit bold)))
2763 `(keycast-key ((,c :inherit modus-themes-bold :background ,keybind :foreground ,bg-main))) 2804 `(keycast-key ((,c :inherit modus-themes-bold :background ,keybind :foreground ,bg-main)))
2805;;;;; kmacro-menu
2806 `(kmacro-menu-mark ((,c :inherit bold)))
2807 `(kmacro-menu-marked ((,c :inherit modus-themes-mark-sel)))
2808 `(kmacro-menu-flagged ((,c :inherit modus-themes-mark-del)))
2764;;;;; ledger-mode 2809;;;;; ledger-mode
2765 `(ledger-font-auto-xact-face ((,c :inherit font-lock-builtin-face))) 2810 `(ledger-font-auto-xact-face ((,c :inherit font-lock-builtin-face)))
2766 `(ledger-font-account-name-face ((,c :foreground ,name))) 2811 `(ledger-font-account-name-face ((,c :foreground ,name)))
@@ -2958,6 +3003,8 @@ FG and BG are the main colors."
2958 `(markup-title-4-face ((,c :inherit modus-themes-heading-5))) 3003 `(markup-title-4-face ((,c :inherit modus-themes-heading-5)))
2959 `(markup-title-5-face ((,c :inherit modus-themes-heading-6))) 3004 `(markup-title-5-face ((,c :inherit modus-themes-heading-6)))
2960 `(markup-verbatim-face ((,c :inherit modus-themes-prose-verbatim))) 3005 `(markup-verbatim-face ((,c :inherit modus-themes-prose-verbatim)))
3006;;;;; mbdepth
3007 `(minibuffer-depth-indicator ((,c :inherit modus-themes-mark-alt)))
2961;;;;; mct 3008;;;;; mct
2962 `(mct-highlight-candidate ((,c :inherit modus-themes-completion-selected))) 3009 `(mct-highlight-candidate ((,c :inherit modus-themes-completion-selected)))
2963;;;;; messages 3010;;;;; messages
@@ -3132,7 +3179,8 @@ FG and BG are the main colors."
3132 `(notmuch-tag-unread ((,c :foreground ,accent-1))) 3179 `(notmuch-tag-unread ((,c :foreground ,accent-1)))
3133 `(notmuch-tree-match-author-face ((,c :inherit notmuch-search-matching-authors))) 3180 `(notmuch-tree-match-author-face ((,c :inherit notmuch-search-matching-authors)))
3134 `(notmuch-tree-match-date-face ((,c :inherit notmuch-search-date))) 3181 `(notmuch-tree-match-date-face ((,c :inherit notmuch-search-date)))
3135 `(notmuch-tree-match-face ((,c :foreground ,fg-main))) 3182 `(notmuch-tree-match-face ((,c :foreground ,fg-dim)))
3183 `(notmuch-tree-match-subject-face ((,c :foreground ,fg-main)))
3136 `(notmuch-tree-match-tag-face ((,c :inherit notmuch-tag-face))) 3184 `(notmuch-tree-match-tag-face ((,c :inherit notmuch-tag-face)))
3137 `(notmuch-tree-no-match-face ((,c :inherit shadow))) 3185 `(notmuch-tree-no-match-face ((,c :inherit shadow)))
3138 `(notmuch-tree-no-match-date-face ((,c :inherit shadow))) 3186 `(notmuch-tree-no-match-date-face ((,c :inherit shadow)))
@@ -3668,9 +3716,9 @@ FG and BG are the main colors."
3668 `(telega-username ((,c :foreground ,cyan-cooler))) 3716 `(telega-username ((,c :foreground ,cyan-cooler)))
3669 `(telega-webpage-chat-link ((,c :background ,bg-inactive))) 3717 `(telega-webpage-chat-link ((,c :background ,bg-inactive)))
3670 `(telega-webpage-fixed ((,c :inherit modus-themes-fixed-pitch :height 0.85))) 3718 `(telega-webpage-fixed ((,c :inherit modus-themes-fixed-pitch :height 0.85)))
3671 `(telega-webpage-header ((,c :inherit modus-themes-variable-pitch :height 1.3))) 3719 `(telega-webpage-header ((,c :height 1.3)))
3672 `(telega-webpage-preformatted ((,c :inherit modus-themes-fixed-pitch :background ,bg-inactive))) 3720 `(telega-webpage-preformatted ((,c :inherit modus-themes-fixed-pitch :background ,bg-inactive)))
3673 `(telega-webpage-subheader ((,c :inherit modus-themes-variable-pitch :height 1.15))) 3721 `(telega-webpage-subheader ((,c :height 1.15)))
3674;;;;; terraform-mode 3722;;;;; terraform-mode
3675 `(terraform--resource-name-face ((,c :foreground ,keyword))) 3723 `(terraform--resource-name-face ((,c :foreground ,keyword)))
3676 `(terraform--resource-type-face ((,c :foreground ,type))) 3724 `(terraform--resource-type-face ((,c :foreground ,type)))
@@ -3815,6 +3863,12 @@ FG and BG are the main colors."
3815 `(vimish-fold-fringe ((,c :foreground ,cyan))) 3863 `(vimish-fold-fringe ((,c :foreground ,cyan)))
3816 `(vimish-fold-mouse-face ((,c :inherit modus-themes-intense-blue))) 3864 `(vimish-fold-mouse-face ((,c :inherit modus-themes-intense-blue)))
3817 `(vimish-fold-overlay ((,c :background ,bg-inactive))) 3865 `(vimish-fold-overlay ((,c :background ,bg-inactive)))
3866;;;;; viper
3867 `(viper-search ((,c :inherit modus-themes-search-current)))
3868 `(viper-replace-overlay ((,c :inherit modus-themes-search-replace)))
3869 `(viper-minibuffer-emacs (( )))
3870 `(viper-minibuffer-insert (( )))
3871 `(viper-minibuffer-vi (( )))
3818;;;;; visible-mark 3872;;;;; visible-mark
3819 `(visible-mark-active ((,c :background ,bg-blue-intense))) 3873 `(visible-mark-active ((,c :background ,bg-blue-intense)))
3820 `(visible-mark-face1 ((,c :background ,bg-cyan-intense))) 3874 `(visible-mark-face1 ((,c :background ,bg-cyan-intense)))
@@ -3877,7 +3931,7 @@ FG and BG are the main colors."
3877 `(web-mode-css-string-face ((,c :inherit web-mode-string-face))) 3931 `(web-mode-css-string-face ((,c :inherit web-mode-string-face)))
3878 `(web-mode-css-variable-face ((,c :inherit font-lock-variable-name-face))) 3932 `(web-mode-css-variable-face ((,c :inherit font-lock-variable-name-face)))
3879 `(web-mode-current-column-highlight-face ((,c :background ,bg-inactive))) 3933 `(web-mode-current-column-highlight-face ((,c :background ,bg-inactive)))
3880 `(web-mode-current-element-highlight-face ((,c :inherit modus-themes-cyan-subtle))) 3934 `(web-mode-current-element-highlight-face ((,c :inherit modus-themes-subtle-cyan)))
3881 `(web-mode-doctype-face ((,c :inherit font-lock-doc-face))) 3935 `(web-mode-doctype-face ((,c :inherit font-lock-doc-face)))
3882 `(web-mode-error-face ((,c :inherit error))) 3936 `(web-mode-error-face ((,c :inherit error)))
3883 `(web-mode-filter-face ((,c :inherit font-lock-function-name-face))) 3937 `(web-mode-filter-face ((,c :inherit font-lock-function-name-face)))
@@ -3952,6 +4006,10 @@ FG and BG are the main colors."
3952 `(window-divider ((,c :foreground ,border))) 4006 `(window-divider ((,c :foreground ,border)))
3953 `(window-divider-first-pixel ((,c :foreground ,bg-inactive))) 4007 `(window-divider-first-pixel ((,c :foreground ,bg-inactive)))
3954 `(window-divider-last-pixel ((,c :foreground ,bg-inactive))) 4008 `(window-divider-last-pixel ((,c :foreground ,bg-inactive)))
4009;;;;; window-tool-bar-mode
4010 `(window-tool-bar-button ((,c :inherit modus-themes-button)))
4011 `(window-tool-bar-button-hover ((,c :inherit (highlight modus-themes-button))))
4012 `(window-tool-bar-button-disabled ((,c :inherit modus-themes-button :background ,bg-button-inactive :foreground ,fg-button-inactive)))
3955;;;;; widget 4013;;;;; widget
3956 `(widget-button ((,c :inherit bold :foreground ,fg-link))) 4014 `(widget-button ((,c :inherit bold :foreground ,fg-link)))
3957 `(widget-button-pressed ((,c :inherit widget-button :foreground ,fg-link-visited))) 4015 `(widget-button-pressed ((,c :inherit widget-button :foreground ,fg-link-visited)))
@@ -4079,6 +4137,10 @@ FG and BG are the main colors."
4079 ,fg-term-magenta 4137 ,fg-term-magenta
4080 ,fg-term-cyan 4138 ,fg-term-cyan
4081 ,fg-term-white]) 4139 ,fg-term-white])
4140;;;; viper
4141 `(viper-replace-overlay-cursor-color ,err)
4142 `(viper-insert-state-cursor-color ,info)
4143 `(viper-emacs-state-cursor-color ,fg-main)
4082;;;; xterm-color 4144;;;; xterm-color
4083 `(xterm-color-names 4145 `(xterm-color-names
4084 [,fg-term-black 4146 [,fg-term-black
diff --git a/etc/themes/modus-vivendi-deuteranopia-theme.el b/etc/themes/modus-vivendi-deuteranopia-theme.el
index d721dba09a9..815e2403e13 100644
--- a/etc/themes/modus-vivendi-deuteranopia-theme.el
+++ b/etc/themes/modus-vivendi-deuteranopia-theme.el
@@ -134,11 +134,19 @@ standard)."
134 (bg-magenta-nuanced "#2f0c3f") 134 (bg-magenta-nuanced "#2f0c3f")
135 (bg-cyan-nuanced "#042837") 135 (bg-cyan-nuanced "#042837")
136 136
137;;; Uncommon accent backgrounds 137;;; Uncommon accent background and foreground pairs
138
139 (bg-clay "#49191a")
140 (fg-clay "#f1b090")
141
142 (bg-ochre "#462f20")
143 (fg-ochre "#e0d09c")
138 144
139 (bg-ochre "#442c2f")
140 (bg-lavender "#38325c") 145 (bg-lavender "#38325c")
141 (bg-sage "#0f3d30") 146 (fg-lavender "#dfc0f0")
147
148 (bg-sage "#143e32")
149 (fg-sage "#c3e7d4")
142 150
143;;; Graphs 151;;; Graphs
144 152
@@ -248,19 +256,24 @@ standard)."
248 256
249;;;; Code mappings 257;;;; Code mappings
250 258
259 (bracket fg-main)
251 (builtin magenta-warmer) 260 (builtin magenta-warmer)
252 (comment yellow-cooler) 261 (comment yellow-cooler)
253 (constant blue-cooler) 262 (constant blue-cooler)
254 (docstring cyan-faint) 263 (delimiter fg-main)
255 (docmarkup magenta-faint) 264 (docmarkup magenta-faint)
265 (docstring cyan-faint)
256 (fnname magenta) 266 (fnname magenta)
257 (keyword magenta-cooler) 267 (keyword magenta-cooler)
268 (number fg-main)
269 (operator fg-main)
258 (preprocessor red-cooler) 270 (preprocessor red-cooler)
271 (punctuation fg-main)
272 (rx-backslash blue-cooler)
273 (rx-construct yellow-cooler)
259 (string blue-warmer) 274 (string blue-warmer)
260 (type cyan-cooler) 275 (type cyan-cooler)
261 (variable cyan) 276 (variable cyan)
262 (rx-construct yellow-cooler)
263 (rx-backslash blue-cooler)
264 277
265;;;; Accent mappings 278;;;; Accent mappings
266 279
@@ -483,6 +496,19 @@ Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
483with both as symbols. The latter is a named color that already 496with both as symbols. The latter is a named color that already
484exists in the palette and is associated with a HEX-VALUE.") 497exists in the palette and is associated with a HEX-VALUE.")
485 498
499 (defcustom modus-vivendi-deuteranopia-palette-user nil
500 "Like the `modus-vivendi-deuteranopia-palette' for user-defined entries.
501This is meant to extend the palette with custom named colors and/or
502semantic palette mappings. Those may then be used in combination with
503palette overrides (also see `modus-themes-common-palette-overrides' and
504`modus-vivendi-deuteranopia-palette-overrides')."
505 :group 'modus-themes
506 :package-version '(modus-themes . "4.5.0")
507 :type '(repeat (list symbol (choice symbol string)))
508 :set #'modus-themes--set-option
509 :initialize #'custom-initialize-default
510 :link '(info-link "(modus-themes) Option to extend the palette for use with overrides"))
511
486 (defcustom modus-vivendi-deuteranopia-palette-overrides nil 512 (defcustom modus-vivendi-deuteranopia-palette-overrides nil
487 "Overrides for `modus-vivendi-deuteranopia-palette'. 513 "Overrides for `modus-vivendi-deuteranopia-palette'.
488 514
diff --git a/etc/themes/modus-vivendi-theme.el b/etc/themes/modus-vivendi-theme.el
index 8b822974c15..8f56d0ca78e 100644
--- a/etc/themes/modus-vivendi-theme.el
+++ b/etc/themes/modus-vivendi-theme.el
@@ -132,11 +132,19 @@ which corresponds to a minimum contrast in relative luminance of
132 (bg-magenta-nuanced "#2f0c3f") 132 (bg-magenta-nuanced "#2f0c3f")
133 (bg-cyan-nuanced "#042837") 133 (bg-cyan-nuanced "#042837")
134 134
135;;; Uncommon accent backgrounds 135;;; Uncommon accent background and foreground pairs
136
137 (bg-clay "#49191a")
138 (fg-clay "#f1b090")
139
140 (bg-ochre "#462f20")
141 (fg-ochre "#e0d09c")
136 142
137 (bg-ochre "#442c2f")
138 (bg-lavender "#38325c") 143 (bg-lavender "#38325c")
139 (bg-sage "#0f3d30") 144 (fg-lavender "#dfc0f0")
145
146 (bg-sage "#143e32")
147 (fg-sage "#c3e7d4")
140 148
141;;; Graphs 149;;; Graphs
142 150
@@ -246,19 +254,24 @@ which corresponds to a minimum contrast in relative luminance of
246 254
247;;;; Code mappings 255;;;; Code mappings
248 256
257 (bracket fg-main)
249 (builtin magenta-warmer) 258 (builtin magenta-warmer)
250 (comment fg-dim) 259 (comment fg-dim)
251 (constant blue-cooler) 260 (constant blue-cooler)
252 (docstring cyan-faint) 261 (delimiter fg-main)
253 (docmarkup magenta-faint) 262 (docmarkup magenta-faint)
263 (docstring cyan-faint)
254 (fnname magenta) 264 (fnname magenta)
255 (keyword magenta-cooler) 265 (keyword magenta-cooler)
266 (number fg-main)
267 (operator fg-main)
256 (preprocessor red-cooler) 268 (preprocessor red-cooler)
269 (punctuation fg-main)
270 (rx-backslash magenta)
271 (rx-construct green-cooler)
257 (string blue-warmer) 272 (string blue-warmer)
258 (type cyan-cooler) 273 (type cyan-cooler)
259 (variable cyan) 274 (variable cyan)
260 (rx-construct green-cooler)
261 (rx-backslash magenta)
262 275
263;;;; Accent mappings 276;;;; Accent mappings
264 277
@@ -481,6 +494,19 @@ Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
481with both as symbols. The latter is a named color that already 494with both as symbols. The latter is a named color that already
482exists in the palette and is associated with a HEX-VALUE.") 495exists in the palette and is associated with a HEX-VALUE.")
483 496
497 (defcustom modus-vivendi-palette-user nil
498 "Like the `modus-vivendi--palette' for user-defined entries.
499This is meant to extend the palette with custom named colors and/or
500semantic palette mappings. Those may then be used in combination with
501palette overrides (also see `modus-themes-common-palette-overrides' and
502`modus-vivendi--palette-overrides')."
503 :group 'modus-themes
504 :package-version '(modus-themes . "4.5.0")
505 :type '(repeat (list symbol (choice symbol string)))
506 :set #'modus-themes--set-option
507 :initialize #'custom-initialize-default
508 :link '(info-link "(modus-themes) Option to extend the palette for use with overrides"))
509
484 (defcustom modus-vivendi-palette-overrides nil 510 (defcustom modus-vivendi-palette-overrides nil
485 "Overrides for `modus-vivendi-palette'. 511 "Overrides for `modus-vivendi-palette'.
486 512
diff --git a/etc/themes/modus-vivendi-tinted-theme.el b/etc/themes/modus-vivendi-tinted-theme.el
index 5aa44304ee9..55c1cd7d2d1 100644
--- a/etc/themes/modus-vivendi-tinted-theme.el
+++ b/etc/themes/modus-vivendi-tinted-theme.el
@@ -132,11 +132,19 @@ which corresponds to a minimum contrast in relative luminance of
132 (bg-magenta-nuanced "#2f0c3f") 132 (bg-magenta-nuanced "#2f0c3f")
133 (bg-cyan-nuanced "#042837") 133 (bg-cyan-nuanced "#042837")
134 134
135;;; Uncommon accent backgrounds 135;;; Uncommon accent background and foreground pairs
136
137 (bg-clay "#49191a")
138 (fg-clay "#f1b090")
139
140 (bg-ochre "#462f20")
141 (fg-ochre "#e0d09c")
136 142
137 (bg-ochre "#442c2f")
138 (bg-lavender "#38325c") 143 (bg-lavender "#38325c")
139 (bg-sage "#0f3d30") 144 (fg-lavender "#dfc0f0")
145
146 (bg-sage "#143e32")
147 (fg-sage "#c3e7d4")
140 148
141;;; Graphs 149;;; Graphs
142 150
@@ -246,19 +254,24 @@ which corresponds to a minimum contrast in relative luminance of
246 254
247;;;; Code mappings 255;;;; Code mappings
248 256
257 (bracket fg-main)
249 (builtin magenta-warmer) 258 (builtin magenta-warmer)
250 (comment red-faint) 259 (comment red-faint)
251 (constant blue-cooler) 260 (constant blue-cooler)
252 (docstring cyan-faint) 261 (delimiter fg-main)
253 (docmarkup magenta-faint) 262 (docmarkup magenta-faint)
263 (docstring cyan-faint)
254 (fnname magenta) 264 (fnname magenta)
255 (keyword magenta-cooler) 265 (keyword magenta-cooler)
266 (number fg-main)
267 (operator fg-main)
256 (preprocessor red-cooler) 268 (preprocessor red-cooler)
269 (punctuation fg-main)
270 (rx-backslash magenta)
271 (rx-construct green-cooler)
257 (string blue-warmer) 272 (string blue-warmer)
258 (type cyan-cooler) 273 (type cyan-cooler)
259 (variable cyan) 274 (variable cyan)
260 (rx-construct green-cooler)
261 (rx-backslash magenta)
262 275
263;;;; Accent mappings 276;;;; Accent mappings
264 277
@@ -481,6 +494,19 @@ Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
481with both as symbols. The latter is a named color that already 494with both as symbols. The latter is a named color that already
482exists in the palette and is associated with a HEX-VALUE.") 495exists in the palette and is associated with a HEX-VALUE.")
483 496
497 (defcustom modus-vivendi-tinted-palette-user nil
498 "Like the `modus-vivendi-tinted-palette' for user-defined entries.
499This is meant to extend the palette with custom named colors and/or
500semantic palette mappings. Those may then be used in combination with
501palette overrides (also see `modus-themes-common-palette-overrides' and
502`modus-vivendi-tinted-palette-overrides')."
503 :group 'modus-themes
504 :package-version '(modus-themes . "4.5.0")
505 :type '(repeat (list symbol (choice symbol string)))
506 :set #'modus-themes--set-option
507 :initialize #'custom-initialize-default
508 :link '(info-link "(modus-themes) Option to extend the palette for use with overrides"))
509
484 (defcustom modus-vivendi-tinted-palette-overrides nil 510 (defcustom modus-vivendi-tinted-palette-overrides nil
485 "Overrides for `modus-vivendi-tinted-palette'. 511 "Overrides for `modus-vivendi-tinted-palette'.
486 512
diff --git a/etc/themes/modus-vivendi-tritanopia-theme.el b/etc/themes/modus-vivendi-tritanopia-theme.el
index 2327a1e9c97..f1bd65e97bc 100644
--- a/etc/themes/modus-vivendi-tritanopia-theme.el
+++ b/etc/themes/modus-vivendi-tritanopia-theme.el
@@ -134,11 +134,19 @@ standard)."
134 (bg-magenta-nuanced "#2f0c3f") 134 (bg-magenta-nuanced "#2f0c3f")
135 (bg-cyan-nuanced "#042837") 135 (bg-cyan-nuanced "#042837")
136 136
137;;; Uncommon accent backgrounds 137;;; Uncommon accent background and foreground pairs
138
139 (bg-clay "#49191a")
140 (fg-clay "#f1b090")
141
142 (bg-ochre "#462f20")
143 (fg-ochre "#e0d09c")
138 144
139 (bg-ochre "#442c2f")
140 (bg-lavender "#38325c") 145 (bg-lavender "#38325c")
141 (bg-sage "#0f3d30") 146 (fg-lavender "#dfc0f0")
147
148 (bg-sage "#143e32")
149 (fg-sage "#c3e7d4")
142 150
143;;; Graphs 151;;; Graphs
144 152
@@ -248,19 +256,24 @@ standard)."
248 256
249;;;; Code mappings 257;;;; Code mappings
250 258
259 (bracket fg-main)
251 (builtin magenta) 260 (builtin magenta)
252 (comment red-faint) 261 (comment red-faint)
253 (constant green-faint) 262 (constant green-faint)
254 (docstring fg-alt) 263 (delimiter fg-main)
255 (docmarkup magenta-faint) 264 (docmarkup magenta-faint)
265 (docstring fg-alt)
256 (fnname cyan-warmer) 266 (fnname cyan-warmer)
257 (keyword red-cooler) 267 (keyword red-cooler)
268 (number fg-main)
269 (operator fg-main)
258 (preprocessor red-warmer) 270 (preprocessor red-warmer)
271 (punctuation fg-main)
272 (rx-backslash magenta)
273 (rx-construct red)
259 (string cyan) 274 (string cyan)
260 (type blue-warmer) 275 (type blue-warmer)
261 (variable cyan-cooler) 276 (variable cyan-cooler)
262 (rx-construct red)
263 (rx-backslash magenta)
264 277
265;;;; Accent mappings 278;;;; Accent mappings
266 279
@@ -483,6 +496,19 @@ Semantic color mappings have the form (MAPPING-NAME COLOR-NAME)
483with both as symbols. The latter is a named color that already 496with both as symbols. The latter is a named color that already
484exists in the palette and is associated with a HEX-VALUE.") 497exists in the palette and is associated with a HEX-VALUE.")
485 498
499 (defcustom modus-vivendi-tritanopia-palette-user nil
500 "Like the `modus-vivendi-tritanopia-palette' for user-defined entries.
501This is meant to extend the palette with custom named colors and/or
502semantic palette mappings. Those may then be used in combination with
503palette overrides (also see `modus-themes-common-palette-overrides' and
504`modus-vivendi-tritanopia-palette-overrides')."
505 :group 'modus-themes
506 :package-version '(modus-themes . "4.5.0")
507 :type '(repeat (list symbol (choice symbol string)))
508 :set #'modus-themes--set-option
509 :initialize #'custom-initialize-default
510 :link '(info-link "(modus-themes) Option to extend the palette for use with overrides"))
511
486 (defcustom modus-vivendi-tritanopia-palette-overrides nil 512 (defcustom modus-vivendi-tritanopia-palette-overrides nil
487 "Overrides for `modus-vivendi-tritanopia-palette'. 513 "Overrides for `modus-vivendi-tritanopia-palette'.
488 514