From: Protesilaos Stavrou <info@protesilaos.com>
To: 49572@debbugs.gnu.org
Subject: bug#49572: 28.0.50; [PATCH] Update modus-themes to version 1.5.0
Date: Thu, 15 Jul 2021 17:26:44 +0300 [thread overview]
Message-ID: <87czrjps9n.fsf@protesilaos.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 312 bytes --]
Hello everyone,
Today I published the new version of the modus-themes. A detailed
description of all changes is available on my website (no JS required):
<https://protesilaos.com/codelog/2021-07-15-modus-themes-1-5-0/>.
Patch attached.
Thank you!
Protesilaos
--
Protesilaos Stavrou
https://protesilaos.com
[-- Attachment #2: 0001-Update-modus-themes-to-version-1.5.0.patch --]
[-- Type: text/x-patch, Size: 273050 bytes --]
From 169425d379eb1f045953d4fe4bde357f4f143aa2 Mon Sep 17 00:00:00 2001
Message-Id: <169425d379eb1f045953d4fe4bde357f4f143aa2.1626358822.git.info@protesilaos.com>
From: Protesilaos Stavrou <info@protesilaos.com>
Date: Thu, 15 Jul 2021 17:20:07 +0300
Subject: [PATCH] Update modus-themes to version 1.5.0
* doc/misc/modus-themes.org (Enable and load): Include internal link.
(Sample configuration for use-package): Update code sample.
(Customization Options): Update references to customization options.
(Option for more italic constructs): Document new variable, as an
alias of the deprecated 'modus-themes-slanted-constructs'.
(Option for syntax highlighting, Option for links)
(Option for command prompt styles, Option for mode line presentation)
(Option for language checkers)
(Option for line highlighting (hl-line-mode))
(Option for parenthesis matching (show-paren-mode))
(Option for active region, Option for the headings' overall style):
Update documentation to describe new possible values, expressed as a
list of symbols.
(Option for Org agenda constructs): Document new user option.
(Control the scale of headings): Update symbol of variable.
(Remap face with local value (DIY), Backdrop for pdf-tools (DIY)):
Tweak text of internal reference.
(Font configurations for Org and others (DIY)): Add internal link and
document how to configure the 'bold' and 'italic' faces.
(Custom Org user faces (DIY)): Minor corrections or changes to single
words.
(Full support for packages or face groups): Include new items.
(Notes on individual packages): Add notes on Avy hints, the colour of
days in 'M-x calendar', and underlines in 'compilation-mode' buffers.
(What is the best setup for legibility?): Remove single word.
(Acknowledgements): Update list of contributors.
* etc/themes/modus-themes.el (modus-themes-faces)
(modus-themes-operandi-colors, modus-themes-vivendi-colors)
(modus-themes-subtle-red, modus-themes-subtle-green)
(modus-themes-subtle-yellow, modus-themes-subtle-blue)
(modus-themes-subtle-magenta, modus-themes-subtle-cyan)
(modus-themes-subtle-neutral, modus-themes-intense-red)
(modus-themes-intense-green, modus-themes-intense-yellow)
(modus-themes-intense-blue, modus-themes-intense-magenta)
(modus-themes-intense-cyan, modus-themes-intense-neutral)
(modus-themes-refine-red, modus-themes-refine-green)
(modus-themes-refine-yellow, modus-themes-refine-blue)
(modus-themes-refine-magenta, modus-themes-refine-cyan)
(modus-themes-active-red, modus-themes-active-green)
(modus-themes-active-yellow, modus-themes-active-blue)
(modus-themes-active-magenta, modus-themes-active-cyan)
(modus-themes-fringe-red, modus-themes-fringe-green)
(modus-themes-fringe-yellow, modus-themes-fringe-blue)
(modus-themes-fringe-magenta, modus-themes-fringe-cyan)
(modus-themes-nuanced-red, modus-themes-nuanced-green)
(modus-themes-nuanced-yellow, modus-themes-nuanced-blue)
(modus-themes-nuanced-magenta, modus-themes-nuanced-cyan)
(modus-themes-special-cold, modus-themes-special-mild)
(modus-themes-special-warm, modus-themes-special-calm)
(modus-themes-diff-added, modus-themes-diff-changed)
(modus-themes-diff-removed, modus-themes-diff-refine-added)
(modus-themes-diff-refine-changed, modus-themes-diff-refine-removed)
(modus-themes-diff-focus-added, modus-themes-diff-focus-changed)
(modus-themes-diff-focus-removed, modus-themes-diff-heading)
(modus-themes-pseudo-header, modus-themes-mark-alt)
(modus-themes-mark-del, modus-themes-mark-sel, modus-themes-mark-symbol)
(modus-themes-heading-1, modus-themes-heading-2, modus-themes-heading-3)
(modus-themes-heading-4, modus-themes-heading-5, modus-themes-heading-6)
(modus-themes-heading-7, modus-themes-heading-8, modus-themes-hl-line)
(modus-themes-bold, modus-themes-slant, modus-themes-variable-pitch)
(modus-themes-graph-red-0, modus-themes-graph-red-1)
(modus-themes-graph-green-0, modus-themes-graph-green-1)
(modus-themes-graph-yellow-0, modus-themes-graph-yellow-1)
(modus-themes-graph-blue-0, modus-themes-graph-blue-1)
(modus-themes-graph-magenta-0, modus-themes-graph-magenta-1)
(modus-themes-graph-cyan-0, modus-themes-graph-cyan-1)
(modus-themes-lang-note, modus-themes-lang-warning)
(modus-themes-lang-error, modus-themes-reset-soft)
(modus-themes-reset-hard, modus-themes-key-binding)
(modus-themes-search-success, modus-themes-search-success-modeline)
(modus-themes-search-success-lazy): Add new ':group' specification for
custom faces.
(modus-themes-operandi-color-overrides)
(modus-themes-vivendi-color-overrides, modus-themes-bold-constructs)
(modus-themes-variable-pitch-headings, modus-themes-variable-pitch-ui)
(modus-themes-no-mixed-fonts, modus-themes-fringes)
(modus-themes-scale-headings, modus-themes-scale-1, modus-themes-scale-2)
(modus-themes-scale-3, modus-themes-scale-4, modus-themes-scale-title)
(modus-themes-org-blocks, modus-themes-completions)
(modus-themes-success-deuteranopia, modus-themes-mail-citations)
(modus-themes-subtle-line-numbers, modus-themes-intense-hl-line): Add
custom setter.
(modus-themes-scale-5, modus-themes-scale-title): Deprecate variable
and replace it with alias 'modus-themes-scale-title'.
(modus-themes-slanted-constructs, modus-themes-italic-constructs):
Deprecate variable and replace it with alias
'modus-themes-italic-constructs'.
(modus-themes-org-habit, modus-themes-org-agenda): Deprecate variable
and make its functionality a part of 'modus-themes-org-agenda'.
(modus-themes-headings, modus-themes-mode-line, modus-themes-diffs)
(modus-themes-prompts, modus-themes-paren-match, modus-themes-syntax)
(modus-themes-links, modus-themes-region, modus-themes-lang-checkers)
(modus-themes-org-blocks): Make user options accept a value as a list
of properties.
(modus-themes--mixed-fonts, modus-themes--slant)
(modus-themes--fixed-pitch, modus-themes--lang-check)
(modus-themes--prompt, modus-themes--paren)
(modus-themes--syntax-foreground, modus-themes--syntax-extra)
(modus-themes--syntax-string, modus-themes--syntax-docstring)
(modus-themes--syntax-comment, modus-themes--heading-p)
(modus-themes--heading, modus-themes--org-habit)
(modus-themes--mode-line-attrs, modus-themes--link-color)
(modus-themes--link, modus-themes--region, modus-themes--hl-line):
Update internal functions to parse new values for user options.
* etc/themes/modus-operandi-theme.el,
etc/themes/modus-vivendi-theme.el: Bump version number.
A detailed change log is provided here (no javascript required):
<https://protesilaos.com/codelog/2021-07-15-modus-themes-1-5-0/>.
---
doc/misc/modus-themes.org | 1291 +++++++++-----
etc/themes/modus-operandi-theme.el | 2 +-
etc/themes/modus-themes.el | 2523 +++++++++++++++++++---------
etc/themes/modus-vivendi-theme.el | 2 +-
4 files changed, 2549 insertions(+), 1269 deletions(-)
diff --git a/doc/misc/modus-themes.org b/doc/misc/modus-themes.org
index 9b1a0014ca..5bb230f892 100644
--- a/doc/misc/modus-themes.org
+++ b/doc/misc/modus-themes.org
@@ -2,12 +2,12 @@
#+author: Protesilaos Stavrou
#+email: info@protesilaos.com
#+language: en
-#+options: ':t toc:nil author:t email:t
+#+options: ':t toc:nil author:t email:t num:t
#+startup: content
-#+macro: stable-version 1.4.0
-#+macro: release-date 2021-05-25
-#+macro: development-version 1.5.0-dev
+#+macro: stable-version 1.5.0
+#+macro: release-date 2021-07-15
+#+macro: development-version 1.6.0-dev
#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
#+macro: space @@texinfo:@: @@
#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
@@ -245,8 +245,11 @@ * Enable and load
#+end_src
Changes to the available customization options must always be evaluated
-before loading a theme ([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]]). This is how a basic
-setup could look like:
+before loading a theme ([[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization Options]]). An exception to this
+norm is when using the various Custom interfaces or with commands like
+{{{kbd(M-x customize-set-variable)}}}, which automatically reload the theme by
+default ([[#h:9001527a-4e2c-43e0-98e8-3ef72d770639][Option for inhibiting theme reload]]). This is how a basic setup
+could look like:
#+begin_src emacs-lisp
(require 'modus-themes)
@@ -294,9 +297,9 @@ ** Sample configuration for use-package
:ensure ; omit this to use the built-in themes
:init
;; Add all your customizations prior to loading the themes
- (setq modus-themes-slanted-constructs t
+ (setq modus-themes-italic-constructs t
modus-themes-bold-constructs nil
- modus-themes-region 'no-extend)
+ modus-themes-region '(bg-only no-extend))
;; Load the theme files before enabling a theme (else you get an error).
(modus-themes-load-themes)
@@ -366,7 +369,7 @@ * Customization Options
The Modus themes are highly configurable, though they should work well
without any further tweaks. By default, all customization options are
-set to nil.
+set to nil, unless otherwise noted in this manual.
Remember that all customization options must be evaluated before loading
a theme ([[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]]).
@@ -375,68 +378,78 @@ * Customization Options
this manual.
#+begin_src emacs-lisp
-(setq modus-themes-slanted-constructs t
+(setq modus-themes-italic-constructs t
modus-themes-bold-constructs nil
modus-themes-no-mixed-fonts nil
modus-themes-subtle-line-numbers nil
modus-themes-success-deuteranopia t
+ modus-themes-inhibit-reload t ; only applies to `customize-set-variable' and related
modus-themes-fringes nil ; {nil,'subtle,'intense}
- ;; Options for `modus-themes-lang-checkers': nil,
- ;; 'straight-underline, 'subtle-foreground,
- ;; 'subtle-foreground-straight-underline, 'intense-foreground,
- ;; 'intense-foreground-straight-underline, 'colored-background
+ ;; Options for `modus-themes-lang-checkers' are either nil (the
+ ;; default), or a list of properties that may include any of those
+ ;; symbols: `straight-underline', `text-also', `background',
+ ;; `intense'
modus-themes-lang-checkers nil
- ;; Options for `modus-themes-mode-line': nil, '3d, 'moody,
- ;; 'borderless, 'borderless-3d, 'borderless-moody, 'accented,
- ;; 'accented-3d, 'accented-moody, 'borderless-accented,
- ;; 'borderless-accented-3d, 'borderless-accented-moody
- modus-themes-mode-line '3d
+ ;; Options for `modus-themes-mode-line' are either nil, or a list
+ ;; that can combine any of `3d' OR `moody', `borderless',
+ ;; `accented'. The variable's doc string shows all possible
+ ;; combinations.
+ modus-themes-mode-line '(3d accented)
- ;; Options for `modus-themes-syntax': nil, 'faint,
- ;; 'yellow-comments, 'green-strings,
- ;; 'yellow-comments-green-strings, 'alt-syntax,
- ;; 'alt-syntax-yellow-comments, 'faint-yellow-comments
+ ;; Options for `modus-themes-syntax' are either nil (the default),
+ ;; or a list of properties that may include any of those symbols:
+ ;; `faint', `yellow-comments', `green-strings', `alt-syntax'
modus-themes-syntax nil
- ;; Options for `modus-themes-hl-line': nil, 'intense-background,
- ;; 'accented-background, 'underline-neutral,
- ;; 'underline-accented, 'underline-only-neutral,
- ;; 'underline-only-accented
- modus-themes-hl-line 'underline-neutral
+ ;; Options for `modus-themes-hl-line' are either nil (the default),
+ ;; or a list of properties that may include any of those symbols:
+ ;; `accented', `underline', `intense'
+ modus-themes-hl-line '(underline accented)
- modus-themes-paren-match 'subtle-bold ; {nil,'subtle-bold,'intense,'intense-bold}
+ ;; Options for `modus-themes-paren-match' are either nil (the
+ ;; default), or a list of properties that may include any of those
+ ;; symbols: `bold', `intense', `underline'
+ modus-themes-paren-match '(bold intense)
- ;; Options for `modus-themes-links': nil, 'faint,
- ;; 'neutral-underline, 'faint-neutral-underline, 'no-underline,
- ;; 'underline-only, 'neutral-underline-only
- modus-themes-links 'neutral-underline
+ ;; Options for `modus-themes-links' are either nil (the default),
+ ;; or a list of properties that may include any of those symbols:
+ ;; `neutral-underline' OR `no-underline', `faint' OR `no-color',
+ ;; `bold', `italic', `background'
+ modus-themes-links '(neutral-underline background)
- ;; Options for `modus-themes-prompts': nil, 'subtle-accented,
- ;; 'intense-accented, 'subtle-gray, 'intense-gray
- modus-themes-prompts 'subtle-gray
+ ;; Options for `modus-themes-prompts' are either nil (the
+ ;; default), or a list of properties that may include any of those
+ ;; symbols: `background', `bold', `gray', `intense', `italic'
+ modus-themes-prompts '(intense bold)
modus-themes-completions 'moderate ; {nil,'moderate,'opinionated}
modus-themes-mail-citations nil ; {nil,'faint,'monochrome}
- ;; Options for `modus-themes-region': nil, 'no-extend, 'bg-only,
- ;; 'bg-only-no-extend, 'accent, 'accent-no-extend
- modus-themes-region 'bg-only-no-extend
+ ;; Options for `modus-themes-region' are either nil (the default),
+ ;; or a list of properties that may include any of those symbols:
+ ;; `no-extend', `bg-only', `accented'
+ modus-themes-region '(bg-only no-extend)
;; Options for `modus-themes-diffs': nil, 'desaturated,
;; 'bg-only, 'deuteranopia, 'fg-only-deuteranopia
modus-themes-diffs 'fg-only-deuteranopia
modus-themes-org-blocks 'gray-background ; {nil,'gray-background,'tinted-background}
- modus-themes-org-habit nil ; {nil,'simplified,'traffic-light}
+
+ modus-themes-org-agenda ; this is an alist: read the manual or its doc string
+ '((header-block . (variable-pitch scale-title))
+ (header-date . (grayscale workaholic bold-today))
+ (scheduled . uniform)
+ (habit . traffic-light-deuteranopia))
modus-themes-headings ; this is an alist: read the manual or its doc string
- '((1 . line)
- (2 . rainbow-line-no-bold)
- (t . no-bold))
+ '((1 . (overline background))
+ (2 . (rainbow overline))
+ (t . (no-bold)))
modus-themes-variable-pitch-ui nil
modus-themes-variable-pitch-headings t
@@ -445,9 +458,30 @@ * Customization Options
modus-themes-scale-2 1.15
modus-themes-scale-3 1.21
modus-themes-scale-4 1.27
- modus-themes-scale-5 1.33)
+ modus-themes-scale-title 1.33)
#+end_src
+** Option for inhibiting theme reload
+:properties:
+:alt_title: Custom reload theme
+:description: Toggle auto-reload of the theme when setting custom variables
+:custom_id: h:9001527a-4e2c-43e0-98e8-3ef72d770639
+:end:
+#+vindex: modus-themes-inhibit-reload
+
+Symbol: ~modus-themes-inhibit-reload~
+
+Possible values:
+
+1. ~nil~
+2. ~t~ (default)
+
+By default, customizing a theme-related user option through the Custom
+interfaces or with {{{kbd(M-x customize-set-variable)}}} will not reload the
+currently active Modus theme.
+
+Enable this behaviour by setting this variable to ~nil~.
+
** Option for color-coding success state (deuteranopia)
:properties:
:alt_title: Success' color-code
@@ -501,26 +535,36 @@ ** Option for more bold constructs
syntax. It also affects certain mode line indicators and command-line
prompts.
-** Option for more slanted constructs
+Advanced users may also want to configure the exact attributes of the
+~bold~ face.
+
+[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
+
+** Option for more italic constructs
:properties:
-:alt_title: Slanted constructs
-:description: Toggle slanted constructs (italics) in code
+:alt_title: Italic constructs
+:description: Toggle italic font constructs in code
:custom_id: h:977c900d-0d6d-4dbb-82d9-c2aae69543d6
:end:
-#+vindex: modus-themes-slanted-constructs
+#+vindex: modus-themes-italic-constructs
-Symbol: ~modus-themes-slanted-constructs~
+Symbol: ~modus-themes-italic-constructs~
Possible values:
1. ~nil~ (default)
2. ~t~
-The default is to not use slanted text (italics) unless it is absolutely
-necessary.
+The default is to not use slanted text forms (italics) unless it is
+absolutely necessary.
-With a non-nil value (~t~) choose to render more faces in slanted text.
-This typically affects documentation strings and code comments.
+With a non-nil value (~t~) choose to render more faces in italics. This
+typically affects documentation strings and code comments.
+
+Advanced users may also want to configure the exact attributes of the
+~italic~ face.
+
+[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
** Option for syntax highlighting
:properties:
@@ -532,44 +576,57 @@ ** Option for syntax highlighting
Symbol: ~modus-themes-syntax~
-Possible values:
+Possible values are expressed as a list of properties (default is ~nil~ or
+an empty list). The list can include any of the following symbols:
-1. ~nil~ (default)
-2. ~faint~
-3. ~yellow-comments~
-4. ~green-strings~
-5. ~yellow-comments-green-strings~
-6. ~alt-syntax~
-7. ~alt-syntax-yellow-comments~
-8. ~faint-yellow-comments~
-
-The default style (nil) for code syntax highlighting is a balanced
++ ~faint~
++ ~yellow-comments~
++ ~green-strings~
++ ~alt-syntax~
+
+The default (a ~nil~ value or an empty list) is to use a balanced
combination of colors on the cyan-blue-magenta side of the spectrum.
-There is little to no use of greens, yellows, or reds, except when it is
-necessary.
+There is little to no use of greens, yellows, and reds. Comments are
+gray, strings are blue colored, doc strings are a shade of cyan, while
+color combinations are designed to avoid exaggerations.
+
+The property ~faint~ fades the saturation of all applicable colors, where
+that is possible or appropriate.
+
+The property ~yellow-comments~ applies a yellow color to comments.
-Option ~faint~ is like the default in terms of the choice of palette but
-applies desaturated color values.
+The property ~green-strings~ applies a green color to strings and a green
+tint to doc strings.
-Option ~yellow-comments~ adds a yellow tint to comments. The rest of the
-syntax is the same as the default.
+The property ~alt-syntax~ changes the combination of colors beyond strings
+and comments, so that the effective palette is broadened to provide
+greater variety relative to the default.
-Option ~green-strings~ replaces the blue/cyan/cold color variants in
-strings with greener alternatives. The rest of the syntax remains the
-same.
+Combinations of any of those properties are expressed as a list, like in
+these examples:
-Option ~yellow-comments-green-strings~ combines yellow comments with green
-strings and the rest of the default syntax highlighting style.
+#+begin_src emacs-lisp
+(faint)
+(green-strings yellow-comments)
+(alt-syntax green-strings yellow-comments)
+(faint alt-syntax green-strings yellow-comments)
+#+end_src
-Option ~alt-syntax~ expands the active spectrum by applying color
-combinations with more contrasting hues between them. Expect to find
-red and green variants in addition to cyan, blue, magenta.
+The order in which the properties are set is not significant.
-Option ~alt-syntax-yellow-comments~ combines ~alt-syntax~ with
-~yellow-comments~.
+In user configuration files the form may look like this:
-Option ~faint-yellow-comments~ combines the ~faint~ style with
-~yellow-comments~.
+#+begin_src emacs-lisp
+(setq modus-themes-syntax '(faint alt-syntax))
+#+end_src
+
+Independent of this variable, users may also control the use of a bold
+weight or italic text: ~modus-themes-bold-constructs~ and
+~modus-themes-italic-constructs~.
+
+[[#h:b25714f6-0fbe-41f6-89b5-6912d304091e][Option for more bold constructs]].
+
+[[#h:977c900d-0d6d-4dbb-82d9-c2aae69543d6][Option for more italic constructs]].
** Option for no font mixing
:properties:
@@ -611,43 +668,66 @@ ** Option for links
Symbol: ~modus-themes-links~
-Possible values:
+Possible values are expressed as a list of properties (default is ~nil~ or
+an empty list). The list can include any of the following symbols:
-1. ~nil~ (default)
-2. ~faint~
-3. ~neutral-underline~
-4. ~faint-neutral-underline~
-5. ~no-underline~
-6. ~underline-only~
-7. ~neutral-underline-only~
++ Underline style:
+ - ~neutral-underline~
+ - ~no-underline~
++ Text coloration:
+ - ~faint~
+ - ~no-color~
++ ~bold~
++ ~italic~
++ ~background~
+
+The default (a ~nil~ value or an empty list) is a prominent text color,
+typically blue, with an underline of the same color.
-The default style (nil) for links is to apply an underline and a
-saturated color to the affected text. The color of the two is the same,
-which makes the link fairly prominent.
+For the style of the underline, a ~neutral-underline~ property turns the
+color of the line into a subtle gray, while the ~no-underline~ property
+removes the line altogether. If both of those are set, the latter takes
+precedence.
-Option ~faint~ follows the same approach as the default, but uses less
-intense colors.
+For text coloration, a ~faint~ property desaturates the color of the text
+and the underline, unless the underline is affected by the
+aforementioned properties. While a ~no-color~ property removes the color
+from the text. If both of those are set, the latter takes precedence.
-Option ~neutral-underline~ changes the underline's color to a subtle gray,
-while retaining the default text color.
+A ~bold~ property applies a heavy typographic weight to the text of the
+link.
-Option ~faint-neutral-underline~ combines a desaturated text color with a
-subtle gray underline.
+An ~italic~ property adds a slant to the link's text (italic or oblique
+forms, depending on the typeface).
-Option ~no-underline~ removes link underlines altogether, while retaining
-their original fairly vivid color.
+A ~background~ property applies a subtle tinted background color.
-Option ~underline-only~ applies a prominent underline while making the
-affected text colorless (it uses the same foreground as the theme's
-default).
+In case both ~no-underline~ and ~no-color~ are set, then a subtle gray
+background is applied to all links. This can still be combined with the
+~bold~ and ~italic~ properties.
-Option ~neutral-underline-only~ makes the text colorless while using a
-subtle gray underline below it.
+Combinations of any of those properties are expressed as a list,
+like in these examples:
-NOTE: The placement of the underline, i.e. its proximity to the affected
-text, is controlled by the built-in ~x-underline-at-descent-line~,
-~x-use-underline-position-properties~, ~underline-minimum-offset~. Please
-refer to their documentation strings.
+#+begin_src emacs-lisp
+(faint)
+(no-underline faint)
+(no-color no-underline bold)
+(italic bold background no-color no-underline)
+#+end_src
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+#+begin_src emacs-lisp
+(setq modus-themes-links '(neutral-underline background))
+#+end_src
+
+The placement of the underline, meaning its proximity to the text, is
+controlled by ~x-use-underline-position-properties~,
+~x-underline-at-descent-line~, ~underline-minimum-offset~. Please refer to
+their documentation strings.
** Option for command prompt styles
:properties:
@@ -659,27 +739,51 @@ ** Option for command prompt styles
Symbol: ~modus-themes-prompts~
-Possible values:
+Possible values are expressed as a list of properties (default is ~nil~ or
+an empty list). The list can include any of the following symbols:
-1. ~nil~ (default)
-2. ~subtle-accented~ (~subtle~ exists for backward compatibility)
-3. ~intense-accented~ (~intense~ exists for backward compatibility)
-4. ~subtle-gray~
-5. ~intense-gray~
++ ~background~
++ ~bold~
++ ~gray~
++ ~intense~
++ ~italic~
+
+The default (a ~nil~ value or an empty list) means to only use a subtle
+accented foreground color.
+
+The property ~background~ applies a background color to the prompt's text.
+By default, this is a subtle accented value.
-The default does not use any background for minibuffer and command line
-prompts. It relies exclusively on an accented foreground color.
+The property ~intense~ makes the foreground color more prominent. If the
+~background~ property is also set, it amplifies the value of the
+background as well.
-Options ~subtle-accented~ and ~intense-accented~ will change both the
-background and the foreground values to use accented color combinations
-that follow the hue of the default styles' foreground (e.g. the default
-minibuffer prompt is cyan text, so these combinations will involved a
-cyan background and an appropriate cyan foreground). The difference
-between the two is that the latter has a more pronounced/noticeable
-effect than the former.
+The property ~gray~ changes the prompt's colors to grayscale. This
+affects the foreground and, if the ~background~ property is also set, the
+background. Its effect is subtle, unless it is combined with the
+~intense~ property.
-Options ~subtle-gray~, ~intense-gray~ are like their accented counterparts,
-except they use grayscale values.
+The property ~bold~ makes the text use a bold typographic weight.
+Similarly, ~italic~ adds a slant to the font's forms (italic or oblique
+forms, depending on the typeface).
+
+Combinations of any of those properties are expressed as a list, like in
+these examples:
+
+#+begin_src emacs-lisp
+(intense)
+(bold intense)
+(intense bold gray)
+(intense background gray bold)
+#+end_src
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+#+begin_src emacs-lisp
+(setq modus-themes-prompts '(background gray))
+#+end_src
** Option for mode line presentation
:properties:
@@ -691,83 +795,78 @@ ** Option for mode line presentation
Symbol: ~modus-themes-mode-line~
-Possible values:
+Possible values, which can be expressed as a list of combinations of box
+effect, color, and border visibility:
-1. ~nil~ (default)
-2. ~3d~
-3. ~moody~
-4. ~borderless~
-5. ~borderless-3d~
-6. ~borderless-moody~
-7. ~accented~
-8. ~accented-3d~
-9. ~accented-moody~
-10. ~borderless-accented~
-11. ~borderless-accented-3d~
-12. ~borderless-accented-moody~
-
-The default produces a two-dimensional effect both for the active and
-inactive mode lines. The differences between the two are limited to
-distinct shades of grayscale values, with the active being more intense
-than the inactive.
-
-Option ~3d~ will make the active mode line look like a three-dimensional
-rectangle. Inactive mode lines remain 2D, though they are slightly
-toned down relative to the default. This aesthetic is virtually the
-same as what you get when you run Emacs without any customizations
-(=emacs -Q= on the command line).
-
-While ~moody~ removes all box effects from the mode lines and applies
-underline and overline properties instead. It also tones down a bit the
-inactive mode lines. This is meant to optimize things for use with the
-[[https://github.com/tarsius/moody][moody package]] (hereinafter referred to as "Moody"), though it can work
-fine even without it.
-
-The ~borderless~ option uses the same colors as the default (nil value),
-but removes the border effect. This is done by making the box property
-use the same color as the background, effectively blending the two and
-creating some padding.
-
-The ~borderless-3d~ and ~borderless-moody~ approximate the ~3d~ and ~moody~
-options respectively, while removing the borders. However, to ensure
-that the inactive mode lines remain visible, they apply a slightly more
-prominent background to them than what their counterparts do (same
-inactive background as with the default).
-
-Similarly, ~accented~, ~accented-3d~, and ~accented-moody~ correspond to the
-default (~nil~), ~3d~, and ~moody~ styles respectively, except that the active
-mode line uses a colored background instead of the standard shade of
-gray.
-
-Same principle for ~borderless-accented~, ~borderless-accented-3d~, and
-~borderless-accented-moody~ which use a colored background for the active
-mode line and have no discernible borders around both the active and
-inactive the mode lines.
++ Overall style:
+ - ~3d~
+ - ~moody~
++ ~accented~
++ ~borderless~
+
+The default (a nil value or an empty list) is a two-dimensional
+rectangle with a border around it. The active and the inactive
+mode lines use different shades of grayscale values for the
+background, foreground, border.
+
+The ~3d~ property applies a three-dimensional effect to the
+active mode line. The inactive mode lines remain two-dimensional
+and are toned down a bit, relative to the default style.
+
+The ~moody~ property optimizes the mode line for use with the
+library of the same name (hereinafter referred to as 'Moody').
+In practice, it removes the box effect and replaces it with
+underline and overline properties. It also tones down the
+inactive mode lines. Despite its intended purpose, this option
+can also be used without the Moody library (please consult the
+themes' manual on this point for more details). If both ~3d~ and
+~moody~ properties are set, the latter takes precedence.
+
+The ~borderless~ property removes the color of the borders. It
+does not actually remove the borders, but only makes their color
+the same as the background, effectively creating some padding.
+
+The ~accented~ property ensures that the active mode line uses a
+colored background instead of the standard shade of gray.
+
+Combinations of any of those properties are expressed as a list,
+like in these examples:
+
+#+begin_src emacs-lisp
+(accented)
+(borderless 3d)
+(moody accented borderless)
+#+end_src
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+#+begin_src emacs-lisp
+(setq modus-themes-prompts '(borderless accented))
+#+end_src
Note that Moody does not expose any faces that the themes could style
directly. Instead it re-purposes existing ones to render its tabs and
ribbons. As such, there may be cases where the contrast ratio falls
below the 7:1 target that the themes conform with (WCAG AAA). To hedge
-against this, we configure a fallback foreground for the ~moody~ option,
+against this, we configure a fallback foreground for the ~moody~ property,
which will come into effect when the background of the mode line changes
to something less accessible, such as Moody ribbons (read the doc string
of ~set-face-attribute~, specifically ~:distant-foreground~). This fallback
is activated when Emacs determines that the background and foreground of
the given construct are too close to each other in terms of color
-distance. In effect, users would need to experiment with the variable
+distance. In practice, users will need to experiment with the variable
~face-near-same-color-threshold~ to trigger the effect. We find that a
-value of =45000= will suffice, contrary to the default =30000=. Though for
-the ~accented-moody~ value mentioned above, that should be raised up to
-=70000=. Do not set it too high, because it has the adverse effect of
-always overriding the default colors (which have been carefully designed
-to be highly accessible).
+value of =45000= shall suffice, contrary to the default =30000=. Though for
+the combinations that involve the ~accented~ and ~moody~ properties, as
+mentioned above, that should be raised up to =70000=. Do not set it too
+high, because it has the adverse effect of always overriding the default
+colors (which have been carefully designed to be highly accessible).
Furthermore, because Moody expects an underline and overline instead of
-a box style, it is advised you include this in your setup:
-
-#+begin_src emacs-lisp
-(setq x-underline-at-descent-line t)
-#+end_src
+a box style, it is advised to set ~x-underline-at-descent-line~ to a
+non-nil value.
** Option for completion framework aesthetics
:properties:
@@ -877,43 +976,55 @@ ** Option for language checkers
Symbol: ~modus-themes-lang-checkers~
-Possible values:
+Possible values are expressed as a list of properties (default is ~nil~ or
+an empty list). The list can include any of the following symbols:
-1. ~nil~ (default)
-2. ~subtle-foreground~
-3. ~intense-foreground~
-4. ~straight-underline~
-5. ~subtle-foreground-straight-underline~
-6. ~intense-foreground-straight-underline~
-7. ~colored-background~
-
-Nil (the default) applies a color-coded underline to the affected text,
-while it leaves the original foreground in tact. If the display spec
-where Emacs runs in has support for it (e.g. Emacs GUI), the underline's
-style is that of a wave, otherwise it is a straight line.
-
-Options ~subtle-foreground~ and ~intense-foreground~ follow the same
-color-coding pattern and wavy underline of the default, while extending
-it with a corresponding foreground value for the affected text. The
-difference between the two options is one of degree, as their names
-suggest.
-
-Option ~straight-underline~ is like the default but always applies a
-straight line under the affected text. Same principle for
-~subtle-foreground-straight-underline~ and its counterpart
-~intense-foreground-straight-underline~.
-
-Option ~colored-background~ uses a straight underline, a tinted
-background, and a suitable foreground. All are color-coded. This is
-the most intense combination of face properties.
-
-The present variable affects packages and/or face groups such as those
-of =flyspell=, =flymake=, =flycheck=, ~artbollocks-mode~, and ~writegood-mode~.
++ ~straight-underline~
++ ~text-also~
++ ~background~
++ ~intense~
+
+The default (a ~nil~ value or an empty list) applies a color-coded
+underline to the affected text, while it leaves the original foreground
+intact. If the display spec of Emacs has support for it, the
+underline's style is that of a wave, otherwise it is a straight line.
+
+The property ~straight-underline~ ensures that the underline under the
+affected text is always drawn as a straight line.
+
+The property ~text-also~ applies the same color of the underline to the
+affected text.
+
+The property ~background~ adds a color-coded background.
+
+The property ~intense~ amplifies the applicable colors if ~background~
+and/or ~text-only~ are set. If ~intense~ is set on its own, then it implies
+~text-only~.
+
+To disable fringe indicators for Flymake or Flycheck, refer to variables
+~flymake-fringe-indicator-position~ and ~flycheck-indication-mode~,
+respectively.
+
+Combinations of any of those properties can be expressed in a
+list, as in those examples:
+
+#+begin_src emacs-lisp
+(background)
+(straight-underline intense)
+(background text-also straight-underline)
+#+end_src
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+#+begin_src emacs-lisp
+(setq modus-themes-lang-checkers '(text-also background))
+#+end_src
NOTE: The placement of the straight underline, though not the wave
-style, is controlled by the built-in ~x-underline-at-descent-line~,
-~x-use-underline-position-properties~, ~underline-minimum-offset~. Please
-refer to their documentation strings.
+style, is controlled by the built-in variables ~underline-minimum-offset~,
+~x-underline-at-descent-line~, ~x-use-underline-position-properties~.
** Option for line highlighting (hl-line-mode)
:properties:
@@ -925,43 +1036,47 @@ ** Option for line highlighting (hl-line-mode)
Symbol: ~modus-themes-hl-line~
-Possible values:
+Possible values are expressed as a list of properties (default is ~nil~ or
+an empty list). The list can include any of the following symbols:
-1. ~nil~ (default)
-2. ~intense-background~
-3. ~accented-background~
-4. ~underline-neutral~
-5. ~underline-accented~
-6. ~underline-only-neutral~
-7. ~underline-only-accented~
++ ~accented~
++ ~intense~
++ ~underline~
-The default is to use a subtle gray background for the current line when
-~hl-line-mode~ is enabled.
+The default (a ~nil~ value or an empty list) is a subtle gray background
+color.
-The ~intense-background~ applies a more prominent gray to the background
-of the current line.
+The property ~accented~ changes the background to a colored variant.
-With ~accented-background~ the background gets a colored hint and is more
-prominent than the default.
+An ~underline~ property draws a line below the highlighted area. Its
+color is similar to the background, so gray by default or an accent
+color when ~accented~ is also set.
-The ~underline-neutral~ combines the default subtle neutral background
-with a gray underline.
+An ~intense~ property amplifies the colors in use, which may be both the
+background and the underline.
-Similarly, the ~underline-accented~ renders the background of the current
-line in a subtle colored background, while it also draws an accented
-underline.
+Combinations of any of those properties are expressed as a list, like in
+these examples:
-Option ~underline-only-neutral~ produces a neutral underline, but does not
-use any background.
+#+begin_src emacs-lisp
+(intense)
+(underline intense)
+(accented intense underline)
+#+end_src
-While ~underline-only-accented~ also uses just an underline, only this one
-is colored.
+The order in which the properties are set is not significant.
-Consider setting the variable ~x-underline-at-descent-line~ to a non-nil
-value for better results with underlines.
+In user configuration files the form may look like this:
+
+#+begin_src emacs-lisp
+(setq modus-themes-hl-line '(underline accented))
+#+end_src
+
+Set ~x-underline-at-descent-line~ to a non-nil value for better results
+with underlines.
This style affects several packages that enable ~hl-line-mode~, such as
-=elfeed= and =mu4e=.
+=elfeed=, =notmuch=, and =mu4e=.
** Option for line numbers (display-line-numbers-mode)
:properties:
@@ -1002,26 +1117,42 @@ ** Option for parenthesis matching (show-paren-mode)
Symbol: ~modus-themes-paren-match~
-Possible values:
+Possible values are expressed as a list of properties (default is ~nil~ or
+an empty list). The list can include any of the following symbols:
-1. ~nil~ (default)
-2. ~subtle-bold~
-3. ~intense~
-4. ~intense-bold~
++ ~bold~
++ ~intense~
++ ~underline~
-Nil means to use a subtle tinted background color for the matching
+The default (a ~nil~ value or an empty list) is a subtle background color.
+
+The ~bold~ property adds a bold weight to the characters of the matching
delimiters.
-Option ~intense~ applies a saturated background color.
+The ~intense~ property applies a more prominent background color to the
+delimiters.
-Option ~subtle-bold~ is the same as the default, but also makes use of
-bold typographic weight (inherits the ~bold~ face).
+The ~underline~ property draws a straight line under the affected text.
-Option ~intense-bold~ is the same as ~intense~, while it also uses a bold
-weight.
+Combinations of any of those properties are expressed as a list, like in
+these examples:
+
+#+begin_src emacs-lisp
+(bold)
+(underline intense)
+(bold intense underline)
+#+end_src
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+#+begin_src emacs-lisp
+(setq modus-themes-paren-match '(bold intense))
+#+end_src
-This customization variable affects tools such as the built-in
-~show-paren-mode~ and the =smartparens= package.
+This customization variable affects the built-in ~show-paren-mode~ and the
+=smartparens= package.
** Option for active region
:properties:
@@ -1033,33 +1164,41 @@ ** Option for active region
Symbol: ~modus-themes-region~
-Possible values:
+Possible values are expressed as a list of properties (default is ~nil~ or
+an empty list). The list can include any of the following symbols:
-1. ~nil~ (default)
-2. ~no-extend~
-3. ~bg-only~
-4. ~bg-only-no-extend~
-5. ~accent~
-6. ~accent-no-extend~
++ ~no-extend~
++ ~bg-only~
++ ~accented~
-Nil means to only use a prominent gray background with a neutral
-foreground. The foreground overrides all syntax highlighting. The
-region extends to the edge of the window.
+The default (a ~nil~ value or an empty list) is a prominent gray
+background that overrides all foreground colors in the area it
+encompasses. Its reach extends to the edge of the window.
-Option ~no-extend~ preserves the default aesthetic but prevents the region
-from extending to the edge of the window.
+The ~no-extend~ property limits the region to the end of the line, so that
+it does not reach the edge of the window.
-Option ~bg-only~ applies a faint tinted background that is distinct from
-all others used in the theme, while it does not override any existing
-colors. It extends to the edge of the window.
+The ~bg-only~ property makes the region's background color more subtle to
+allow the underlying text to retain its foreground colors.
-Option ~bg-only-no-extend~ is a combination of the ~bg-only~ and ~no-extend~
-options.
+The ~accented~ property applies a more colorful background to the region.
+
+Combinations of any of those properties are expressed as a list, like in
+these examples:
-Option ~accent~ is like the default, though it uses a more colorful
-background, while ~accent-no-extend~ is the same except it draws the
-region only up to the end of each line instead of extending to the edge
-of the window.
+#+begin_src emacs-lisp
+(no-extend)
+(bg-only accented)
+(accented bg-only no-extend)
+#+end_src
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+#+begin_src emacs-lisp
+(setq modus-themes-region '(bg-only no-extend))
+#+end_src
** Option for diff buffer looks
:properties:
@@ -1148,169 +1287,238 @@ ** Option for org-mode block styles
and ~rainbow~. Those will continue to work as they are aliases for
~gray-background~ and ~tinted-background~, respectively.
-** Option for org-habit graph styles
+** Option for Org agenda constructs
:properties:
-:alt_title: Org agenda habits
-:description: Choose among standard, simplified, or traffic light styles
-:custom_id: h:b7e328c0-3034-4db7-9cdf-d5ba12081ca2
+:alt_title: Org agenda
+:description: Control each element in the presentation of the agenda
+:custom_id: h:68f481bc-5904-4725-a3e6-d7ecfa7c3dbc
:end:
-#+vindex: modus-themes-org-habit
+#+vindex: modus-themes-org-agenda
-Symbol: ~modus-themes-org-habit~
+Symbol: ~modus-themes-org-agenda~
-Possible values:
+This is an alist that accepts a =(key . value)= combination. Some values
+are specified as a list. Here is a sample, followed by a description of
+all possible combinations:
-1. ~nil~ (default)
-2. ~simplified~
-3. ~traffic-light~
-
-The default is meant to conform with the original aesthetic of
-=org-habit=. It employs all four color codes that correspond to the
-org-habit states---clear, ready, alert, and overdue---while
-distinguishing between their present and future variants. This results
-in a total of eight colors in use: red, yellow, green, blue, in tinted
-and shaded versions. They cover the full set of information provided by
-the =org-habit= consistency graph.
-
-Option ~simplified~ is like the default except that it removes the
-dichotomy between current and future variants by applying uniform
-color-coded values. It applies a total of four colors: red, yellow,
-green, blue. They produce a simplified consistency graph that is more
-legible (or less "busy") than the default. The intent is to shift focus
-towards the distinction between the four states of a habit task, rather
-than each state's present/future outlook.
-
-Option ~traffic-light~ further reduces the available colors to red,
-yellow, and green. As in ~simplified~, present and future variants appear
-uniformly, but differently from it, the 'clear' state is rendered in a
-green hue, instead of the original blue. This is meant to capture the
-use-case where a habit task being "too early" is less important than it
-being "too late". The difference between ready and clear states is
-attenuated by painting both of them using shades of green. This option
-thus highlights the alert and overdue states.
+#+begin_src emacs-lisp
+(setq modus-themes-org-agenda
+ '((header-block . (variable-pitch scale-title))
+ (header-date . (grayscale workaholic bold-today))
+ (scheduled . uniform)
+ (habit . traffic-light)))
+#+end_src
-** Option for the headings' overall style
-:properties:
-:alt_title: Heading styles
-:description: Choose among several styles, also per heading level
-:custom_id: h:271eff19-97aa-4090-9415-a6463c2f9ae1
-:end:
-#+vindex: modus-themes-headings
+A ~header-block~ key applies to elements that concern the headings which
+demarcate blocks in the structure of the agenda. By default (a ~nil~
+value) those are rendered in a bold typographic weight, plus a height
+that is slightly taller than the default font size. Acceptable values
+come in the form of a list that can include either or both of those
+properties:
-This is defined as an alist and, therefore, uses a different approach
-than other customization options documented in this manual.
+- ~variable-pitch~ to use a proportionately spaced typeface;
+- ~scale-title~ to increase the size to the number assigned to
+ ~modus-themes-scale-title~ ([[#h:6868baa1-beba-45ed-baa5-5fd68322ccb3][Control the scale of headings]]) or ~no-scale~
+ to make the font use the same height as the rest of the buffer.
-Symbol: ~modus-themes-headings~
+In case both ~scale-title~ and ~no-scale~ are in the list, the latter takes
+precedence.
-Possible values, which can be specified for each heading level N
-(examples further below):
+Example usage:
-+ ~nil~ (~t~ is also available for backward compatibility)
-+ ~no-bold~
-+ ~line~
-+ ~line-no-bold~
-+ ~rainbow~
-+ ~rainbow-line~
-+ ~rainbow-line-no-bold~
-+ ~highlight~
-+ ~highlight-no-bold~
-+ ~rainbow-highlight~
-+ ~rainbow-highlight-no-bold~
-+ ~section~
-+ ~section-no-bold~
-+ ~rainbow-section~
-+ ~rainbow-section-no-bold~
-+ ~no-color~
-+ ~no-color-no-bold~
-
-To control faces per level from 1-8, use something like this:
+#+begin_src emacs-lisp
+(header-block . nil)
+(header-block . (scale-title))
+(header-block . (no-scale))
+(header-block . (variable-pitch scale-title))
+#+end_src
+
+A ~header-date~ key covers date headings. Dates use only a foreground
+color by default (a ~nil~ value), with weekdays and weekends having a
+slight difference in hueness. The current date has an added gray
+background. This key accepts a list of values that can include any of
+the following properties:
+
+- ~grayscale~ to make weekdays use the main foreground color and
+ weekends a more subtle gray;
+- ~workaholic~ to make weekdays and weekends look the same in
+ terms of color;
+- ~bold-today~ to apply a bold typographic weight to the current
+ date;
+- ~bold-all~ to render all date headings in a bold weight.
+
+For example:
#+begin_src emacs-lisp
-(setq modus-themes-headings
- '((1 . section)
- (2 . section-no-bold)
- (3 . rainbow-line)
- (t . rainbow-line-no-bold)))
+(header-date . nil)
+(header-date . (workaholic))
+(header-date . (grayscale bold-all))
+(header-date . (grayscale workaholic))
+(header-date . (grayscale workaholic bold-today))
#+end_src
-The above uses the ~section~ value for heading levels 1, ~section-no-bold~
-for headings 2, ~rainbow-line~ for 3. All other levels fall back to
-~rainbow-line-no-bold~.
+A ~scheduled~ key applies to tasks with a scheduled date. By default (a
+~nil~ value), those use varying shades of yellow to denote (i) a past or
+current date and (ii) a future date. Valid values are symbols:
+
+- nil (default);
+- ~uniform~ to make all scheduled dates the same color;
+- ~rainbow~ to use contrasting colors for past, present, future
+ scheduled dates.
-To set a uniform value for all heading levels, use this pattern:
+For example:
#+begin_src emacs-lisp
-;; A given style for every heading
-(setq modus-themes-headings
- '((t . section)))
+(scheduled . nil)
+(scheduled . uniform)
+(scheduled . rainbow)
+#+end_src
-;; Default aesthetic for every heading
-(setq modus-themes-headings nil)
+A ~habit~ key applies to the ~org-habit~ graph. All possible value are
+passed as a symbol. Those are:
+
+- The default (~nil~) is meant to conform with the original aesthetic of
+ ~org-habit~. It employs all four color codes that correspond to the
+ org-habit states---clear, ready, alert, and overdue---while
+ distinguishing between their present and future variants. This
+ results in a total of eight colors in use: red, yellow, green, blue,
+ in tinted and shaded versions. They cover the full set of information
+ provided by the ~org-habit~ consistency graph.
+- ~simplified~ is like the default except that it removes the dichotomy
+ between current and future variants by applying uniform color-coded
+ values. It applies a total of four colors: red, yellow, green, blue.
+ They produce a simplified consistency graph that is more legible (or
+ less busy) than the default. The intent is to shift focus towards the
+ distinction between the four states of a habit task, rather than each
+ state's present/future outlook.
+- ~traffic-light~ further reduces the available colors to red, yellow, and
+ green. As in ~simplified~, present and future variants appear
+ uniformly, but differently from it, the ~clear~ state is rendered in a
+ green hue, instead of the original blue. This is meant to capture the
+ use-case where a habit task being too early is less important than it
+ being too late. The difference between ready and clear states is
+ attenuated by painting both of them using shades of green. This
+ option thus highlights the alert and overdue states.
+- ~traffic-light-deuteranopia~ is like the ~traffic-light~ except its three
+ colors are red, yellow, and blue to be suitable for users with
+ red-green color deficiency (deuteranopia).
+
+For example:
+
+#+begin_src emacs-lisp
+(habit . nil)
+(habit . simplified)
+(habit . traffic-light)
#+end_src
-The default style for headings uses a fairly desaturated foreground
-color in combination with bold typographic weight. To specify this
-style for a given level N, assuming you wish to have another fallback
-option, just assign the value ~nil~ like this:
+Putting it all together, the alist can look like this:
+
+#+begin_src emacs-lisp
+'((header-block . (scale-title variable-pitch))
+ (header-date . (grayscale workaholic bold-today))
+ (scheduled . uniform)
+ (habit . traffic-light))
+
+;; Or else:
+(setq modus-themes-org-agenda
+ '((header-block . (scale-title variable-pitch))
+ (header-date . (grayscale workaholic bold-today))
+ (scheduled . uniform)
+ (habit . traffic-light)))
+#+end_src
+
+** Option for the headings' overall style
+:properties:
+:alt_title: Heading styles
+:description: Choose among several styles, also per heading level
+:custom_id: h:271eff19-97aa-4090-9415-a6463c2f9ae1
+:end:
+#+vindex: modus-themes-headings
+
+Symbol: ~modus-themes-headings~
+
+This is an alist that accepts a =(key . list-of-values)= combination. The
+key is either a number, representing the heading's level or ~t~, which
+pertains to the fallback style. The list of values covers symbols that
+refer to properties, as described below. Here is a sample, followed by
+a presentation of all available properties:
#+begin_src emacs-lisp
(setq modus-themes-headings
- '((1 . nil)
- (2 . line)
- (3) ; same as nil
- (t . rainbow-line-no-bold)))
+ '((1 . (background overline))
+ (2 . (overline rainbow))
+ (t . (monochrome))))
#+end_src
-A description of all other possible styles beyond the default:
+Properties:
-+ ~no-bold~ retains the default text color while removing the bold
- typographic weight.
++ ~rainbow~
++ ~overline~
++ ~background~
++ ~no-bold~
++ ~monochrome~
-+ ~line~ is the same as the default plus an overline across the
- heading's length.
+By default (a ~nil~ value for this variable), all headings have a bold
+typographic weight and use a desaturated text color.
-+ ~line-no-bold~ is the same as ~line~ without bold weight.
+A ~rainbow~ property makes the text color more saturated.
-+ ~rainbow~ uses a more colorful foreground in combination with bold
- typographic weight.
+An ~overline~ property draws a line above the area of the heading.
-+ ~rainbow-line~ is the same as ~rainbow~ plus an overline.
+A ~background~ property adds a subtle tinted color to the background of
+the heading.
-+ ~rainbow-line-no-bold~ is the same as ~rainbow-line~ without the bold
- weight.
+A ~no-bold~ property removes the bold weight from the heading's text.
-+ ~highlight~ retains the default style of a fairly desaturated
- foreground combined with a bold weight and adds to it a subtle
- accented background.
+A ~monochrome~ property makes all headings the same base color, which is
+that of the default for the active theme (black/white). When ~background~
+is also set, ~monochrome~ changes its color to gray. If both ~monochrome~
+and ~rainbow~ are set, the former takes precedence.
-+ ~highlight-no-bold~ is the same as ~highlight~ without a bold weight.
+Combinations of any of those properties are expressed as a list, like in
+these examples:
-+ ~rainbow-highlight~ is the same as ~highlight~ but with a more
- colorful foreground.
+#+begin_src emacs-lisp
+(no-bold)
+(rainbow background)
+(overline monochrome no-bold)
+#+end_src
-+ ~rainbow-highlight-no-bold~ is the same as ~rainbow-highlight~ without
- a bold weight.
+The order in which the properties are set is not significant.
-+ ~section~ retains the default looks and adds to them both an overline
- and a slightly accented background. It is, in effect, a combination
- of the ~line~ and ~highlight~ values.
+In user configuration files the form may look like this:
-+ ~section-no-bold~ is the same as ~section~ without a bold weight.
+#+begin_src emacs-lisp
+(setq modus-themes-headings
+ '((1 . (background overline rainbow))
+ (2 . (background overline))
+ (t . (overline no-bold))))
+#+end_src
-+ ~rainbow-section~ is the same as ~section~ but with a more colorful
- foreground.
+When defining the styles per heading level, it is possible to pass a
+non-nil value (~t~) instead of a list of properties. This will retain the
+original aesthetic for that level. For example:
-+ ~rainbow-section-no-bold~ is the same as ~rainbow-section~ without a
- bold weight.
+#+begin_src emacs-lisp
+(setq modus-themes-headings
+ '((1 . t) ; keep the default style
+ (2 . (background overline))
+ (t . (rainbow)))) ; style for all other headings
-+ ~no-color~ does not apply any color to the heading, meaning that it
- uses the foreground of the ~default~ face. It still renders the text
- with a bold typographic weight.
+(setq modus-themes-headings
+ '((1 . (background overline))
+ (2 . (rainbow no-bold))
+ (t . t))) ; default style for all other levels
+#+end_src
-+ ~no-color-no-bold~ is like ~no-color~ but without the bold weight.
+For Org users, the extent of the heading depends on the variable
+~org-fontify-whole-heading-line~. This affects the ~overline~ and
+~background~ properties. Depending on the version of Org, there may be
+others, such as ~org-fontify-done-headline~.
-Remember to also inspect relevant variables that Org provides, such as:
-~org-fontify-whole-heading-line~ and ~org-fontify-done-headline~.
+[[#h:075eb022-37a6-41a4-a040-cc189f6bfa1f][Option for scaled headings]].
+
+[[#h:97caca76-fa13-456c-aef1-a2aa165ea274][Option for variable-pitch font in headings]].
** Option for scaled headings
:properties:
@@ -1366,7 +1574,7 @@ *** Control the scale of headings
modus-themes-scale-2 1.1
modus-themes-scale-3 1.15
modus-themes-scale-4 1.2
- modus-themes-scale-5 1.3)
+ modus-themes-scale-title 1.3)
#+end_src
As for the application of that scale, the variables that range from
@@ -1376,19 +1584,20 @@ *** Control the scale of headings
that have a standard syntax for their scale, such as Org mode's eight
levels of asterisks or Markdown's six columns.
-Whereas ~modus-themes-scale-5~ is applied to special headings that do not
-conform with the aforementioned syntax, yet which are expected to be
-larger than the largest value on that implied scale. Put concretely,
-Org's =#+title= meta datum is not part of the eight levels of headings in
-an Org file, yet is supposed to signify the primary header. Similarly,
-the Org Agenda's structure headings are not part of a recognisable scale
-and so they also get ~modus-themes-scale-5~.
+Whereas ~modus-themes-scale-title~ is applied to special headings that do
+not conform with the aforementioned syntax, yet which are expected to be
+larger than the largest value on that implied scale or at least have
+some unique purpose in the buffer. Put concretely, Org's =#+title= meta
+datum is not part of the eight levels of headings in an Org file, yet is
+supposed to signify the primary header. Similarly, the Org Agenda's
+structure headings are not part of a recognisable scale and so they also
+get ~modus-themes-scale-title~ ([[#h:68f481bc-5904-4725-a3e6-d7ecfa7c3dbc][Option for Org agenda constructs]]).
Users who wish to maintain scaled headings for the normal syntax while
preventing special headings from standing out, can assign a value of =1.0=
-to ~modus-themes-scale-5~ to make it the same as body text (or whatever
-value would render it indistinguishable from the desired point of
-reference).
+to ~modus-themes-scale-title~ to make it the same as body text (or
+whatever value would render it indistinguishable from the desired point
+of reference).
Note that in earlier versions of Org, scaling would only increase the
size of the heading, but not of keywords that were added to it, like
@@ -1727,7 +1936,7 @@ ** Remap face with local value (DIY)
buffers. This is where ~face-remap-add-relative~ can be applied and may
be combined with ~modus-themes-with-colors~ to deliver consistent results.
-[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the themes' palette (DIY)]].
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the themes' palette]].
In this example we will write a simple interactive function that adjusts
the background color of the ~region~ face. This is the sample code:
@@ -2216,6 +2425,11 @@ ** Font configurations for Org and others (DIY)
(set-face-attribute 'fixed-pitch nil :family "DejaVu Sans Mono" :height 1.0)
#+end_src
+The next section shows how to make those work in a more elaborate setup
+that is robust to changes between the Modus themes.
+
+[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
+
Note the differences in the ~:height~ property. The ~default~ face must
specify an absolute value, which is the point size × 10. So if you want
to use a font at point size =11=, you set the height to =110=.[fn:: ~:height~
@@ -2230,6 +2444,98 @@ ** Font configurations for Org and others (DIY)
[[#h:e6c5451f-6763-4be7-8fdb-b4706a422a4c][Note for EWW and Elfeed fonts (SHR fonts)]].
+** Configure bold and italic faces (DIY)
+:properties:
+:custom_id: h:2793a224-2109-4f61-a106-721c57c01375
+:end:
+#+cindex: Bold and italic fonts
+
+The Modus themes do not hardcode a ~:weight~ or ~:slant~ attribute in the
+thousands of faces they cover. Instead, they configure the generic
+faces called ~bold~ and ~italic~ to use the appropriate styles and then
+instruct all relevant faces that require emphasis to inherit from them.
+
+This practically means that users can change the particularities of what
+it means for a construct to be bold/italic, by tweaking the ~bold~ and
+~italic~ faces. Cases where that can be useful include:
+
++ The default typeface does not have a variant with slanted glyphs
+ (e.g. Fira Mono/Code as of this writing on 2021-07-07), so the user
+ wants to add another family for the italics, such as Hack.
+
++ The typeface of choice provides a multitude of weights and the user
+ prefers the light one by default. To prevent the bold weight from
+ being too heavy compared to the light one, they opt to make ~bold~ use a
+ semibold weight.
+
++ The typeface distinguishes between oblique and italic forms by
+ providing different font variants (the former are just slanted
+ versions of the upright forms, while the latter have distinguishing
+ features as well). In this case, the user wants to specify the font
+ that applies to the ~italic~ face.
+
+To achieve those effects, one must first be sure that the fonts they use
+have support for those features. It then is a matter of following the
+instructions for all face tweaks.
+
+[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and others]].
+
+In this example, we set the default font family to Fira Code, while we
+choose to render italics in the Hack typeface (obviously you need to
+pick fonts that work well together):
+
+#+begin_src emacs-lisp
+(set-face-attribute 'default nil :family "Fira Code" :height 110)
+(set-face-attribute 'italic nil :family "Hack")
+#+end_src
+
+And here we play with different weights, using Source Code Pro:
+
+#+begin_src emacs-lisp
+(set-face-attribute 'default nil :family "Source Code Pro" :height 110 :weight 'light)
+(set-face-attribute 'bold nil :weight 'semibold)
+#+end_src
+
+To reset the font family, one can use this:
+
+#+begin_src emacs-lisp
+(set-face-attribute 'italic nil :family 'unspecified)
+#+end_src
+
+To ensure that the effects persist after switching between the Modus
+themes (such as with {{{kbd(M-x modus-themes-toggle)}}}), the user needs to
+write their configurations to a function and hook it up to the
+~modus-themes-after-load-theme-hook~. This is necessary because the
+themes set the default styles of faces (otherwise changing themes would
+not be possible).
+
+[[#h:86f6906b-f090-46cc-9816-1fe8aeb38776][A theme-agnostic hook for theme loading]].
+
+This is a minimal setup to preserve font configurations across theme
+load phases. For a more permanent setup, it is better to employ the
+~custom-set-faces~ function: ~set-face-attribute~ works just fine, though it
+is more convenient for quick previews or for smaller scale operations
+(~custom-set-faces~ follows the format used in the source code of the
+themes).
+
+#+begin_src emacs-lisp
+;; our generic function
+(defun my-modes-themes-bold-italic-faces ()
+ (set-face-attribute 'default nil :family "Source Code Pro" :height 110)
+ (set-face-attribute 'bold nil :weight 'semibold))
+
+;; or use this if you configure a lot of face and attributes and
+;; especially if you plan to use `modus-themes-with-colors', as shown
+;; elsewhere in the manual
+(defun my-modes-themes-bold-italic-faces ()
+ (custom-set-faces
+ '(default ((t :family "Source Code Pro" :height 110)))
+ '(bold ((t :weight semibold)))))
+
+;; and here is the hook
+(add-hook 'modus-themes-after-load-theme-hook #'my-modes-themes-bold-italic-faces)
+#+end_src
+
** Custom Org user faces (DIY)
:properties:
:custom_id: h:89f0678d-c5c3-4a57-a526-668b2bb2d7ad
@@ -2263,7 +2569,8 @@ ** Custom Org user faces (DIY)
You could then use a variant of the following to inherit from a face
that uses the styles you want and also to preserve the properties
-applied by the ~org-todo~ face:
+applied by the ~org-todo~ face (in case there is a difference between the
+two):
#+begin_src emacs-lisp
(setq org-todo-keyword-faces
@@ -2286,9 +2593,14 @@ ** Custom Org user faces (DIY)
#+end_src
When you inherit from multiple faces, you need to quote the list as
-shown further above. The order is important: the last item is applied
-over the previous ones. If you do not want to blend multiple faces, you
-do not need a quoted list. A pattern of =keyword . face= will suffice.
+shown further above. The order is significant: the first entry is
+applied on top of the second, overriding any properties that are
+explicitly set for both of them: any property that is not specified is
+not overridden, so, for example, if ~org-todo~ has a background and a
+foreground, while ~font-lock-type-face~ only has a foreground, the merged
+face will include the background of the former and the foreground of the
+latter. If you do not want to blend multiple faces, you do not need a
+quoted list. A pattern of =keyword . face= will suffice.
Both approaches can be used simultaneously, as illustrated in this
configuration of the priority cookies:
@@ -2470,7 +2782,7 @@ ** Backdrop for pdf-tools (DIY)
technique that is documented elsewhere in this document to change the
buffer-local value of the ~default~ face.
-[[#h:7a93cb6f-4eca-4d56-a85c-9dcd813d6b0f][Remap face with local value (DIY)]].
+[[#h:7a93cb6f-4eca-4d56-a85c-9dcd813d6b0f][Remap face with local value]].
To remap the buffer's backdrop, we start with a function like this one:
@@ -2628,6 +2940,7 @@ ** Full support for packages or face groups
+ counsel-org-capture-string
+ cov
+ cperl-mode
++ css-mode
+ csv-mode
+ ctrlf
+ custom (what you get with {{{kbd(M-x customize)}}})
@@ -2708,6 +3021,7 @@ ** Full support for packages or face groups
+ git-timemachine
+ git-walktree
+ gnus
++ gotest
+ golden-ratio-scroll-screen
+ helm*
+ helm-ls-git
@@ -2751,6 +3065,7 @@ ** Full support for packages or face groups
+ jupyter
+ kaocha-runner
+ keycast
++ ledger-mode
+ line numbers (~display-line-numbers-mode~ and global variant)
+ lsp-mode
+ lsp-ui
@@ -2814,6 +3129,7 @@ ** Full support for packages or face groups
+ prism ([[#h:a94272e0-99da-4149-9e80-11a7e67a2cf2][Note for prism.el]])
+ proced
+ prodigy
++ pulse
+ quick-peek
+ racket-mode
+ rainbow-blocks
@@ -2929,6 +3245,93 @@ * Notes on individual packages
This section covers information that may be of interest to users of
individual packages.
+** Note on avy hints
+:properties:
+:custom_id: h:2fdce705-6de7-44e6-ab7f-18f59af99e01
+:end:
+
+Hints can appear everywhere, in wildly varying contexts, hence, their
+appearance, by necessity, is a compromise. However, there are various
+options for making them stand out. First is dimming the surroundings:
+
+#+begin_src emacs-lisp
+(setq avy-background t)
+#+end_src
+
+Dimming works well when you find it difficult to spot hints, any hint.
+Second is limiting the number of faces used by hints:
+
+#+begin_src emacs-lisp
+(setq avy-lead-faces
+ '(avy-lead-face
+ avy-lead-face-1
+ avy-lead-face-1
+ avy-lead-face-1
+ avy-lead-face-1))
+#+end_src
+
+Limiting the number of faces works well with longer hints when you find
+it difficult to identify individual hints, especially with hints
+touching each other. The first character of the hint will have an
+intense color, the remaining ones the same neutral color.
+
+Third is preferring commands that produce fewer candidates. Fewer hints
+is less noise: ~avy-goto-char-timer~ is an excellent alternative to
+~avy-goto-char~.
+
+** Note on calendar.el weekday and weekend colors
+:properties:
+:custom_id: h:b2db46fb-32f4-44fd-8e11-d2b261cf51ae
+:end:
+
+By default, the {{{kbd(M-x calendar)}}} interface differentiates weekdays from
+weekends by applying a gray color to the former and a faint red to the
+latter. The idea for this approach is that the weekend should serve as
+a subtle warning that no work is supposed to be done on that day, per
+the design of traditional calendars.
+
+Users who prefer all days to look the same can configure the variable
+~calendar-weekend-days~ to either use gray of weekdays or the faint red of
+weekends uniformly.
+
+#+begin_src emacs-lisp
+;; All are treated like weekdays (gray color)
+(setq calendar-weekend-days nil)
+
+;; All are treated like weekends (red-faint color)
+(setq calendar-weekend-days (number-sequence 0 6))
+
+;; The default marks the Saturday and Sunday as the weekend
+(setq calendar-weekend-days '(0 6))
+#+end_src
+
+For changes to take effect, the Calendar buffer needs to be generated
+anew.
+
+** Note on underlines in compilation buffers
+:properties:
+:custom_id: h:420f5a33-c7a9-4112-9b04-eaf2cbad96bd
+:end:
+
+Various buffers that produce compilation results or run tests on code
+apply an underline to the file names they reference or to relevant
+messages. Users may consider this unnecessary or excessive.
+
+To outright disable the effect, use this:
+
+#+begin_src emacs-lisp
+(setq compilation-message-face nil)
+#+end_src
+
+If some element of differentiation is still desired, a good option is to
+render the affected text using the ~italic~ face:
+
+#+begin_src emacs-lisp
+(setq compilation-message-face 'italic)
+#+end_src
+
+[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]].
+
** Note on inline Latex in Org buffers
:properties:
:custom_id: h:dd8478da-f56a-45cd-b199-b836c85c3c5a
@@ -3566,9 +3969,9 @@ ** What is the best setup for legibility?
can help reduce eye strain: the eyes are more relaxed when they do not
have to focus on one point to gather light.
-The monitor's display settings must be accounted for. Gamma ray values,
-in particular, need to be calibrated to neither amplify nor distort the
-perception of black. Same principle for sharpness, brightness, and
+The monitor's display settings must be accounted for. Gamma values, in
+particular, need to be calibrated to neither amplify nor distort the
+perception of black. Same principle for sharpness, brightness, and
contrast as determined by the hardware, which all have an effect on how
text is read on the screen.
@@ -3716,8 +4119,9 @@ * Acknowledgements
+ Contributions to code or documentation :: Anders Johansson, Basil
L.{{{space()}}} Contovounesios, Carlo Zancanaro, Eli Zaretskii, Fritz Grabo,
Kostadin Ninev, Madhavan Krishnan, Markus Beppler, Matthew Stevenson,
- Mauro Aranda, Nicolas De Jaeghere, Rudolf Adamkovič, Shreyas Ragavan,
- Stefan Kangas, Vincent Murphy, Xinglu Chen.
+ Mauro Aranda, Nicolas De Jaeghere, Philip Kaludercic, Rudolf
+ Adamkovič, Shreyas Ragavan, Stefan Kangas, Vincent Murphy, Xinglu
+ Chen.
+ Ideas and user feedback :: Aaron Jensen, Adam Spiers, Adrian Manea,
Alex Griffin, Alex Peitsinis, Alexey Shmalko, Alok Singh, Anders
@@ -3725,19 +4129,20 @@ * Acknowledgements
Contovounesios, Burgess Chang, Christian Tietze, Christopher Dimech,
Damien Cassou, Daniel Mendler, Dario Gjorgjevski, David Edmondson,
Davor Rotim, Divan Santana, Emanuele Michele Alberto Monterosso,
- Farasha Euker, Gerry Agbobada, Gianluca Recchia, Gustavo Barros,
- Hörmetjan Yiltiz, Ilja Kocken, Iris Garcia, Jeremy Friesen, John
- Haman, Joshua O'Connor, Kevin Fleming, Kévin Le Gouguec, Kostadin
- Ninev, Len Trigg, Manuel Uberti, Mark Burton, Markus Beppler, Mauro
- Aranda, Michael Goldenberg, Morgan Smith, Murilo Pereira, Nicky van
- Foreest, Nicolas De Jaeghere, Paul Poloskov, Pete Kazmier, Peter Wu,
- Philip K., Pierre Téchoueyres, Roman Rudakov, Ryan Phillips, Rudolf
- Adamkovič, Sam Kleinman, Shreyas Ragavan, Simon Pugnet, Tassilo Horn,
- Thibaut Verron, Trey Merkley, Togan Muftuoglu, Toon Claes, Uri Sharf,
- Utkarsh Singh, Vincent Foley. As well as users: Ben, CsBigDataHub1,
- Emacs Contrib, Eugene, Fourchaux, Fredrik, Moesasji, Nick, TheBlob42,
- Trey, bepolymathe, doolio, fleimgruber, iSeeU, jixiuf, okamsn,
- pRot0ta1p.
+ Farasha Euker, Gautier Ponsinet, Gerry Agbobada, Gianluca Recchia,
+ Gustavo Barros, Hörmetjan Yiltiz, Ilja Kocken, Iris Garcia, Jeremy
+ Friesen, Jerry Zhang, John Haman, Joshua O'Connor, Kevin Fleming,
+ Kévin Le Gouguec, Kostadin Ninev, Len Trigg, Manuel Uberti, Mark
+ Burton, Markus Beppler, Mauro Aranda, Michael Goldenberg, Morgan
+ Smith, Murilo Pereira, Nicky van Foreest, Nicolas De Jaeghere, Paul
+ Poloskov, Pengji Zhang, Pete Kazmier, Peter Wu, Philip Kaludercic,
+ Pierre Téchoueyres, Roman Rudakov, Ryan Phillips, Rudolf Adamkovič,
+ Sam Kleinman, Shreyas Ragavan, Simon Pugnet, Tassilo Horn, Thibaut
+ Verron, Thomas Heartman, Trey Merkley, Togan Muftuoglu, Toon Claes,
+ Uri Sharf, Utkarsh Singh, Vincent Foley. As well as users: Ben,
+ CsBigDataHub1, Emacs Contrib, Eugene, Fourchaux, Fredrik, Moesasji,
+ Nick, TheBlob42, Trey, bepolymathe, doolio, fleimgruber, iSeeU,
+ jixiuf, okamsn, pRot0ta1p.
+ Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii, Glenn
Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core Emacs),
@@ -3747,9 +4152,9 @@ * Acknowledgements
+ Inspiration for certain features :: Bozhidar Batsov (zenburn-theme),
Fabrice Niessen (leuven-theme).
-Special thanks, in no particular order, to Manuel Uberti and Omar
-Antolín Camarena for their long time contributions and insightful
-commentary.
+Special thanks, in no particular order, to Manuel Uberti, Gustavo
+Barros, and Omar Antolín Camarena for their long time contributions and
+insightful commentary.
* Meta
:properties:
diff --git a/etc/themes/modus-operandi-theme.el b/etc/themes/modus-operandi-theme.el
index cd73681599..a946d747e8 100644
--- a/etc/themes/modus-operandi-theme.el
+++ b/etc/themes/modus-operandi-theme.el
@@ -4,7 +4,7 @@ ;;; modus-operandi-theme.el --- Accessible light theme (WCAG AAA) -*- lexical-bi
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; URL: https://gitlab.com/protesilaos/modus-themes
-;; Version: 1.4.0
+;; Version: 1.5.0
;; Package-Requires: ((emacs "26.1"))
;; Keywords: faces, theme, accessibility
diff --git a/etc/themes/modus-themes.el b/etc/themes/modus-themes.el
index c70c560b9e..b9fe4a3272 100644
--- a/etc/themes/modus-themes.el
+++ b/etc/themes/modus-themes.el
@@ -4,8 +4,8 @@ ;;; modus-themes.el --- Highly accessible themes (WCAG AAA) -*- lexical-binding:
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; URL: https://gitlab.com/protesilaos/modus-themes
-;; Version: 1.4.0
-;; Last-Modified: <2021-05-25 12:25:39 +0300>
+;; Version: 1.5.0
+;; Last-Modified: <2021-07-15 13:21:55 +0300>
;; Package-Requires: ((emacs "26.1"))
;; Keywords: faces, theme, accessibility
@@ -33,10 +33,10 @@ ;;; Commentary:
;; official Info manual for further documentation (distributed with the
;; themes, or available at: <https://protesilaos.com/modus-themes>).
;;
-;; The themes share the following customization variables, all of which
-;; are disabled by default (nil):
+;; The themes share the following customization variables:
;;
-;; modus-themes-slanted-constructs (boolean)
+;; modus-themes-inhibit-reload (boolean)
+;; modus-themes-italic-constructs (boolean)
;; modus-themes-bold-constructs (boolean)
;; modus-themes-variable-pitch-headings (boolean)
;; modus-themes-variable-pitch-ui (boolean)
@@ -47,8 +47,8 @@ ;;; Commentary:
;; modus-themes-headings (alist)
;; modus-themes-fringes (choice)
;; modus-themes-lang-checkers (choice)
+;; modus-themes-org-agenda (alist)
;; modus-themes-org-blocks (choice)
-;; modus-themes-org-habit (choice)
;; modus-themes-prompts (choice)
;; modus-themes-mode-line (choice)
;; modus-themes-diffs (choice)
@@ -63,11 +63,11 @@ ;;; Commentary:
;; The default scale for headings is as follows (it can be customized as
;; well---remember, no scaling takes place by default):
;;
-;; modus-themes-scale-1 1.05
-;; modus-themes-scale-2 1.1
-;; modus-themes-scale-3 1.15
-;; modus-themes-scale-4 1.2
-;; modus-themes-scale-5 1.3
+;; modus-themes-scale-1 1.05
+;; modus-themes-scale-2 1.1
+;; modus-themes-scale-3 1.15
+;; modus-themes-scale-4 1.2
+;; modus-themes-scale-title 1.3
;;
;; There also exist two unique customization variables for overriding
;; color palette values. The specifics are documented in the manual.
@@ -122,6 +122,7 @@ ;;; Commentary:
;; counsel-org-capture-string
;; cov
;; cperl-mode
+;; css-mode
;; csv-mode
;; ctrlf
;; custom (M-x customize)
@@ -203,6 +204,7 @@ ;;; Commentary:
;; git-timemachine
;; git-walktree
;; gnus
+;; gotest
;; golden-ratio-scroll-screen
;; helm
;; helm-ls-git
@@ -245,6 +247,7 @@ ;;; Commentary:
;; jupyter
;; kaocha-runner
;; keycast
+;; ledger-mode
;; line numbers (`display-line-numbers-mode' and global variant)
;; lsp-mode
;; lsp-ui
@@ -307,6 +310,7 @@ ;;; Commentary:
;; prism (see "Note for prism.el" in the manual)
;; proced
;; prodigy
+;; pulse
;; quick-peek
;; racket-mode
;; rainbow-blocks
@@ -395,20 +399,6 @@ ;;; Commentary:
;; - modus-operandi-theme.el (Light theme)
;; - modus-vivendi-theme.el (Dark theme)
-;;; News:
-;;
-;; Users updating from older versions to >= 1.0.0, are advised to read
-;; the announcement on the emacs-devel mailing list:
-;; <https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg00300.html>.
-;;
-;; The web page of the change log is also available:
-;; <https://protesilaos.com/modus-themes-changelog/>.
-;;
-;; An Info manual should be distributed with the Modus themes.
-;; Evaluate this form to access it directly:
-;;
-;; (info "(modus-themes) Top")
-
;;; Code:
\f
@@ -430,6 +420,13 @@ (defgroup modus-themes ()
:prefix "modus-themes-"
:tag "Modus Themes")
+(defgroup modus-themes-faces ()
+ "Faces defined my `modus-operandi' and `modus-vivendi'."
+ :group 'modus-themes
+ :link '(info-link "(modus-themes) Top")
+ :prefix "modus-themes-"
+ :tag "Modus Themes Faces")
+
;;; Variables for each theme variant
;;;; Modus Operandi
@@ -614,6 +611,7 @@ (defconst modus-themes-operandi-colors
(bg-paren-expression . "#dff0ff")
(bg-region . "#bcbcbc")
(bg-region-accent . "#afafef")
+ (bg-region-accent-subtle . "#efdfff")
(bg-tab-bar . "#d5d5d5")
(bg-tab-active . "#f6f6f6")
@@ -710,9 +708,9 @@ (defconst modus-themes-vivendi-colors
(green-faint . "#78bf78")
(green-alt-faint . "#99b56f")
(green-alt-other-faint . "#88bf99")
- (yellow . "#e0cc00")
- (yellow-alt . "#c4d030")
- (yellow-alt-other . "#e3c55f")
+ (yellow . "#d0bc00")
+ (yellow-alt . "#c0c530")
+ (yellow-alt-other . "#d3b55f")
(yellow-faint . "#d2b580")
(yellow-alt-faint . "#cabf77")
(yellow-alt-other-faint . "#d0ba95")
@@ -847,7 +845,7 @@ (defconst modus-themes-vivendi-colors
;;
;; all pairs are combinable with themselves
(bg-hl-line . "#151823")
- (bg-hl-line-intense . "#2f2f2f")
+ (bg-hl-line-intense . "#292929")
(bg-hl-line-intense-accent . "#00353f")
(bg-hl-alt . "#181732")
(bg-hl-alt-intense . "#282e46")
@@ -856,6 +854,7 @@ (defconst modus-themes-vivendi-colors
(bg-paren-expression . "#221044")
(bg-region . "#3c3c3c")
(bg-region-accent . "#4f3d88")
+ (bg-region-accent-subtle . "#240f55")
(bg-tab-bar . "#2c2c2c")
(bg-tab-active . "#0e0e0e")
@@ -928,212 +927,244 @@ (defface modus-themes-subtle-red nil
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-subtle-green nil
"Subtle green background combined with a dimmed foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-subtle-yellow nil
"Subtle yellow background combined with a dimmed foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-subtle-blue nil
"Subtle blue background combined with a dimmed foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-subtle-magenta nil
"Subtle magenta background combined with a dimmed foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-subtle-cyan nil
"Subtle cyan background combined with a dimmed foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-subtle-neutral nil
"Subtle gray background combined with a dimmed foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-intense-red nil
"Intense red background combined with the main foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-intense-green nil
"Intense green background combined with the main foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-intense-yellow nil
"Intense yellow background combined with the main foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-intense-blue nil
"Intense blue background combined with the main foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-intense-magenta nil
"Intense magenta background combined with the main foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-intense-cyan nil
"Intense cyan background combined with the main foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-intense-neutral nil
"Intense gray background combined with the main foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-refine-red nil
"Combination of accented red background and foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-refine-green nil
"Combination of accented green background and foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-refine-yellow nil
"Combination of accented yellow background and foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-refine-blue nil
"Combination of accented blue background and foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-refine-magenta nil
"Combination of accented magenta background and foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-refine-cyan nil
"Combination of accented cyan background and foreground.
This is used for general purpose highlighting, mostly in buffers
or for completion interfaces.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-active-red nil
"A red background meant for use on the mode line or similar.
This is combined with the mode lines primary foreground value.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-active-green nil
"A green background meant for use on the mode line or similar.
This is combined with the mode lines primary foreground value.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-active-yellow nil
"A yellow background meant for use on the mode line or similar.
This is combined with the mode lines primary foreground value.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-active-blue nil
"A blue background meant for use on the mode line or similar.
This is combined with the mode lines primary foreground value.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-active-magenta nil
"A magenta background meant for use on the mode line or similar.
This is combined with the mode lines primary foreground value.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-active-cyan nil
"A cyan background meant for use on the mode line or similar.
This is combined with the mode lines primary foreground value.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-fringe-red nil
"A red background meant for use on the fringe or similar.
This is combined with the main foreground value.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-fringe-green nil
"A green background meant for use on the fringe or similar.
This is combined with the main foreground value.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-fringe-yellow nil
"A yellow background meant for use on the fringe or similar.
This is combined with the main foreground value.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-fringe-blue nil
"A blue background meant for use on the fringe or similar.
This is combined with the main foreground value.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-fringe-magenta nil
"A magenta background meant for use on the fringe or similar.
This is combined with the main foreground value.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-fringe-cyan nil
"A cyan background meant for use on the fringe or similar.
This is combined with the main foreground value.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-nuanced-red nil
"A nuanced red background.
@@ -1142,7 +1173,8 @@ (defface modus-themes-nuanced-red nil
headings, and any other surface that needs to retain the colors
on display.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-nuanced-green nil
"A nuanced green background.
@@ -1151,7 +1183,8 @@ (defface modus-themes-nuanced-green nil
headings, and any other surface that needs to retain the colors
on display.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-nuanced-yellow nil
"A nuanced yellow background.
@@ -1160,7 +1193,8 @@ (defface modus-themes-nuanced-yellow nil
headings, and any other surface that needs to retain the colors
on display.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-nuanced-blue nil
"A nuanced blue background.
@@ -1169,7 +1203,8 @@ (defface modus-themes-nuanced-blue nil
headings, and any other surface that needs to retain the colors
on display.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-nuanced-magenta nil
"A nuanced magenta background.
@@ -1178,7 +1213,8 @@ (defface modus-themes-nuanced-magenta nil
headings, and any other surface that needs to retain the colors
on display.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-nuanced-cyan nil
"A nuanced cyan background.
@@ -1187,7 +1223,8 @@ (defface modus-themes-nuanced-cyan nil
headings, and any other surface that needs to retain the colors
on display.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-special-cold nil
"Combines the 'special cold' background and foreground values.
@@ -1195,7 +1232,8 @@ (defface modus-themes-special-cold nil
suitable and where a combination of more saturated colors would
not be appropriate.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-special-mild nil
"Combines the 'special mild' background and foreground values.
@@ -1203,7 +1241,8 @@ (defface modus-themes-special-mild nil
suitable and where a combination of more saturated colors would
not be appropriate.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-special-warm nil
"Combines the 'special warm' background and foreground values.
@@ -1211,7 +1250,8 @@ (defface modus-themes-special-warm nil
suitable and where a combination of more saturated colors would
not be appropriate.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-special-calm nil
"Combines the 'special calm' background and foreground values.
@@ -1219,188 +1259,223 @@ (defface modus-themes-special-calm nil
suitable and where a combination of more saturated colors would
not be appropriate.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-diff-added nil
"Combines green colors for the 'added' state in diffs.
The applied colors are contingent on the value assigned to
`modus-themes-diffs'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-diff-changed nil
"Combines yellow colors for the 'changed' state in diffs.
The applied colors are contingent on the value assigned to
`modus-themes-diffs'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-diff-removed nil
"Combines red colors for the 'removed' state in diffs.
The applied colors are contingent on the value assigned to
`modus-themes-diffs'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-diff-refine-added nil
"Combines green colors for word-wise 'added' state in diffs.
The applied colors are contingent on the value assigned to
`modus-themes-diffs'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-diff-refine-changed nil
"Combines yellow colors for word-wise 'changed' state in diffs.
The applied colors are contingent on the value assigned to
`modus-themes-diffs'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-diff-refine-removed nil
"Combines red colors for word-wise 'removed' state in diffs.
The applied colors are contingent on the value assigned to
`modus-themes-diffs'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-diff-focus-added nil
"Combines green colors for the focused 'added' state in diffs.
The applied colors are contingent on the value assigned to
`modus-themes-diffs'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-diff-focus-changed nil
"Combines yellow colors for the focused 'changed' state in.
The applied colors are contingent on the value assigned to
`modus-themes-diffs'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-diff-focus-removed nil
"Combines red colors for the focused 'removed' state in diffs.
The applied colors are contingent on the value assigned to
`modus-themes-diffs'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-diff-heading nil
"Combines blue colors for the diff hunk heading.
The applied colors are contingent on the value assigned to
`modus-themes-diffs'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-pseudo-header nil
"Generic style for some elements that function like headings.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-mark-alt nil
"Combines yellow colors for marking special lines.
This is intended for use in modes such as Dired, Ibuffer, Proced.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-mark-del nil
"Combines red colors for marking deletable lines.
This is intended for use in modes such as Dired, Ibuffer, Proced.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-mark-sel nil
"Combines green colors for marking lines.
This is intended for use in modes such as Dired, Ibuffer, Proced.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-mark-symbol nil
"Applies a blue color and other styles for mark indicators.
This is intended for use in modes such as Dired, Ibuffer, Proced.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-heading-1 nil
"General purpose face for use in headings level 1.
The exact attributes assigned to this face are contingent on the
values assigned to the `modus-themes-headings' variable.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-heading-2 nil
"General purpose face for use in headings level 2.
The exact attributes assigned to this face are contingent on the
values assigned to the `modus-themes-headings' variable.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-heading-3 nil
"General purpose face for use in headings level 3.
The exact attributes assigned to this face are contingent on the
values assigned to the `modus-themes-headings' variable.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-heading-4 nil
"General purpose face for use in headings level 4.
The exact attributes assigned to this face are contingent on the
values assigned to the `modus-themes-headings' variable.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-heading-5 nil
"General purpose face for use in headings level 5.
The exact attributes assigned to this face are contingent on the
values assigned to the `modus-themes-headings' variable.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-heading-6 nil
"General purpose face for use in headings level 6.
The exact attributes assigned to this face are contingent on the
values assigned to the `modus-themes-headings' variable.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-heading-7 nil
"General purpose face for use in headings level 7.
The exact attributes assigned to this face are contingent on the
values assigned to the `modus-themes-headings' variable.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-heading-8 nil
"General purpose face for use in headings level 8.
The exact attributes assigned to this face are contingent on the
values assigned to the `modus-themes-headings' variable.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-hl-line nil
"General purpose face for the current line.
The exact attributes assigned to this face are contingent on the
values assigned to the `modus-themes-hl-line' variable.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-bold nil
"Generic face for applying a conditional bold weight.
This behaves in accordance with `modus-themes-bold-constructs'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-slant nil
"Generic face for applying a conditional slant (italics).
-This behaves in accordance with `modus-themes-slanted-constructs'.
+This behaves in accordance with `modus-themes-italic-constructs'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-variable-pitch nil
"Generic face for applying a conditional `variable-pitch'.
This behaves in accordance with `modus-themes-no-mixed-fonts',
-`modus-themes-variable-pitch-headings' for all heading levels, and
-`modus-themes-variable-pitch-ui'.
+`modus-themes-variable-pitch-headings' for all heading levels,
+and `modus-themes-variable-pitch-ui'.
+
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
-The actual styling of the face is done by `modus-themes-faces'.")
+(defface modus-themes-fixed-pitch nil
+ "Generic face for applying a conditional `fixed-pitch'.
+This behaves in accordance with `modus-themes-no-mixed-fonts'.
+
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-graph-red-0 nil
"Special subdued red face for use in graphs.
@@ -1408,7 +1483,8 @@ (defface modus-themes-graph-red-0 nil
habit graph where faithfulness to the semantics of a color value
is of paramount importance.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-graph-red-1 nil
"Special prominent red face for use in graphs.
@@ -1416,7 +1492,8 @@ (defface modus-themes-graph-red-1 nil
habit graph where faithfulness to the semantics of a color value
is of paramount importance.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-graph-green-0 nil
"Special subdued green face for use in graphs.
@@ -1424,7 +1501,8 @@ (defface modus-themes-graph-green-0 nil
habit graph where faithfulness to the semantics of a color value
is of paramount importance.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-graph-green-1 nil
"Special prominent green face for use in graphs.
@@ -1432,7 +1510,8 @@ (defface modus-themes-graph-green-1 nil
habit graph where faithfulness to the semantics of a color value
is of paramount importance.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-graph-yellow-0 nil
"Special subdued yellow face for use in graphs.
@@ -1440,7 +1519,8 @@ (defface modus-themes-graph-yellow-0 nil
habit graph where faithfulness to the semantics of a color value
is of paramount importance.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-graph-yellow-1 nil
"Special prominent yellow face for use in graphs.
@@ -1448,7 +1528,8 @@ (defface modus-themes-graph-yellow-1 nil
habit graph where faithfulness to the semantics of a color value
is of paramount importance.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-graph-blue-0 nil
"Special subdued blue face for use in graphs.
@@ -1456,7 +1537,8 @@ (defface modus-themes-graph-blue-0 nil
habit graph where faithfulness to the semantics of a color value
is of paramount importance.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-graph-blue-1 nil
"Special prominent blue face for use in graphs.
@@ -1464,7 +1546,8 @@ (defface modus-themes-graph-blue-1 nil
habit graph where faithfulness to the semantics of a color value
is of paramount importance.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-graph-magenta-0 nil
"Special subdued magenta face for use in graphs.
@@ -1472,7 +1555,8 @@ (defface modus-themes-graph-magenta-0 nil
habit graph where faithfulness to the semantics of a color value
is of paramount importance.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-graph-magenta-1 nil
"Special prominent magenta face for use in graphs.
@@ -1480,7 +1564,8 @@ (defface modus-themes-graph-magenta-1 nil
habit graph where faithfulness to the semantics of a color value
is of paramount importance.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-graph-cyan-0 nil
"Special subdued cyan face for use in graphs.
@@ -1488,7 +1573,8 @@ (defface modus-themes-graph-cyan-0 nil
habit graph where faithfulness to the semantics of a color value
is of paramount importance.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-graph-cyan-1 nil
"Special prominent cyan face for use in graphs.
@@ -1496,28 +1582,32 @@ (defface modus-themes-graph-cyan-1 nil
habit graph where faithfulness to the semantics of a color value
is of paramount importance.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-lang-note nil
"Generic face for linter or spell checker notes.
The exact attributes and color combinations are controlled by
`modus-themes-lang-checkers'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-lang-warning nil
"Generic face for linter or spell checker warnings.
The exact attributes and color combinations are controlled by
`modus-themes-lang-checkers'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-lang-error nil
"Generic face for linter or spell checker errors.
The exact attributes and color combinations are controlled by
`modus-themes-lang-checkers'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-reset-soft nil
"Generic face to set most face properties to nil.
@@ -1527,7 +1617,8 @@ (defface modus-themes-reset-soft nil
text should not be underlined as well) yet still blend in. Also
see `modus-themes-reset-hard'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-reset-hard nil
"Generic face to set all face properties to nil.
@@ -1537,28 +1628,68 @@ (defface modus-themes-reset-hard nil
text should not be underlined as well) and not blend in. Also
see `modus-themes-reset-soft'.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-key-binding nil
"Generic face for key bindings.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-search-success nil
"Generic face for successful search.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-search-success-modeline nil
"Generic mode line indicator for successful search.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
(defface modus-themes-search-success-lazy nil
"Generic face for successful, lazily highlighted search.
-The actual styling of the face is done by `modus-themes-faces'.")
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
+
+(defface modus-themes-prompt nil
+ "Generic face for command prompts.
+The actual styling of the face is done by `modus-themes-faces'."
+ :group 'modus-theme-faces)
\f
;;; Customization variables
+(defcustom modus-themes-inhibit-reload t
+ "Control theme reload when setting options with Customize.
+
+By default, customizing a theme-related user option through the
+Custom interfaces or with `customize-set-variable' will not
+reload the currently active Modus theme.
+
+Enable this behaviour by setting this variable to nil."
+ :group 'modus-themes
+ :package-version '(modus-themes . "1.5.0")
+ :version "28.1"
+ :type 'boolean
+ :link '(info-link "(modus-themes) Custom reload theme"))
+
+(defun modus-themes--set-option (sym val)
+ "Custom setter for theme related user options.
+Will set SYM to VAL, and reload the current theme, unless
+`modus-themes-inhibit-reload' is non-nil."
+ (set-default sym val)
+ (unless (or modus-themes-inhibit-reload
+ ;; Check if a theme is being loaded, in which case we
+ ;; don't want to reload a theme if the setter is
+ ;; invoked. `custom--inhibit-theme-enable' is set to nil
+ ;; by `enable-theme'.
+ (null (bound-and-true-p custom--inhibit-theme-enable)))
+ (let ((modus-themes-inhibit-reload t))
+ (pcase (modus-themes--current-theme)
+ ('modus-operandi (modus-themes-load-operandi))
+ ('modus-vivendi (modus-themes-load-vivendi))))))
+
(defcustom modus-themes-operandi-color-overrides nil
"Override colors in the Modus Operandi palette.
@@ -1567,6 +1698,8 @@ (defcustom modus-themes-operandi-color-overrides nil
:package-version '(modus-themes . "1.1.0")
:version "28.1"
:type '(alist :key-type symbol :value-type color)
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Override colors (DIY)"))
(defcustom modus-themes-vivendi-color-overrides nil
@@ -1577,6 +1710,8 @@ (defcustom modus-themes-vivendi-color-overrides nil
:package-version '(modus-themes . "1.1.0")
:version "28.1"
:type '(alist :key-type symbol :value-type color)
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Override colors (DIY)"))
;; The byte compiler complains when a defcustom isn't a top level form
@@ -1595,14 +1730,33 @@ (defcustom modus-themes-slanted-constructs nil
:package-version '(modus-themes . "1.0.0")
:version "28.1"
:type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Slanted constructs"))
+(define-obsolete-variable-alias
+ 'modus-themes-slanted-constructs
+ 'modus-themes-italic-constructs
+ "1.5.0")
+
+(defcustom modus-themes-italic-constructs nil
+ "Use italic font forms in more code constructs."
+ :group 'modus-themes
+ :package-version '(modus-themes . "1.5.0")
+ :version "28.1"
+ :type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Italic constructs"))
+
(defcustom modus-themes-bold-constructs nil
"Use bold text in more code constructs."
:group 'modus-themes
:package-version '(modus-themes . "1.0.0")
:version "28.1"
:type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Bold constructs"))
(defcustom modus-themes-variable-pitch-headings nil
@@ -1611,6 +1765,8 @@ (defcustom modus-themes-variable-pitch-headings nil
:package-version '(modus-themes . "1.0.0")
:version "28.1"
:type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Headings' typeface"))
(defcustom modus-themes-variable-pitch-ui nil
@@ -1620,6 +1776,8 @@ (defcustom modus-themes-variable-pitch-ui nil
:package-version '(modus-themes . "1.1.0")
:version "28.1"
:type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) UI typeface"))
(defcustom modus-themes-no-mixed-fonts nil
@@ -1637,110 +1795,97 @@ (defcustom modus-themes-no-mixed-fonts nil
:package-version '(modus-themes . "1.0.0")
:version "28.1"
:type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) No mixed fonts"))
(defconst modus-themes--headings-choice
- '(choice
- (const :format "[%v] %t\n" :tag "Fairly desaturated foreground with bold weight (default)" nil)
- (const :format "[%v] %t\n" :tag "Same as the default (backward-compatible)" t)
- (const :format "[%v] %t\n" :tag "Like the default without bold weight" no-bold)
- (const :format "[%v] %t\n" :tag "Like the default plus overline" line)
- (const :format "[%v] %t\n" :tag "Like `line' without bold weight" line-no-bold)
- (const :format "[%v] %t\n" :tag "Like the default but with more colorful foreground" rainbow)
- (const :format "[%v] %t\n" :tag "Like `rainbow' plus overline" rainbow-line)
- (const :format "[%v] %t\n" :tag "Like `rainbow' without bold weight" rainbow-no-bold)
- (const :format "[%v] %t\n" :tag "Like `rainbow-line' without bold weight" rainbow-line-no-bold)
- (const :format "[%v] %t\n" :tag "Like the default plus subtle background" highlight)
- (const :format "[%v] %t\n" :tag "Like `highlight' without bold weight" highlight-no-bold)
- (const :format "[%v] %t\n" :tag "Like `highlight' with more colorful foreground" rainbow-highlight)
- (const :format "[%v] %t\n" :tag "Like `rainbow-highlight' without bold weight" rainbow-highlight-no-bold)
- (const :format "[%v] %t\n" :tag "Like `highlight' plus overline" section)
- (const :format "[%v] %t\n" :tag "Like `section' without bold weight" section-no-bold)
- (const :format "[%v] %t\n" :tag "Like `section' with more colorful foreground" rainbow-section)
- (const :format "[%v] %t\n" :tag "Like `rainbow-section' without bold weight" rainbow-section-no-bold)
- (const :format "[%v] %t\n" :tag "Do not use any distinct foreground color; just bold weight" no-color)
- (const :format "[%v] %t\n" :tag "Like `no-bold' but without the distinct foreground color" no-color-no-bold))
+ '(set :tag "Properties" :greedy t
+ (const :tag "Background color" background)
+ (const :tag "Overline" overline)
+ (const :tag "No bold weight" no-bold)
+ (choice :tag "Colors"
+ (const :tag "Subtle colors" nil)
+ (const :tag "Rainbow colors" rainbow)
+ (const :tag "Monochrome" monochrome)))
"Refer to the doc string of `modus-themes-headings'.
This is a helper variable intended for internal use.")
(defcustom modus-themes-headings nil
- "Alist of styles for headings, with optional value per level.
-
-To control faces per level from 1-8, use something like this:
+ "Heading styles with optional list of values for levels 1-8.
- (setq modus-themes-headings
- '((1 . highlight)
- (2 . line)
- (t . rainbow-line-no-bold)))
+This is an alist that accepts a (key . list-of-values)
+combination. The key is either a number, representing the
+heading's level or t, which pertains to the fallback style. The
+list of values covers symbols that refer to properties, as
+described below. Here is a sample, followed by a presentation of
+all available properties:
-To set a uniform value for all heading levels, use this pattern:
+ (setq modus-themes-headings
+ '((1 . (background overline))
+ (2 . (overline rainbow))
+ (t . (monochrome))))
- (setq modus-themes-headings
- '((t . rainbow-line-no-bold)))
+By default (a nil value for this variable), all headings have a
+bold typographic weight and use a desaturated text color.
-The default value uses a fairly desaturated foreground color in
-combination with a bold typographic weight. To specify this
-style for a given level N (assuming you wish to have another
-fallback option), just specify the value nil like this:
+A `rainbow' property makes the text color more saturated.
- (setq modus-themes-headings
- '((1 . nil)
- (2 . line)
- (3) ; same as nil
- (t . rainbow-line-no-bold)))
+An `overline' property draws a line above the area of the
+heading.
-A description of all other possible values:
+A `background' property adds a subtle tinted color to the
+background of the heading.
-+ `no-bold' retains the default text color while removing the
- typographic weight.
+A `no-bold' property removes the bold weight from the heading's
+text.
-+ `line' is the same as the default plus an overline over the
- heading.
+A `monochrome' property makes all headings the same base color,
+which is that of the default for the active theme (black/white).
+When `background' is also set, `monochrome' changes its color to
+gray. If both `monochrome' and `rainbow' are set, the former
+takes precedence.
-+ `line-no-bold' is the same as `line' without bold weight.
+Combinations of any of those properties are expressed as a list,
+like in these examples:
-+ `rainbow' uses a more colorful foreground in combination with
- bold weight.
+ (no-bold)
+ (rainbow background)
+ (overline monochrome no-bold)
-+ `rainbow-line' is the same as `rainbow' plus an overline.
+The order in which the properties are set is not significant.
-+ `rainbow-line-no-bold' is the same as `rainbow-line' without
- the bold weight.
+In user configuration files the form may look like this:
-+ `highlight' retains the default style of a fairly desaturated
- foreground combined with a bold weight and add to it a subtle
- accented background.
+ (setq modus-themes-headings
+ '((1 . (background overline rainbow))
+ (2 . (background overline))
+ (t . (overline no-bold))))
-+ `highlight-no-bold' is the same as `highlight' without a bold
- weight.
+When defining the styles per heading level, it is possible to
+pass a non-nil value (t) instead of a list of properties. This
+will retain the original aesthetic for that level. For example:
-+ `rainbow-highlight' is the same as `highlight' but with a more
- colorful foreground.
+ (setq modus-themes-headings
+ '((1 . t) ; keep the default style
+ (2 . (background overline))
+ (t . (rainbow)))) ; style for all other headings
-+ `rainbow-highlight-no-bold' is the same as `rainbow-highlight'
- without a bold weight.
+ (setq modus-themes-headings
+ '((1 . (background overline))
+ (2 . (rainbow no-bold))
+ (t . t))) ; default style for all other levels
-+ `section' retains the default looks and adds to them both an
- overline and a slightly accented background. It is, in effect,
- a combination of the `line' and `highlight' values.
+For Org users, the extent of the heading depends on the variable
+`org-fontify-whole-heading-line'. This affects the `overline'
+and `background' properties. Depending on the version of Org,
+there may be others, such as `org-fontify-done-headline'.
-+ `section-no-bold' is the same as `section' without a bold
- weight.
-
-+ `rainbow-section' is the same as `section' but with a more
- colorful foreground.
-
-+ `rainbow-section-no-bold' is the same as `rainbow-section'
- without a bold weight.
-
-+ `no-color' does not apply any color to the heading, meaning
- that it uses the foreground of the `default' face. It still
- renders the text with a bold typographic weight.
-
-+ `no-color-no-bold' is like `no-color' but without the bold
- weight."
+Also read `modus-themes-scale-headings' to change the height of
+headings and `modus-themes-variable-pitch-headings' to make them
+use a proportionately spaced font."
:group 'modus-themes
- :package-version '(modus-themes . "1.3.0")
+ :package-version '(modus-themes . "1.5.0")
:version "28.1"
:type `(alist
:options ,(mapcar (lambda (el)
@@ -1748,16 +1893,166 @@ (defcustom modus-themes-headings nil
'(1 2 3 4 5 6 7 8 t))
:key-type symbol
:value-type ,modus-themes--headings-choice)
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Heading styles"))
+(defcustom modus-themes-org-agenda nil
+ "Control the style of individual Org agenda constructs.
+
+This is an alist that accepts a (key . value) combination. Here
+is a sample, followed by a description of all possible
+combinations:
+
+ (setq modus-themes-org-agenda
+ '((header-block . (variable-pitch scale-title))
+ (header-date . (grayscale workaholic bold-today))
+ (scheduled . uniform)
+ (habit . traffic-light)))
+
+A `header-block' key applies to elements that concern the
+headings which demarcate blocks in the structure of the agenda.
+By default (a nil value) those are rendered in a bold typographic
+weight, plus a height that is slightly taller than the default
+font size. Acceptable values come in the form of a list that can
+include either or both of those properties:
+
+- `variable-pitch' to use a proportionately spaced typeface;
+- `scale-title' to increase height to `modus-themes-scale-title'
+ OR `no-scale' to set the font to the same height as the rest of
+ the buffer.
+
+In case both `scale-title' and `no-scale' are in the list, the
+latter takes precedence.
+
+Example usage:
+
+ (header-block . nil)
+ (header-block . (scale-title))
+ (header-block . (no-scale))
+ (header-block . (variable-pitch scale-title))
+
+A `header-date' key covers date headings. Dates use only a
+foreground color by default (a nil value), with weekdays and
+weekends having a slight difference in hueness. The current date
+has an added gray background. This key accepts a list of values
+that can include any of the following properties:
+
+- `grayscale' to make weekdays use the main foreground color and
+ weekends a more subtle gray;
+- `workaholic' to make weekdays and weekends look the same in
+ terms of color;
+- `bold-today' to apply a bold typographic weight to the current
+ date;
+- `bold-all' to render all date headings in a bold weight.
+
+For example:
+
+ (header-date . nil)
+ (header-date . (workaholic))
+ (header-date . (grayscale bold-all))
+ (header-date . (grayscale workaholic))
+ (header-date . (grayscale workaholic bold-today))
+
+A `scheduled' key applies to tasks with a scheduled date. By
+default (a nil value), these use varying shades of yellow to
+denote (i) a past or current date and (ii) a future date. Valid
+values are symbols:
+
+- nil (default);
+- `uniform' to make all scheduled dates the same color;
+- `rainbow' to use contrasting colors for past, present, future
+ scheduled dates.
+
+For example:
+
+ (scheduled . nil)
+ (scheduled . uniform)
+ (scheduled . rainbow)
+
+A `habit' key applies to the `org-habit' graph. All possible
+value are passed as a symbol. Those are:
+
+- The default (nil) is meant to conform with the original
+ aesthetic of `org-habit'. It employs all four color codes that
+ correspond to the org-habit states---clear, ready, alert, and
+ overdue---while distinguishing between their present and future
+ variants. This results in a total of eight colors in use: red,
+ yellow, green, blue, in tinted and shaded versions. They cover
+ the full set of information provided by the `org-habit'
+ consistency graph.
+- `simplified' is like the default except that it removes the
+ dichotomy between current and future variants by applying
+ uniform color-coded values. It applies a total of four colors:
+ red, yellow, green, blue. They produce a simplified
+ consistency graph that is more legible (or less \"busy\") than
+ the default. The intent is to shift focus towards the
+ distinction between the four states of a habit task, rather
+ than each state's present/future outlook.
+- `traffic-light' further reduces the available colors to red,
+ yellow, and green. As in `simplified', present and future
+ variants appear uniformly, but differently from it, the 'clear'
+ state is rendered in a green hue, instead of the original blue.
+ This is meant to capture the use-case where a habit task being
+ \"too early\" is less important than it being \"too late\".
+ The difference between ready and clear states is attenuated by
+ painting both of them using shades of green. This option thus
+ highlights the alert and overdue states.
+- `traffic-light-deuteranopia' is like the `traffic-light' except
+ its three colors are red, yellow, and blue to be suitable for
+ users with red-green color deficiency (deuteranopia).
+
+For example:
+
+ (habit . nil)
+ (habit . simplified)
+ (habit . traffic-light)"
+ :group 'modus-themes
+ :package-version '(modus-themes . "1.5.0")
+ :version "28.1"
+ :type '(set
+ (cons :tag "Block header"
+ (const header-block)
+ (set :tag "Header presentation" :greedy t
+ (choice :tag "Font style"
+ (const :tag "Use the original typeface (default)" nil)
+ (const :tag "Use `variable-pitch' font" variable-pitch))
+ (choice :tag "Scaling"
+ (const :tag "Slight increase in height (default)" nil)
+ (const :tag "Do not scale" no-scale)
+ (const :tag "Scale to match `modus-themes-scale-title'" scale-title))))
+ (cons :tag "Date header" :greedy t
+ (const header-date)
+ (set :tag "Header presentation" :greedy t
+ (const :tag "Use grayscale for date headers" grayscale)
+ (const :tag "Do not differentiate weekdays from weekends" workaholic)
+ (const :tag "Make today bold" bold-today)
+ (const :tag "Make all dates bold" bold-all)))
+ (cons :tag "Scheduled tasks"
+ (const scheduled)
+ (choice (const :tag "Yellow colors to distinguish current and future tasks (default)" nil)
+ (const :tag "Uniform subtle warm color for all scheduled tasks" uniform)
+ (const :tag "Rainbow-colored scheduled tasks" rainbow)))
+ (cons :tag "Habit graph"
+ (const habit)
+ (choice (const :tag "Follow the original design of `org-habit' (default)" nil)
+ (const :tag "Do not distinguish between present and future variants" simplified)
+ (const :tag "Use only red, yellow, green" traffic-light)
+ (const :tag "Use only red, yellow, blue" traffic-light-deuteranopia))))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Org agenda"))
+
(defcustom modus-themes-scale-headings nil
"Use font scaling for headings.
For regular headings the scale is controlled by the variables
`modus-themes-scale-1' (smallest) and its variants all the way up
-to `modus-themes-scale-4' (larger). While `modus-themes-scale-5'
-is reserved for special headings that must be the largest on the
-scale.
+to `modus-themes-scale-4' (larger).
+
+While `modus-themes-scale-title' is reserved for special headings
+that nominally are the largest on the scale (though that is not a
+requirement).
A special heading is, in this context, one that does not fit into
the syntax for heading levels that apply to the given mode. For
@@ -1768,6 +2063,8 @@ (defcustom modus-themes-scale-headings nil
:package-version '(modus-themes . "1.2.0")
:version "28.1"
:type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Scaled headings"))
(defcustom modus-themes-scale-1 1.05
@@ -1790,6 +2087,8 @@ (defcustom modus-themes-scale-1 1.05
:package-version '(modus-themes . "1.2.0")
:version "28.1"
:type 'number
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Scaled heading sizes"))
(defcustom modus-themes-scale-2 1.1
@@ -1812,6 +2111,8 @@ (defcustom modus-themes-scale-2 1.1
:package-version '(modus-themes . "1.2.0")
:version "28.1"
:type 'number
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Scaled heading sizes"))
(defcustom modus-themes-scale-3 1.15
@@ -1834,6 +2135,8 @@ (defcustom modus-themes-scale-3 1.15
:package-version '(modus-themes . "1.2.0")
:version "28.1"
:type 'number
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Scaled heading sizes"))
(defcustom modus-themes-scale-4 1.2
@@ -1856,6 +2159,8 @@ (defcustom modus-themes-scale-4 1.2
:package-version '(modus-themes . "1.2.0")
:version "28.1"
:type 'number
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Scaled heading sizes"))
(defcustom modus-themes-scale-5 1.3
@@ -1879,6 +2184,35 @@ (defcustom modus-themes-scale-5 1.3
:package-version '(modus-themes . "1.2.0")
:version "28.1"
:type 'number
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
+ :link '(info-link "(modus-themes) Scaled heading sizes"))
+
+(define-obsolete-variable-alias 'modus-themes-scale-5 'modus-themes-scale-title "1.5.0")
+
+(defcustom modus-themes-scale-title 1.3
+ "Font size slightly larger than `modus-themes-scale-4'.
+
+This size is only used for 'special' top level headings, such as
+Org's file title heading, denoted by the #+title key word, and
+the Org agenda structure headers (see `modus-themes-org-agenda').
+
+The default value is a floating point that is interpreted as a
+multiple of the base font size. It is recommended to use such a
+value.
+
+However, the variable also accepts an integer, understood as an
+absolute height that is 1/10 of the typeface's point size (e.g. a
+value of 140 is the same as setting the font at 14 point size).
+This will ignore the base font size and, thus, will not scale in
+accordance with it in cases where it changes, such as while using
+`text-scale-adjust'."
+ :group 'modus-themes
+ :package-version '(modus-themes . "1.5.0")
+ :version "28.1"
+ :type 'number
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Scaled heading sizes"))
(defcustom modus-themes-fringes nil
@@ -1895,40 +2229,62 @@ (defcustom modus-themes-fringes nil
(const :format "[%v] %t\n" :tag "No visible fringes (default)" nil)
(const :format "[%v] %t\n" :tag "Subtle grayscale background" subtle)
(const :format "[%v] %t\n" :tag "Intense grayscale background" intense))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Fringes"))
(defcustom modus-themes-lang-checkers nil
"Control the style of spelling and code checkers/linters.
-Nil (the default) applies a color-coded underline to the affected
-text, while it leaves the original foreground in tact. If the
+The value is a list of properties, each designated by a symbol.
+The default (nil) applies a color-coded underline to the affected
+text, while it leaves the original foreground intact. If the
display spec of Emacs has support for it, the underline's style
is that of a wave, otherwise it is a straight line.
-Options `subtle-foreground' and `intense-foreground' add a
-color-coded underline while also changing the text's foreground
-accordingly. The style of the underline is the same as with the
-default option.
+The property `straight-underline' ensures that the underline
+under the affected text is always drawn as a straight line.
+
+The property `text-also' applies the same color of the underline
+to the affected text.
+
+The property `background' adds a color-coded background.
+
+The property `intense' amplifies the applicable colors if
+`background' and/or `text-only' are set. If `intense' is set on
+its own, then it implies `text-only'.
-Option `straight-underline' is like the default but always
-applies a straight line under the affected text. Same principle
-for `subtle-foreground-straight-underline' and its counterpart
-`intense-foreground-straight-underline'.
+To disable fringe indicators for Flymake or Flycheck, refer to
+variables `flymake-fringe-indicator-position' and
+`flycheck-indication-mode', respectively.
-Option `colored-background' uses a straight underline, a
-background, and a foreground. All are color-coded. This is the
-most intense combination of face properties."
+Combinations of any of those properties can be expressed in a
+list, as in those examples:
+
+ (background)
+ (straight-underline intense)
+ (background text-also straight-underline)
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+ (setq modus-themes-lang-checkers '(text-also background))
+
+NOTE: The placement of the straight underline, though not the
+wave style, is controlled by the built-in variables
+`underline-minimum-offset', `x-underline-at-descent-line',
+`x-use-underline-position-properties'."
:group 'modus-themes
- :package-version '(modus-themes . "1.1.0")
+ :package-version '(modus-themes . "1.5.0")
:version "28.1"
- :type '(choice
- (const :format "[%v] %t\n" :tag "Only color-coded wavy underline (default)" nil)
- (const :format "[%v] %t\n" :tag "Like the default, but with a straight underline" straight-underline)
- (const :format "[%v] %t\n" :tag "Color-coded wavy underline; subtle foreground" subtle-foreground)
- (const :format "[%v] %t\n" :tag "Combines `straight-underline' and `subtle-foreground'" subtle-foreground-straight-underline)
- (const :format "[%v] %t\n" :tag "Color-coded wavy underline; intense foreground" intense-foreground)
- (const :format "[%v] %t\n" :tag "Combines `straight-underline' and `intense-foreground'" intense-foreground-straight-underline)
- (const :format "[%v] %t\n" :tag "Color-coded background, foreground, straight underline" colored-background))
+ :type '(set :tag "Properties" :greedy t
+ (const :tag "Straight underline" straight-underline)
+ (const :tag "Colorise text as well" text-also)
+ (const :tag "Increase color intensity" intense)
+ (const :tag "With background" background))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Language checkers"))
(defcustom modus-themes-org-blocks nil
@@ -1971,10 +2327,14 @@ (defcustom modus-themes-org-blocks nil
(const :format "[%v] %t\n" :tag "Alias for `gray-background'" greyscale)
(const :format "[%v] %t\n" :tag "Color-coded background per programming language" tinted-background)
(const :format "[%v] %t\n" :tag "Alias for `tinted-background'" rainbow)) ; back compat
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Org mode blocks"))
(defcustom modus-themes-org-habit nil
- "Control the presentation of the `org-habit' graph.
+ "Deprecated in version 1.5.0 favor of `modus-themes-org-agenda'.
+
+Control the presentation of the `org-habit' graph.
The default is meant to conform with the original aesthetic of
`org-habit'. It employs all four color codes that correspond to
@@ -2009,64 +2369,90 @@ (defcustom modus-themes-org-habit nil
(const :format "[%v] %t\n" :tag "Respect the original design of org-habit (default)" nil)
(const :format "[%v] %t\n" :tag "Like the default, but do not distinguish between present and future variants" simplified)
(const :format "[%v] %t\n" :tag "Like `simplified', but only use red, yellow, green" traffic-light))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Org agenda habits"))
+(make-obsolete 'modus-themes-org-habit 'modus-themes-org-agenda "1.5.0")
+
(defcustom modus-themes-mode-line nil
- "Adjust the overall style of the mode line.
-
-The default (nil) is a two-dimensional rectangle with a border
-around it. The active and the inactive mode lines use different
-shades of grayscale values for the background and foreground.
-
-A `3d' value will apply a three-dimensional effect to the active
-mode line. The inactive mode lines remain two-dimensional and
-are toned down a bit, relative to the nil value.
-
-The `moody' option is meant to optimize the mode line for use
-with the library of the same name. This practically means to
-remove the box effect and rely on underline and overline
-properties instead. It also tones down the inactive mode lines.
-Despite its intended purpose, this option can also be used
-without the `moody' library.
-
-The `borderless' option uses the same colors as the default (nil
-value), but removes the border effect. This is done by making
-the box property use the same color as the background,
-effectively blending the two and creating some padding.
-
-The `borderless-3d' and `borderless-moody' approximate the `3d'
-and `moody' options respectively, while removing the borders.
-However, to ensure that the inactive mode lines remain visible,
-they apply a slightly more prominent background to them than what
-their counterparts do (same inactive background as with the
-default).
-
-Similarly, `accented', `accented-3d', and `accented-moody'
-correspond to the default (nil), `3d', and `moody' styles
-respectively, except that the active mode line uses a colored
-background instead of the standard shade of gray.
-
-Same principle for styles `borderless-accented',
-`borderless-accented-3d', `borderless-accented-moody', which
-apply a colored background to the active mode line, while they
-remove any noticeable border around both the active and inactive
-the mode lines."
+ "Control the overall style of the mode line.
+
+The value is a list of properties, each designated by a symbol.
+The default (a nil value or an empty list) is a two-dimensional
+rectangle with a border around it. The active and the inactive
+mode lines use different shades of grayscale values for the
+background, foreground, border.
+
+The `3d' property applies a three-dimensional effect to the
+active mode line. The inactive mode lines remain two-dimensional
+and are toned down a bit, relative to the default style.
+
+The `moody' property optimizes the mode line for use with the
+library of the same name (hereinafter referred to as 'Moody').
+In practice, it removes the box effect and replaces it with
+underline and overline properties. It also tones down the
+inactive mode lines. Despite its intended purpose, this option
+can also be used without the Moody library (please consult the
+themes' manual on this point for more details). If both `3d' and
+`moody' properties are set, the latter takes precedence.
+
+The `borderless' property removes the color of the borders. It
+does not actually remove the borders, but only makes their color
+the same as the background, effectively creating some padding.
+
+The `accented' property ensures that the active mode line uses a
+colored background instead of the standard shade of gray.
+
+Combinations of any of those properties are expressed as a list,
+like in these examples:
+
+ (accented)
+ (borderless 3d)
+ (moody accented borderless)
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+ (setq modus-themes-mode-line '(borderless accented))
+
+Note that Moody does not expose any faces that the themes could
+style directly. Instead it re-purposes existing ones to render
+its tabs and ribbons. As such, there may be cases where the
+contrast ratio falls below the 7:1 target that the themes conform
+with (WCAG AAA). To hedge against this, we configure a fallback
+foreground for the `moody' property, which will come into effect
+when the background of the mode line changes to something less
+accessible, such as Moody ribbons (read the doc string of
+`set-face-attribute', specifically `:distant-foreground'). This
+fallback is activated when Emacs determines that the background
+and foreground of the given construct are too close to each other
+in terms of color distance. In practice, users will need to
+experiment with the variable `face-near-same-color-threshold' to
+trigger the effect. We find that a value of 45000 shall suffice,
+contrary to the default 30000. Though for the combinations that
+involve the `accented' and `moody' properties, as mentioned
+above, that should be raised up to 70000. Do not set it too
+high, because it has the adverse effect of always overriding the
+default colors (which have been carefully designed to be highly
+accessible).
+
+Furthermore, because Moody expects an underline and overline
+instead of a box style, it is advised to set
+`x-underline-at-descent-line' to a non-nil value."
:group 'modus-themes
- :package-version '(modus-themes . "1.4.0")
+ :package-version '(modus-themes . "1.5.0")
:version "28.1"
- :type '(choice
- (const :format "[%v] %t\n" :tag "Two-dimensional box (default)" nil)
- (const :format "[%v] %t\n" :tag "Three-dimensional style for the active mode line" 3d)
- (const :format "[%v] %t\n" :tag "No box effects, which are optimal for use with the `moody' library" moody)
- (const :format "[%v] %t\n" :tag "Like the default, but without discernible border effects" borderless)
- (const :format "[%v] %t\n" :tag "Like `3d', but without noticeable border" borderless-3d)
- (const :format "[%v] %t\n" :tag "Like `moody', but without noticeable border" borderless-moody)
- (const :format "[%v] %t\n" :tag "Two-dimensional box with a colored background" accented)
- (const :format "[%v] %t\n" :tag "Like `3d', but with a colored background" accented-3d)
- (const :format "[%v] %t\n" :tag "Like `moody', but with a colored background" accented-moody)
- (const :format "[%v] %t\n" :tag "Like `accented', but without a noticeable border" borderless-accented)
- (const :format "[%v] %t\n" :tag "Like `accented-3d', but with a noticeable border" borderless-accented-3d)
- (const :format "[%v] %t\n" :tag "Like `accented-moody', but with a noticeable border" borderless-accented-moody))
+ :type '(set :tag "Properties" :greedy t
+ (choice :tag "Overall style"
+ (const :tag "Rectangular Border" nil)
+ (const :tag "3d borders" 3d)
+ (const :tag "No box effects (Moody-compatible)" moody))
+ (const :tag "Colored background" accented)
+ (const :tag "Without border color" borderless))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Mode line"))
(defcustom modus-themes-diffs nil
@@ -2108,10 +2494,12 @@ (defcustom modus-themes-diffs nil
:type '(choice
(const :format "[%v] %t\n" :tag "Intensely colored backgrounds (default)" nil)
(const :format "[%v] %t\n" :tag "Slightly accented backgrounds with tinted text" desaturated)
- (const :format "[%v] %t\n" :tag "Apply color-coded backgrounds; keep syntax colors in tact" bg-only)
+ (const :format "[%v] %t\n" :tag "Apply color-coded backgrounds; keep syntax colors intact" bg-only)
(const :format "[%v] %t\n" :tag "Like the default (nil), though optimized for red-green color defficiency" deuteranopia)
(const :format "[%v] %t\n" :tag "No backgrounds, except for refined diffs" fg-only-deuteranopia)
(const :format "[%v] %t\n" :tag "Alias of `fg-only-deuteranopia' for backward compatibility" fg-only))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Diffs"))
(defcustom modus-themes-completions nil
@@ -2155,36 +2543,57 @@ (defcustom modus-themes-completions nil
(const :format "[%v] %t\n" :tag "Respect the framework's established aesthetic (default)" nil)
(const :format "[%v] %t\n" :tag "Subtle backgrounds for various elements" moderate)
(const :format "[%v] %t\n" :tag "Radical alternative to the framework's looks" opinionated))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Completion UIs"))
(defcustom modus-themes-prompts nil
"Use subtle or intense styles for minibuffer and REPL prompts.
-Nil means to only use an accented foreground color.
+The value is a list of properties, each designated by a symbol.
+The default (a nil value or an empty list) means to only use a
+subtle accented foreground color.
+
+The property `background' applies a background color to the
+prompt's text. By default, this is a subtle accented value.
+
+The property `intense' makes the foreground color more prominent.
+If the `background' property is also set, it amplifies the value
+of the background as well.
+
+The property `gray' changes the prompt's colors to grayscale.
+This affects the foreground and, if the `background' property is
+also set, the background. Its effect is subtle, unless it is
+combined with the `intense' property.
+
+The property `bold' makes the text use a bold typographic weight.
+Similarly, `italic' adds a slant to the font's forms (italic or
+oblique forms, depending on the typeface).
+
+Combinations of any of those properties are expressed as a list,
+like in these examples:
-Options `subtle-accented' and `intense-accented' will change both
-the background and the foreground values to use accented color
-combinations that follow the hue of the default styles'
-foreground (e.g. the default minibuffer prompt is cyan text, so
-these combinations will involved a cyan background and an
-appropriate cyan foreground).
+ (intense)
+ (bold intense)
+ (intense bold gray)
+ (intense background gray bold)
-Options `subtle-gray' and `intense-gray' are like their
-`subtle-accented' and `intense-accented' counterparts, except
-they use grayscale values instead of accented ones."
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+ (setq modus-themes-prompts '(background gray))"
:group 'modus-themes
- :package-version '(modus-themes . "1.1.0")
+ :package-version '(modus-themes . "1.5.0")
:version "28.1"
- :type '(choice
- ;; `subtle' is the same as `subtle-accented', while `intense' is
- ;; equal to `intense-accented' for backward compatibility
- (const :format "[%v] %t\n" :tag "No prompt background (default)" nil)
- (const :format "[%v] %t\n" :tag "Subtle accented background for the prompt" subtle-accented)
- (const :format "[%v] %t\n" :tag "Same as `subtle-accented' for compatibility with older versions" subtle)
- (const :format "[%v] %t\n" :tag "Intense accented background and foreground for the prompt" intense-accented)
- (const :format "[%v] %t\n" :tag "Same as `intense-accented' for compatibility with older versions" intense)
- (const :format "[%v] %t\n" :tag "Like `subtle-accented' but grayscale" subtle-gray)
- (const :format "[%v] %t\n" :tag "Like `intense-accented' but grayscale" intense-gray))
+ :type '(set :tag "Properties" :greedy t
+ (const :tag "With Background" background)
+ (const :tag "Intense" intense)
+ (const :tag "Grayscale" gray)
+ (const :tag "Bold font weight" bold)
+ (const :tag "Italic font slant" italic))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Command prompts"))
(defcustom modus-themes-intense-hl-line nil
@@ -2193,6 +2602,8 @@ (defcustom modus-themes-intense-hl-line nil
:package-version '(modus-themes . "1.0.0")
:version "28.1"
:type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Line highlighting"))
(make-obsolete 'modus-themes-intense-hl-line 'modus-themes-hl-line "1.3.0")
@@ -2200,39 +2611,44 @@ (make-obsolete 'modus-themes-intense-hl-line 'modus-themes-hl-line "1.3.0")
(defcustom modus-themes-hl-line nil
"Control the current line highlight of HL-line mode.
-The default (nil) is to apply a subtle neutral background to the
-current line.
+The value is a list of properties, each designated by a symbol.
+The default (a nil value or an empty list) is a subtle gray
+background color.
-Option `intense-background' uses a prominent neutral background.
+The property `accented' changes the background to a colored
+variant.
-Option `accented-background' is like the `intense-background' but
-with a more colorful background.
+An `underline' property draws a line below the highlighted area.
+Its color is similar to the background, so gray by default or an
+accent color when `accented' is also set.
-Option `underline-neutral' combines a subtle neutral background
-with a gray underline.
+An `intense' property amplifies the colors in use, which may be
+both the background and the underline.
-Option `underline-accented' draws an underline while applying a
-subtle colored background.
+Combinations of any of those properties are expressed as a list,
+like in these examples:
-Option `underline-only-neutral' uses just a neutral underline,
-without any added change to the background.
+ (intense)
+ (underline intense)
+ (accented intense underline)
-Option `underline-only-accented' uses just a colored underline,
-without any added change to the background.
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+ (setq modus-themes-hl-line '(underline accented))
Set `x-underline-at-descent-line' to a non-nil value for better
results with underlines."
:group 'modus-themes
- :package-version '(modus-themes . "1.4.0")
+ :package-version '(modus-themes . "1.5.0")
:version "28.1"
- :type '(choice
- (const :format "[%v] %t\n" :tag "Subtle neutral background (default)" nil)
- (const :format "[%v] %t\n" :tag "Prominent neutral background" intense-background)
- (const :format "[%v] %t\n" :tag "Subtle colored background" accented-background)
- (const :format "[%v] %t\n" :tag "Underline with a subtle neutral background" underline-neutral)
- (const :format "[%v] %t\n" :tag "Underline with a subtle colored background" underline-accented)
- (const :format "[%v] %t\n" :tag "Just a neutral underline, without a background" underline-only-neutral)
- (const :format "[%v] %t\n" :tag "Just an accented underline, without a background" underline-only-accented))
+ :type '(set :tag "Properties" :greedy t
+ (const :tag "Colored background" accented)
+ (const :tag "Underline" underline)
+ (const :tag "Intense style" intense))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Line highlighting"))
(defcustom modus-themes-subtle-line-numbers nil
@@ -2241,145 +2657,208 @@ (defcustom modus-themes-subtle-line-numbers nil
:package-version '(modus-themes . "1.2.0")
:version "28.1"
:type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Line numbers"))
(defcustom modus-themes-paren-match nil
- "Choose the style of matching parentheses or delimiters.
+ "Control the style of matching parentheses or delimiters.
-Nil means to use a subtle tinted background color (the default).
+The value is a list of properties, each designated by a symbol.
+The default (a nil value or an empty list) is a subtle background
+color.
-Option `intense' applies a saturated background color.
+The `bold' property adds a bold weight to the characters of the
+matching delimiters.
-Option `subtle-bold' is the same as the default, but also makes
-use of bold typographic weight (inherits the `bold' face).
+The `intense' property applies a more prominent background color
+to the delimiters.
-Option `intense-bold' is the same as `intense', while it also
-uses a bold weight."
+The `underline' property draws a straight line under the affected
+text.
+
+Combinations of any of those properties are expressed as a list,
+like in these examples:
+
+ (bold)
+ (underline intense)
+ (bold intense underline)
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+ (setq modus-themes-paren-match '(bold intense))"
:group 'modus-themes
- :package-version '(modus-themes . "1.0.0")
+ :package-version '(modus-themes . "1.5.0")
:version "28.1"
- :type '(choice
- (const :format "[%v] %t\n" :tag "Sublte tinted background (default)" nil)
- (const :format "[%v] %t\n" :tag "Like the default, but also use bold typographic weight" subtle-bold)
- (const :format "[%v] %t\n" :tag "Intense saturated background" intense)
- (const :format "[%v] %t\n" :tag "Like `intense' but with bold weight" intense-bold))
+ :type '(set :tag "Properties" :greedy t
+ (const :tag "Bold weight" bold)
+ (const :tag "Intense background color" intense)
+ (const :tag "Underline" underline))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Matching parentheses"))
(defcustom modus-themes-syntax nil
"Control the overall style of code syntax highlighting.
-Nil (the default) means to use colors on the cyan-blue-magenta
-side of the spectrum. There is little to no use of greens,
-yellows, and reds.
+The value is a list of properties, each designated by a symbol.
+The default (a nil value or an empty list) is to use a balanced
+combination of colors on the cyan-blue-magenta side of the
+spectrum. There is little to no use of greens, yellows, and
+reds. Comments are gray, strings are blue colored, doc strings
+are a shade of cyan, while color combinations are designed to
+avoid exaggerations.
+
+The property `faint' fades the saturation of all applicable
+colors, where that is possible or appropriate.
-Option `faint' is like the default in terms of the choice of
-palette but applies desaturated color values.
+The property `yellow-comments' applies a yellow color to
+comments.
-Option `yellow-comments' applies a yellow tint to comments. The
-rest of the syntax is the same as the default.
+The property `green-strings' applies a green color to strings and
+a green tint to doc strings.
-Option `green-strings' replaces the blue/cyan/cold color variants
-in strings with greener alternatives. The rest of the syntax
-remains the same.
+The property `alt-syntax' changes the combination of colors
+beyond strings and comments, so that the effective palette is
+broadened to provide greater variety relative to the default.
-Option `yellow-comments-green-strings' combines yellow comments
-with green strings and the rest of the default syntax
-highlighting style.
+Combinations of any of those properties are expressed as a list,
+like in these examples:
-Option `alt-syntax' expands the color palette and applies new
-color combinations. Strings are green. Doc strings are magenta
-tinted. Comments are gray.
+ (faint)
+ (green-strings yellow-comments)
+ (alt-syntax green-strings yellow-comments)
+ (faint alt-syntax green-strings yellow-comments)
-Option `alt-syntax-yellow-comments' combines `alt-syntax' with
-`yellow-comments'.
+The order in which the properties are set is not significant.
-Option `faint-yellow-comments' combines the `faint' style with
-`yellow-comments'."
+In user configuration files the form may look like this:
+
+ (setq modus-themes-syntax '(faint alt-syntax))
+
+Independent of this variable, users may also control the use of a
+bold weight or italic text: `modus-themes-bold-constructs' and
+`modus-themes-italic-constructs'."
:group 'modus-themes
- :package-version '(modus-themes . "1.2.0")
+ :package-version '(modus-themes . "1.5.0")
:version "28.1"
- :type '(choice
- (const :format "[%v] %t\n" :tag "Balanced use of blue, cyan, magenta, purple variants (default)" nil)
- (const :format "[%v] %t\n" :tag "Like the default, but with desaturated color values" faint)
- (const :format "[%v] %t\n" :tag "Apply yellow tint to comments, keep the default style for the rest" yellow-comments)
- (const :format "[%v] %t\n" :tag "Use green for strings, keep the default style for the rest" green-strings)
- (const :format "[%v] %t\n" :tag "Use green for strings, yellow for comments, keep the default style for the rest" yellow-comments-green-strings)
- (const :format "[%v] %t\n" :tag "Refashion syntax highlighting with more colors, gray comments" alt-syntax)
- (const :format "[%v] %t\n" :tag "Like `alt-syntax' but with yellow comments" alt-syntax-yellow-comments)
- (const :format "[%v] %t\n" :tag "Like `faint' but with yellow comments" faint-yellow-comments))
+ :type '(set :tag "Properties" :greedy t
+ (const :tag "Faint colors" faint)
+ (const :tag "Yellow comments" yellow-comments)
+ (const :tag "Green strings" green-strings)
+ (const :tag "Alternative set of colors" alt-syntax))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Syntax styles"))
(defcustom modus-themes-links nil
"Set the style of links.
-Nil means to use an underline that is the same color as the
-foreground.
+The value is a list of properties, each designated by a symbol.
+The default (a nil value or an empty list) is a prominent text
+color, typically blue, with an underline of the same color.
+
+For the style of the underline, a `neutral-underline' property
+turns the color of the line into a subtle gray, while the
+`no-underline' property removes the line altogether. If both of
+those are set, the latter takes precedence.
+
+For text coloration, a `faint' property desaturates the color of
+the text and the underline, unless the underline is affected by
+the aforementioned properties. While a `no-color' property
+removes the color from the text. If both of those are set, the
+latter takes precedence.
+
+A `bold' property applies a heavy typographic weight to the text
+of the link.
+
+An `italic' property adds a slant to the link's text (italic or
+oblique forms, depending on the typeface).
-Option `faint' applies desaturated colors to the link's text and
-underline.
+A `background' property applies a subtle tinted background color.
-Option `neutral-underline' applies a subtle gray underline, while
-retaining the link's foreground.
+In case both `no-underline' and `no-color' are set, then a subtle
+gray background is applied to all links. This can still be
+combined with the `bold' and `italic' properties.
-Option `faint-neutral-underline' combines a desaturated text
-color with a subtle gray underline.
+Combinations of any of those properties are expressed as a list,
+like in these examples:
-Option `no-underline' removes link underlines altogether, while
-retaining their original fairly vivid color.
+ (faint)
+ (no-underline faint)
+ (no-color no-underline bold)
+ (italic bold background no-color no-underline)
-Option `underline-only' applies an underline while making the
-affected text colorless (it uses the same foreground as the
-theme's default).
+The order in which the properties are set is not significant.
-Option `neutral-underline-only' makes the text colorless while
-using a subtle underline below it."
+In user configuration files the form may look like this:
+
+ (setq modus-themes-links '(neutral-underline background))
+
+The placement of the underline, meaning its proximity to the
+text, is controlled by `x-use-underline-position-properties',
+`x-underline-at-descent-line', `underline-minimum-offset'.
+Please refer to their documentation strings."
:group 'modus-themes
- :package-version '(modus-themes . "1.2.0")
+ :package-version '(modus-themes . "1.5.0")
:version "28.1"
- :type '(choice
- (const :format "[%v] %t\n" :tag "Undeline link using the same color as the text (default)" nil)
- (const :format "[%v] %t\n" :tag "Like the default, but apply less intense colors to links" faint)
- (const :format "[%v] %t\n" :tag "Change the color of link underlines to a neutral gray" neutral-underline)
- (const :format "[%v] %t\n" :tag "Desaturated foreground with neutral gray underline" faint-neutral-underline)
- (const :format "[%v] %t\n" :tag "Remove underline property from links, keeping their foreground as-is" no-underline)
- (const :format "[%v] %t\n" :tag "Apply underline only; use default foreground" underline-only)
- (const :format "[%v] %t\n" :tag "Like `underline-only' but with a subtle underline" neutral-underline-only))
+ :type '(set :tag "Properties" :greedy t
+ (choice :tag "Text coloration"
+ (const :tag "Saturared color (default)" nil)
+ (const :tag "Faint coloration" faint)
+ (const :tag "No color (use main black/white)" no-color))
+ (choice :tag "Underline"
+ (const :tag "Same color as text (default)" nil)
+ (const :tag "Neutral (gray) underline color" neutral-underline)
+ (const :tag "No underline" no-underline))
+ (const :tag "Bold font weight" bold)
+ (const :tag "Italic font slant" italic)
+ (const :tag "Subtle background color" background))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Link styles"))
(defcustom modus-themes-region nil
- "Change the overall appearance of the active region.
+ "Control the overall style of the active region.
-Nil (the default) means to only use a prominent gray background
-with a neutral foreground. The foreground overrides all syntax
-highlighting. The region extends to the edge of the window.
+The value is a list of properties, each designated by a symbol.
+The default (a nil value or an empty list) is a prominent gray
+background that overrides all foreground colors in the area it
+encompasses. Its reach extends to the edge of the window.
-Option `no-extend' preserves the default aesthetic but prevents
-the region from extending to the edge of the window.
+The `no-extend' property limits the region to the end of the
+line, so that it does not reach the edge of the window.
-Option `bg-only' applies a faint tinted background that is
-distinct from all others used in the theme, while it does not
-override any existing colors. It extends to the edge of the
-window.
+The `bg-only' property makes the region's background color more
+subtle to allow the underlying text to retain its foreground
+colors.
-Option `bg-only-no-extend' is a combination of the `bg-only' and
-`no-extend' options.
+The `accented' property applies a more colorful background to the
+region.
-Option `accent' uses a more colorful background with a neutral
-foreground. It overrides all syntax highlighting and extends to
-the edge of the window.
+Combinations of any of those properties are expressed as a list,
+like in these examples:
-Option `accent-no-extend' is like the above, but stretches only
-to the end of each line within the region."
+ (no-extend)
+ (bg-only accented)
+ (accented bg-only no-extend)
+
+The order in which the properties are set is not significant.
+
+In user configuration files the form may look like this:
+
+ (setq modus-themes-region '(bg-only no-extend))"
:group 'modus-themes
- :package-version '(modus-themes . "1.3.0")
+ :package-version '(modus-themes . "1.5.0")
:version "28.1"
- :type '(choice
- (const :format "[%v] %t\n" :tag "Intense background; overrides colors; extends to edge of window (default)" nil)
- (const :format "[%v] %t\n" :tag "As with the default, but does not extend" no-extend)
- (const :format "[%v] %t\n" :tag "Subtle background; preserves colors; extends to edge of window" bg-only)
- (const :format "[%v] %t\n" :tag "As with the `subtle' option, but does not extend" bg-only-no-extend)
- (const :format "[%v] %t\n" :tag "Like the default, but with an accented background" accent)
- (const :format "[%v] %t\n" :tag "As with the `accent' option, but does not extend" accent-no-extend))
+ :type '(set :tag "Properties" :greedy t
+ (const :tag "Do not extend to the edge of the window" no-extend)
+ (const :tag "Background only (preserve underlying colors)" bg-only)
+ (const :tag "Accented background" accented))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Active region"))
(defcustom modus-themes-success-deuteranopia nil
@@ -2397,6 +2876,8 @@ (defcustom modus-themes-success-deuteranopia nil
:package-version '(modus-themes . "1.4.0")
:version "28.1"
:type 'boolean
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Success' color-code"))
(defcustom modus-themes-mail-citations nil
@@ -2420,6 +2901,8 @@ (defcustom modus-themes-mail-citations nil
(const :format "[%v] %t\n" :tag "Like the default, but with less saturated colors" faint)
(const :format "[%v] %t\n" :tag "Deprecated alias of `faint'" desaturated)
(const :format "[%v] %t\n" :tag "Uniformly gray mail citations" monochrome))
+ :set #'modus-themes--set-option
+ :initialize #'custom-initialize-default
:link '(info-link "(modus-themes) Mail citations"))
\f
@@ -2474,17 +2957,17 @@ (defun modus-themes--bold-weight ()
(when modus-themes-bold-constructs
(list :inherit 'bold)))
-(defun modus-themes--mixed-fonts ()
- "Conditional application of `fixed-pitch' inheritance."
- (unless modus-themes-no-mixed-fonts
- (list :inherit 'fixed-pitch)))
-
(defun modus-themes--slant ()
"Conditional use of italics for slant attribute."
- (if modus-themes-slanted-constructs
+ (if modus-themes-italic-constructs
(list 'italic)
(list 'normal)))
+(defun modus-themes--fixed-pitch ()
+ "Conditional application of `fixed-pitch' inheritance."
+ (unless modus-themes-no-mixed-fonts
+ (list :inherit 'fixed-pitch)))
+
(defun modus-themes--variable-pitch ()
"Conditional use of `variable-pitch' in headings."
(when modus-themes-variable-pitch-headings
@@ -2512,43 +2995,113 @@ (defun modus-themes--line-numbers (mainfg mainbg altfg &optional altbg)
(list :background (or altbg 'unspecified) :foreground altfg)
(list :background mainbg :foreground mainfg)))
-(defun modus-themes--lang-check (underline subtlefg intensefg bg)
+(defun modus-themes--lang-check (underline subtlefg intensefg intensefg-alt subtlebg intensebg)
"Conditional use of foreground colors for language checkers.
UNDERLINE is a color-code value for the affected text's underline
property. SUBTLEFG and INTENSEFG follow the same color-coding
pattern and represent a value that is faint or vibrant
-respectively. BG is a color-coded background."
- (pcase modus-themes-lang-checkers
- ('colored-background
- (list :underline underline :background bg :foreground intensefg))
- ('intense-foreground
- (list :underline (list :color underline :style 'wave) :foreground intensefg))
- ('intense-foreground-straight-underline
- (list :underline underline :foreground intensefg))
- ('subtle-foreground
- (list :underline (list :color underline :style 'wave) :foreground subtlefg))
- ('subtle-foreground-straight-underline
- (list :underline underline :foreground subtlefg))
- ('straight-underline
- (list :underline underline))
- (_ (list :underline (list :color underline :style 'wave)))))
-
-(defun modus-themes--prompt (mainfg subtlebg subtlefg intensebg intensefg)
- "Conditional use of background colors for prompts.
-MAINFG is the prompt's standard foreground. SUBTLEBG should be a
-subtle accented background that works with SUBTLEFG. INTENSEBG
-must be a more pronounced accented color that should be
-combinable with INTENSEFG."
- (pcase modus-themes-prompts
- ;; `subtle' is the same as `subtle-accented', while `intense' is
- ;; equal to `intense-accented' for backward compatibility
- ('intense-accented (list :background intensebg :foreground intensefg))
- ('intense (list :background intensebg :foreground intensefg))
- ('subtle-accented (list :background subtlebg :foreground subtlefg))
- ('subtle (list :background subtlebg :foreground subtlefg))
- ('subtle-gray (list :inherit 'modus-themes-subtle-neutral))
- ('intense-gray (list :inherit 'modus-themes-intense-neutral))
- (_ (list :background 'unspecified :foreground mainfg))))
+respectively. INTENSEFG-ALT is used when the intensity is high.
+SUBTLEBG and INTENSEBG are color-coded background colors that
+differ in overall intensity."
+ (let ((modus-themes-lang-checkers
+ (if (listp modus-themes-lang-checkers)
+ modus-themes-lang-checkers
+ (pcase modus-themes-lang-checkers
+ ('colored-background '(background intense))
+ ('intense-foreground '(intense))
+ ('intense-foreground-straight-underline '(intense straight-underline))
+ ('subtle-foreground '(text-also))
+ ('subtle-foreground-straight-underline '(text-also straight-underline))
+ ('straight-underline '(straight-underline))))))
+ (list :underline
+ (list :color
+ underline
+ :style
+ (if (memq 'straight-underline modus-themes-lang-checkers)
+ 'line 'wave))
+ :background
+ (cond
+ ((and (memq 'background modus-themes-lang-checkers)
+ (memq 'intense modus-themes-lang-checkers))
+ intensebg)
+ ((memq 'background modus-themes-lang-checkers)
+ subtlebg))
+ :foreground
+ (cond
+ ((and (memq 'background modus-themes-lang-checkers)
+ (memq 'intense modus-themes-lang-checkers))
+ intensefg-alt)
+ ((memq 'intense modus-themes-lang-checkers)
+ intensefg)
+ ((memq 'text-also modus-themes-lang-checkers)
+ subtlefg)))))
+
+(defun modus-themes--prompt (mainfg intensefg grayfg subtlebg intensebg intensebg-fg subtlebggray intensebggray)
+ "Conditional use of colors for prompts.
+MAINFG is the prompt's standard foreground. INTENSEFG is a more
+prominent alternative to the main foreground, while GRAYFG is a
+less luminant shade of gray.
+
+SUBTLEBG is a subtle accented background that works with either
+MAINFG or INTENSEFG.
+
+INTENSEBG is a more pronounced accented background color that
+should be combinable with INTENSEBG-FG.
+
+SUBTLEBGGRAY and INTENSEBGGRAY are background values. The former
+can be combined with GRAYFG, while the latter only works with the
+theme's fallback text color."
+ (let ((modus-themes-prompts
+ (if (listp modus-themes-prompts)
+ modus-themes-prompts
+ ;; translation layer for legacy values
+ (pcase modus-themes-prompts
+ ;; `subtle' is the same as `subtle-accented', while `intense' is
+ ;; equal to `intense-accented' for backward compatibility
+ ('subtle '(background))
+ ('subtle-accented '(background))
+ ('subtle-gray '(background gray))
+ ('intense '(background intense))
+ ('intense-accented '(background intense))
+ ('intense-gray '(background intense gray))))))
+ (list :foreground
+ (cond
+ ((and (memq 'gray modus-themes-prompts)
+ (memq 'intense modus-themes-prompts))
+ 'unspecified)
+ ((memq 'gray modus-themes-prompts)
+ grayfg)
+ ((and (memq 'background modus-themes-prompts)
+ (memq 'intense modus-themes-prompts))
+ intensebg-fg)
+ ((memq 'intense modus-themes-prompts)
+ intensefg)
+ (mainfg))
+ :background
+ (cond
+ ((and (memq 'gray modus-themes-prompts)
+ (memq 'background modus-themes-prompts)
+ (memq 'intense modus-themes-prompts))
+ intensebggray)
+ ((and (memq 'gray modus-themes-prompts)
+ (memq 'background modus-themes-prompts))
+ subtlebggray)
+ ((and (memq 'background modus-themes-prompts)
+ (memq 'intense modus-themes-prompts))
+ intensebg)
+ ((memq 'background modus-themes-prompts)
+ subtlebg)
+ ('unspecified))
+ :inherit
+ (cond
+ ((and (memq 'bold modus-themes-prompts)
+ (memq 'italic modus-themes-prompts))
+ 'bold-italic)
+ ((memq 'italic modus-themes-prompts)
+ 'italic)
+ ((memq 'bold modus-themes-prompts)
+ 'bold)
+ ('unspecified)))))
(defun modus-themes--paren (normalbg intensebg)
"Conditional use of intense colors for matching parentheses.
@@ -2556,127 +3109,278 @@ (defun modus-themes--paren (normalbg intensebg)
something similar. INTENSEBG must be easier to discern next to
other backgrounds, such as the special palette color
'bg-paren-match-intense'."
- (pcase modus-themes-paren-match
- ('subtle-bold (list :inherit 'bold :background normalbg))
- ('intense-bold (list :inherit 'bold :background intensebg))
- ('intense (list :background intensebg))
- (_ (list :background normalbg))))
+ (let ((modus-themes-paren-match
+ (if (listp modus-themes-paren-match)
+ modus-themes-paren-match
+ ;; translation layer for legacy values
+ (pcase modus-themes-paren-match
+ ;; `subtle' is the same as `subtle-accented', while `intense' is
+ ;; equal to `intense-accented' for backward compatibility
+ ('intense-bold '(intense bold))
+ ('subtle-bold '(bold))
+ ('intense '(intense))))))
+ (list :inherit
+ (if (memq 'bold modus-themes-paren-match)
+ 'bold
+ 'unspecified)
+ :background
+ (if (memq 'intense modus-themes-paren-match)
+ intensebg
+ normalbg)
+ :underline
+ (if (memq 'underline modus-themes-paren-match)
+ t
+ nil))))
(defun modus-themes--syntax-foreground (fg faint)
"Apply foreground value to code syntax.
FG is the default. FAINT is typically the same color in its
desaturated version."
- (pcase modus-themes-syntax
- ('faint (list :foreground faint))
- ('faint-yellow-comments (list :foreground faint))
- (_ (list :foreground fg))))
-
-(defun modus-themes--syntax-extra (fg faint alt)
+ (let ((modus-themes-syntax
+ (if (listp modus-themes-syntax)
+ modus-themes-syntax
+ ;; translation layer for legacy values
+ (pcase modus-themes-syntax
+ ('faint '(faint))
+ ('faint-yellow-comments '(faint yellow-comments))
+ ('green-strings '(green-strings))
+ ('yellow-comments '(yellow-comments))
+ ('yellow-comments-green-strings '(green-strings yellow-comments))
+ ('alt-syntax '(alt-syntax))
+ ('alt-syntax-yellow-comments '(alt-syntax yellow-comments))))))
+ (list :foreground
+ (cond
+ ((memq 'faint modus-themes-syntax)
+ faint)
+ (fg)))))
+
+(defun modus-themes--syntax-extra (fg faint alt &optional faint-alt)
"Apply foreground value to code syntax.
FG is the default. FAINT is typically the same color in its
-desaturated version. ALT is another hue."
- (pcase modus-themes-syntax
- ('faint (list :foreground faint))
- ('faint-yellow-comments (list :foreground faint))
- ('alt-syntax (list :foreground alt))
- ('alt-syntax-yellow-comments (list :foreground alt))
- (_ (list :foreground fg))))
-
-(defun modus-themes--syntax-string (fg faint green alt)
- "Apply foreground value to strings in code syntax.
-FG is the default. FAINT is typically the same color in its
-desaturated version. GREEN is a color variant in that side of
-the spectrum. ALT is another hue."
- (pcase modus-themes-syntax
- ('faint (list :foreground faint))
- ('faint-yellow-comments (list :foreground faint))
- ('green-strings (list :foreground green))
- ('yellow-comments-green-strings (list :foreground alt))
- ('alt-syntax (list :foreground alt))
- ('alt-syntax-yellow-comments (list :foreground alt))
- (_ (list :foreground fg))))
-
-(defun modus-themes--syntax-docstring (fg faint green alt)
+desaturated version. ALT is another hue while optional FAINT-ALT
+is its subtle alternative."
+ (let ((modus-themes-syntax
+ (if (listp modus-themes-syntax)
+ modus-themes-syntax
+ ;; translation layer for legacy values
+ (pcase modus-themes-syntax
+ ('faint '(faint))
+ ('faint-yellow-comments '(faint yellow-comments))
+ ('green-strings '(green-strings))
+ ('yellow-comments '(yellow-comments))
+ ('yellow-comments-green-strings '(green-strings yellow-comments))
+ ('alt-syntax '(alt-syntax))
+ ('alt-syntax-yellow-comments '(alt-syntax yellow-comments))))))
+ (list :foreground
+ (cond
+ ((and (memq 'alt-syntax modus-themes-syntax)
+ (memq 'faint modus-themes-syntax))
+ (or faint-alt alt))
+ ((memq 'faint modus-themes-syntax)
+ faint)
+ ((memq 'alt-syntax modus-themes-syntax)
+ alt)
+ (fg)))))
+
+(defun modus-themes--syntax-string (fg faint green alt &optional faint-green faint-alt)
"Apply foreground value to strings in code syntax.
FG is the default. FAINT is typically the same color in its
desaturated version. GREEN is a color variant in that side of
-the spectrum. ALT is another hue."
- (pcase modus-themes-syntax
- ('faint (list :foreground faint))
- ('faint-yellow-comments (list :foreground faint))
- ('green-strings (list :foreground green))
- ('yellow-comments-green-strings (list :foreground green))
- ('alt-syntax (list :foreground alt))
- ('alt-syntax-yellow-comments (list :foreground alt))
- (_ (list :foreground fg))))
-
-(defun modus-themes--syntax-comment (fg yellow)
+the spectrum. ALT is another hue. Optional FAINT-GREEN is a
+subtle alternative to GREEN. Optional FAINT-ALT is a subtle
+alternative to ALT."
+ (let ((modus-themes-syntax
+ (if (listp modus-themes-syntax)
+ modus-themes-syntax
+ ;; translation layer for legacy values
+ (pcase modus-themes-syntax
+ ('faint '(faint))
+ ('faint-yellow-comments '(faint yellow-comments))
+ ('green-strings '(green-strings))
+ ('yellow-comments '(yellow-comments))
+ ('yellow-comments-green-strings '(green-strings yellow-comments))
+ ('alt-syntax '(alt-syntax))
+ ('alt-syntax-yellow-comments '(alt-syntax yellow-comments))))))
+ (list :foreground
+ (cond
+ ((and (memq 'faint modus-themes-syntax)
+ (memq 'green-strings modus-themes-syntax))
+ (or faint-green green))
+ ((and (memq 'alt-syntax modus-themes-syntax)
+ (memq 'faint modus-themes-syntax))
+ (or faint-alt faint))
+ ((memq 'faint modus-themes-syntax)
+ faint)
+ ((memq 'green-strings modus-themes-syntax)
+ green)
+ ((memq 'alt-syntax modus-themes-syntax)
+ alt)
+ (fg)))))
+
+(defun modus-themes--syntax-comment (fg yellow &optional faint-yellow faint)
"Apply foreground value to strings in code syntax.
-FG is the default. YELLOW is a color variant of that name."
- (pcase modus-themes-syntax
- ('yellow-comments (list :foreground yellow))
- ('yellow-comments-green-strings (list :foreground yellow))
- ('alt-syntax-yellow-comments (list :foreground yellow))
- ('faint-yellow-comments (list :foreground yellow))
- (_ (list :foreground fg))))
-
-(defun modus-themes--heading-p (key)
- "Query style of KEY in `modus-themes-headings'."
- (cdr (assoc key modus-themes-headings)))
-
-(defun modus-themes--heading (level fg fg-alt bg border)
+FG is the default. YELLOW is a color variant of that name while
+optional FAINT-YELLOW is its subtle variant. Optional FAINT is
+an alternative to the default value."
+ (let ((modus-themes-syntax
+ (if (listp modus-themes-syntax)
+ modus-themes-syntax
+ ;; translation layer for legacy values
+ (pcase modus-themes-syntax
+ ('faint '(faint))
+ ('faint-yellow-comments '(faint yellow-comments))
+ ('green-strings '(green-strings))
+ ('yellow-comments '(yellow-comments))
+ ('yellow-comments-green-strings '(green-strings yellow-comments))
+ ('alt-syntax '(alt-syntax))
+ ('alt-syntax-yellow-comments '(alt-syntax yellow-comments))))))
+ (list :foreground
+ (cond
+ ((and (memq 'faint modus-themes-syntax)
+ (memq 'yellow-comments modus-themes-syntax))
+ (or faint-yellow yellow))
+ ((and (memq 'alt-syntax modus-themes-syntax)
+ (memq 'yellow-comments modus-themes-syntax)
+ (not (memq 'green-strings modus-themes-syntax)))
+ (or faint-yellow yellow))
+ ((memq 'yellow-comments modus-themes-syntax)
+ yellow)
+ ((memq 'faint modus-themes-syntax)
+ (or faint fg))
+ (fg)))))
+
+(defun modus-themes--key-cdr (key alist)
+ "Get cdr of KEY in ALIST."
+ (cdr (assoc key alist)))
+
+(defun modus-themes--heading (level fg fg-alt bg bg-gray border)
"Conditional styles for `modus-themes-headings'.
LEVEL is the heading's position in their order. FG is the
default text color. FG-ALT is an accented, more saturated value
than the default. BG is a nuanced, typically accented,
background that can work well with either of the foreground
-values. BORDER is a color value that combines well with the
-background and alternative foreground."
- (let* ((key (modus-themes--heading-p level))
- (style (or key (modus-themes--heading-p t)))
- (var (when modus-themes-variable-pitch-headings
- 'variable-pitch))
+values. BG-GRAY is a gray background. BORDER is a color value
+that combines well with the background and foreground."
+ (let* ((key (modus-themes--key-cdr level modus-themes-headings))
+ (style (or key (modus-themes--key-cdr t modus-themes-headings)))
+ (modus-themes-headings
+ (if (listp style)
+ style
+ ;; translation layer for legacy values
+ (pcase style
+ ('highlight '(background))
+ ('highlight-no-bold '(background no-bold))
+ ('line '(overline))
+ ('line-no-bold '(no-bold overline))
+ ('no-bold '(no-bold))
+ ('no-color '(monochrome))
+ ('no-color-no-bold '(no-bold monochrome))
+ ('rainbow '(rainbow))
+ ('rainbow-highlight '(rainbow background))
+ ('rainbow-highlight-no-bold '(no-bold rainbow background))
+ ('rainbow-line '(rainbow overline))
+ ('rainbow-no-bold '(no-bold rainbow))
+ ('rainbow-line-no-bold '(rainbow overline no-bold))
+ ('rainbow-section '(rainbow overline background))
+ ('rainbow-section-no-bold '(no-bold rainbow background overline))
+ ('section '(background overline))
+ ('section-no-bold '(background overline no-bold)))))
+ (var (if modus-themes-variable-pitch-headings
+ 'variable-pitch
+ 'unspecified))
(varbold (if var
(append (list 'bold) (list var))
'bold)))
- (pcase style
- ('no-bold
- (list :inherit var :foreground fg))
- ('no-color
- (list :inherit varbold))
- ('no-color-no-bold
- (list :inherit var))
- ('line
- (list :inherit varbold :foreground fg :overline border))
- ('line-no-bold
- (list :inherit var :foreground fg :overline border))
- ('rainbow
- (list :inherit varbold :foreground fg-alt))
- ('rainbow-no-bold
- (list :inherit var :foreground fg-alt))
- ('rainbow-line
- (list :inherit varbold :foreground fg-alt :overline border))
- ('rainbow-line-no-bold
- (list :inherit var :foreground fg-alt :overline border))
- ('highlight
- (list :inherit varbold :background bg :foreground fg))
- ('highlight-no-bold
- (list :inherit var :background bg :foreground fg))
- ('rainbow-highlight
- (list :inherit varbold :background bg :foreground fg-alt))
- ('rainbow-highlight-no-bold
- (list :inherit var :background bg :foreground fg-alt))
- ('section
- (list :inherit varbold :background bg :foreground fg :overline border :extend t))
- ('section-no-bold
- (list :inherit var :background bg :foreground fg :overline border :extend t))
- ('rainbow-section
- (list :inherit varbold :background bg :foreground fg-alt :overline border :extend t))
- ('rainbow-section-no-bold
- (list :inherit var :background bg :foreground fg-alt :overline border :extend t))
- (_
- (list :inherit varbold :foreground fg)))))
+ (list :inherit
+ (cond
+ ((memq 'no-bold modus-themes-headings)
+ var)
+ (varbold))
+ :background
+ (cond
+ ((and (memq 'monochrome modus-themes-headings)
+ (memq 'background modus-themes-headings))
+ bg-gray)
+ ((memq 'background modus-themes-headings)
+ bg)
+ ('unspecified))
+ :foreground
+ (cond
+ ((memq 'monochrome modus-themes-headings)
+ 'unspecified)
+ ((memq 'rainbow modus-themes-headings)
+ fg-alt)
+ (fg))
+ :overline
+ (if (memq 'overline modus-themes-headings)
+ border
+ 'unspecified))))
+
+(defun modus-themes--agenda-structure (fg)
+ "Control the style of the Org agenda structure.
+FG is the foreground color to use."
+ (let* ((properties (modus-themes--key-cdr 'header-block modus-themes-org-agenda))
+ (inherit (cond ((memq 'variable-pitch properties)
+ (list 'bold 'variable-pitch))
+ ('bold)))
+ (height (cond ((memq 'no-scale properties)
+ 1.0)
+ ((memq 'scale-title properties)
+ modus-themes-scale-title)
+ (1.15))))
+ (list :inherit inherit
+ :height height
+ :foreground fg)))
+
+(defun modus-themes--agenda-date (defaultfg grayscalefg &optional bold workaholicfg grayscaleworkaholicfg)
+ "Control the style of date headings in Org agenda buffers.
+DEFAULTFG is the original accent color for the foreground.
+GRAYSCALEFG is a neutral color. Optional BOLD applies a bold
+weight. Optional WORKAHOLICFG and GRAYSCALEWORKAHOLICFG are
+alternative foreground colors."
+ (let* ((properties (modus-themes--key-cdr 'header-date modus-themes-org-agenda))
+ (weight (cond ((memq 'bold-all properties)
+ 'bold)
+ ((and bold (memq 'bold-today properties))
+ 'bold)
+ (t
+ nil)))
+ (fg (cond ((and (memq 'grayscale properties)
+ (memq 'workaholic properties))
+ (or grayscaleworkaholicfg grayscalefg))
+ ((memq 'grayscale properties)
+ grayscalefg)
+ ((memq 'workaholic properties)
+ (or workaholicfg defaultfg))
+ (t
+ defaultfg))))
+ (list :inherit weight
+ :foreground fg)))
+
+(defun modus-themes--agenda-scheduled (defaultfg uniformfg rainbowfg)
+ "Control the style of the Org agenda scheduled tasks.
+DEFAULTFG is an accented foreground color that is meant to
+differentiate between past or present and future tasks.
+UNIFORMFG is a more subtle color that eliminates the color coding
+for scheduled tasks. RAINBOWFG is a prominent accent value that
+clearly distinguishes past, present, future tasks."
+ (pcase (modus-themes--key-cdr 'scheduled modus-themes-org-agenda)
+ ('uniform (list :foreground uniformfg))
+ ('rainbow (list :foreground rainbowfg))
+ (_ (list :foreground defaultfg))))
+
+(defun modus-themes--agenda-habit (default traffic simple &optional traffic-deuteran)
+ "Specify background values for `modus-themes-org-agenda' habits.
+DEFAULT is the original foregrounc color. TRAFFIC is to be used
+when the 'traffic-light' style is applied, while SIMPLE
+corresponds to the 'simplified style'. Optional TRAFFIC-DEUTERAN
+is an alternative to TRAFFIC, meant for deuteranopia."
+ (pcase (modus-themes--key-cdr 'habit modus-themes-org-agenda)
+ ('traffic-light (list :background traffic))
+ ('traffic-light-deuteranopia (list :background (or traffic-deuteran traffic)))
+ ('simplified (list :background simple))
+ (_ (list :background default))))
(defun modus-themes--org-block (bgblk fgdefault &optional fgblk)
"Conditionally set the background of Org blocks.
@@ -2715,15 +3419,6 @@ (defun modus-themes--org-block-delim (bgaccent fgaccent bg fg)
('rainbow (list :background bgaccent :foreground fgaccent))
(_ (list :background bg :foreground fg))))
-(defun modus-themes--org-habit (default &optional traffic simple)
- "Specify background values for `modus-themes-org-habit'.
-If no optional TRAFFIC argument is supplied, the DEFAULT is used
-instead. Same for SIMPLE."
- (pcase modus-themes-org-habit
- ('traffic-light (list :background (or traffic default)))
- ('simplified (list :background (or simple default)))
- (_ (list :background default))))
-
(defun modus-themes--mode-line-attrs
(fg bg fg-alt bg-alt fg-accent bg-accent border border-3d &optional alt-style border-width fg-distant)
"Color combinations for `modus-themes-mode-line'.
@@ -2743,51 +3438,60 @@ (defun modus-themes--mode-line-attrs
Optional FG-DISTANT should be close to the main background
values. It is intended to be used as a distant-foreground
property."
- (pcase modus-themes-mode-line
- ('3d
- `( :background ,bg-alt :foreground ,fg-alt
- :box ( :line-width ,(or border-width 1)
- :color ,border-3d
- :style ,(and alt-style 'released-button))))
- ('moody
- `( :background ,bg-alt :foreground ,fg-alt
- :underline ,border :overline ,border
- :distant-foreground ,fg-distant))
- ('borderless
- `(:background ,bg :foreground ,fg :box ,bg))
- ('borderless-3d
- `( :background ,bg :foreground ,fg
- :box ( :line-width ,(or border-width 1)
- :color ,bg
- :style ,(and alt-style 'released-button))))
- ('borderless-moody
- `( :background ,bg :foreground ,fg
- :underline ,bg :overline ,bg
- :distant-foreground ,fg-distant))
- ('accented
- `(:background ,bg-accent :foreground ,fg-accent :box ,border))
- ('accented-3d
- `( :background ,bg-accent :foreground ,fg-accent
- :box ( :line-width ,(or border-width 1)
- :color ,border-3d
- :style ,(and alt-style 'released-button))))
- ('accented-moody
- `( :background ,bg-accent :foreground ,fg-accent
- :underline ,border :overline ,border
- :distant-foreground ,fg-distant))
- ('borderless-accented
- `(:background ,bg-accent :foreground ,fg-accent :box ,bg-accent))
- ('borderless-accented-3d
- `( :background ,bg-accent :foreground ,fg-accent
- :box ( :line-width ,(or border-width 1)
- :color ,bg-accent
- :style ,(and alt-style 'released-button))))
- ('borderless-accented-moody
- `( :background ,bg-accent :foreground ,fg-accent
- :underline ,bg-accent :overline ,bg-accent
- :distant-foreground ,fg-distant))
- (_
- `(:background ,bg :foreground ,fg :box ,border))))
+ (let ((modus-themes-mode-line
+ (if (listp modus-themes-mode-line)
+ modus-themes-mode-line
+ ;; translation layer for legacy values
+ (alist-get modus-themes-mode-line
+ '((3d . (3d))
+ (moody . (moody))
+ (borderless . (borderless))
+ (borderless-3d . (borderless 3d))
+ (borderless-moody . (borderless moody))
+ (accented . (accented))
+ (accented-3d . (accented 3d))
+ (accented-moody . (accented moody))
+ (borderless-accented . (borderless accented))
+ (borderless-accented-3d . (borderless accented 3d))
+ (borderless-accented-moody . (borderless accented moody)))))))
+ (let ((base (cond ((memq 'accented modus-themes-mode-line)
+ (cons fg-accent bg-accent))
+ ((and (or (memq 'moody modus-themes-mode-line)
+ (memq '3d modus-themes-mode-line))
+ (not (memq 'borderless modus-themes-mode-line)))
+ (cons fg-alt bg-alt))
+ ((cons fg bg))))
+ (box (cond ((memq 'moody modus-themes-mode-line)
+ nil)
+ ((memq '3d modus-themes-mode-line)
+ (list :line-width (or border-width 1)
+ :color
+ (cond ((and (memq 'accented modus-themes-mode-line)
+ (memq 'borderless modus-themes-mode-line))
+ bg-accent)
+ ((memq 'borderless modus-themes-mode-line) bg)
+ (border-3d))
+ :style (and alt-style 'released-button)))
+ ((or (memq 'borderless modus-themes-mode-line)
+ (memq 'moody modus-themes-mode-line))
+ bg)
+ (border)))
+ (line (cond ((not (memq 'moody modus-themes-mode-line))
+ nil)
+ ((and (memq 'borderless modus-themes-mode-line)
+ (memq 'accented modus-themes-mode-line))
+ bg-accent)
+ ((memq 'borderless modus-themes-mode-line)
+ bg)
+ (border))))
+ (list :foreground (car base)
+ :background (cdr base)
+ :box box
+ :overline line
+ :underline line
+ :distant-foreground
+ (and (memq 'moody modus-themes-mode-line)
+ fg-distant)))))
(defun modus-themes--diff
(fg-only-bg fg-only-fg mainbg mainfg altbg altfg &optional deuteranbg deuteranfg bg-only-fg)
@@ -2867,30 +3571,85 @@ (defun modus-themes--extra-completions (subtleface intenseface altface &optional
('moderate (list :inherit (list subtleface bold)))
(_ (list :inherit (list intenseface bold)))))
-(defun modus-themes--link (fg fgfaint underline)
+(defun modus-themes--link (fg fgfaint underline bg bgneutral)
"Conditional application of link styles.
FG is the link's default color for its text and underline
property. FGFAINT is a desaturated color for the text and
-underline. UNDERLINE is a gray color only for the undeline."
- (pcase modus-themes-links
- ('faint (list :foreground fgfaint :underline t))
- ('neutral-underline (list :foreground fg :underline underline))
- ('faint-neutral-underline (list :foreground fgfaint :underline underline))
- ('no-underline (list :foreground fg :underline nil))
- ('underline-only (list :underline t))
- ('neutral-underline-only (list :underline underline))
- (_ (list :foreground fg :underline t))))
+underline. UNDERLINE is a gray color only for the undeline. BG
+is a background color and BGNEUTRAL is its fallback value."
+ (let ((modus-themes-links
+ (if (listp modus-themes-links)
+ modus-themes-links
+ ;; translation layer for legacy values
+ (pcase modus-themes-links
+ ('faint '(faint))
+ ('neutral-underline '(neutral-underline))
+ ('faint-neutral-underline '(neutral-underline faint))
+ ('no-underline '(no-underline))
+ ('underline-only '(no-color))
+ ('neutral-underline-only '(no-color neutral-underline))))))
+ (list :inherit
+ (cond
+ ((and (memq 'bold modus-themes-links)
+ (memq 'italic modus-themes-links))
+ 'bold-italic)
+ ((memq 'italic modus-themes-links)
+ 'italic)
+ ((memq 'bold modus-themes-links)
+ 'bold)
+ ('unspecified))
+ :background
+ (cond
+ ((and (memq 'no-color modus-themes-links)
+ (memq 'no-underline modus-themes-links))
+ bgneutral)
+ ((memq 'background modus-themes-links)
+ bg)
+ ('unspecified))
+ :foreground
+ (cond
+ ((memq 'no-color modus-themes-links)
+ 'unspecified)
+ ((memq 'faint modus-themes-links)
+ fgfaint)
+ (fg))
+ :underline
+ (cond
+ ((memq 'no-underline modus-themes-links)
+ 'unspecified)
+ ((memq 'neutral-underline modus-themes-links)
+ underline)
+ (t)))))
(defun modus-themes--link-color (fg fgfaint &optional neutralfg)
"Extends `modus-themes--link'.
FG is the main accented foreground. FGFAINT is also accented,
yet desaturated. Optional NEUTRALFG is a gray value."
- (pcase modus-themes-links
- ('faint (list :foreground fgfaint))
- ('faint-neutral-underline (list :foreground fgfaint))
- ('underline-only (list :underline t :foreground (or neutralfg 'unspecified)))
- ('neutral-underline-only (list :underline 'unspecified :foreground (or neutralfg 'unspecified)))
- (_ (list :foreground fg))))
+ (let ((modus-themes-links
+ (if (listp modus-themes-links)
+ modus-themes-links
+ ;; translation layer for legacy values
+ (pcase modus-themes-links
+ ('faint '(faint))
+ ('neutral-underline '(neutral-underline))
+ ('faint-neutral-underline '(neutral-underline faint))
+ ('no-underline '(no-underline))
+ ('underline-only '(no-color))
+ ('neutral-underline-only '(no-color neutral-underline))))))
+ (list :foreground
+ (cond
+ ((memq 'no-color modus-themes-links)
+ (or neutralfg 'unspecified))
+ ((memq 'faint modus-themes-links)
+ fgfaint)
+ (fg))
+ :underline
+ (cond
+ ((memq 'no-underline modus-themes-links)
+ 'unspecified)
+ ((memq 'neutral-underline modus-themes-links)
+ (or neutralfg 'unspecified))
+ (t)))))
(defun modus-themes--scale (amount)
"Scale heading by AMOUNT.
@@ -2898,39 +3657,96 @@ (defun modus-themes--scale (amount)
(when modus-themes-scale-headings
(list :height amount)))
-(defun modus-themes--region (bg fg bgsubtle bgaccent)
+(defun modus-themes--region (bg fg bgsubtle bgaccent bgaccentsubtle)
"Apply `modus-themes-region' styles.
BG and FG are the main values that are used by default. BGSUBTLE
is a subtle background value that can be combined with all colors
used to fontify text and code syntax. BGACCENT is a colored
-background that combines well with FG."
- (pcase modus-themes-region
- ('bg-only (list :background bgsubtle))
- ('bg-only-no-extend (list :background bgsubtle :extend nil))
- ('no-extend (list :background bg :foreground fg :extend nil))
- ('accent (list :background bgaccent :foreground fg))
- ('accent-no-extend (list :background bgaccent :foreground fg :extend nil))
- (_ (list :background bg :foreground fg))))
-
-(defun modus-themes--hl-line (bgdefault bgintense bgaccent bgaccentul lineneutral lineaccent)
+background that combines well with FG. BGACCENTSUBTLE can be
+combined with all colors used to fontify text."
+ (let ((modus-themes-region
+ (if (listp modus-themes-region)
+ modus-themes-region
+ ;; translation layer for legacy values
+ (pcase modus-themes-region
+ ('bg-only '(bg-only))
+ ('bg-only-no-extend '(bg-only no-extend))
+ ('accent '(accented))
+ ('accent-no-extend '(accented no-extend))
+ ('no-extend '(no-extend))))))
+ (list :background
+ (cond
+ ((and (memq 'accented modus-themes-region)
+ (memq 'bg-only modus-themes-region))
+ bgaccentsubtle)
+ ((memq 'accented modus-themes-region)
+ bgaccent)
+ ((memq 'bg-only modus-themes-region)
+ bgsubtle)
+ (bg))
+ :foreground
+ (cond
+ ((and (memq 'accented modus-themes-region)
+ (memq 'bg-only modus-themes-region))
+ 'unspecified)
+ ((memq 'bg-only modus-themes-region)
+ 'unspecified)
+ (fg))
+ :extend
+ (cond
+ ((memq 'no-extend modus-themes-region)
+ nil)
+ (t)))))
+
+(defun modus-themes--hl-line
+ (bgdefault bgintense bgaccent bgaccentsubtle lineneutral lineaccent lineneutralintense lineaccentintense)
"Apply `modus-themes-hl-line' styles.
BGDEFAULT is a subtle neutral background. BGINTENSE is like the
default, but more prominent. BGACCENT is a prominent accented
-background, while BGACCENTUL is more subtle and is meant to be
-used in tandem with an underline. LINENEUTRAL and LINEACCENT are
-a color values that can remain distinct against the buffer's
-possible backgrounds: the former is neutral, the latter is
-accented."
- (pcase modus-themes-hl-line
- ('intense-background (list :background bgintense))
- ('accented-background (list :background bgaccent))
- ('underline-neutral (list :background bgdefault :underline lineneutral))
- ('underline-accented (list :background bgaccentul :underline lineaccent))
- ('underline-only-neutral (list :background 'unspecified :underline lineneutral))
- ('underline-only-accented (list :background 'unspecified :underline lineaccent))
- (_ (list :background bgdefault))))
+background, while BGACCENTSUBTLE is more subtle. LINENEUTRAL and
+LINEACCENT are color values that can remain distinct against the
+buffer's possible backgrounds: the former is neutral, the latter
+is accented. LINENEUTRALINTENSE and LINEACCENTINTENSE are their
+more prominent alternatives."
+ (let ((modus-themes-hl-line
+ (if (listp modus-themes-hl-line)
+ modus-themes-hl-line
+ ;; translation layer for legacy values
+ (pcase modus-themes-hl-line
+ ('intense-background '(intense))
+ ('accented-background '(accented))
+ ('underline-neutral '(underline))
+ ('underline-accented '(underline accented))
+ ('underline-only-neutral '(underline)) ; only underline styles have been removed
+ ('underline-only-accented '(underline accented))))))
+ (list :background
+ (cond
+ ((and (memq 'intense modus-themes-hl-line)
+ (memq 'accented modus-themes-hl-line))
+ bgaccent)
+ ((memq 'accented modus-themes-hl-line)
+ bgaccentsubtle)
+ ((memq 'intense modus-themes-hl-line)
+ bgintense)
+ (bgdefault))
+ :underline
+ (cond
+ ((and (memq 'intense modus-themes-hl-line)
+ (memq 'accented modus-themes-hl-line)
+ (memq 'underline modus-themes-hl-line))
+ lineaccentintense)
+ ((and (memq 'accented modus-themes-hl-line)
+ (memq 'underline modus-themes-hl-line))
+ lineaccent)
+ ((and (memq 'intense modus-themes-hl-line)
+ (memq 'underline modus-themes-hl-line))
+ lineneutralintense)
+ ((or (memq 'no-background modus-themes-hl-line)
+ (memq 'underline modus-themes-hl-line))
+ lineneutral)
+ ('unspecified)))))
(defun modus-themes--mail-cite (mainfg subtlefg)
"Combinations for `modus-themes-mail-citations'.
@@ -3226,32 +4042,40 @@ ;;;;; heading levels
;; styles for regular headings used in Org, Markdown, Info, etc.
`(modus-themes-heading-1
((,class ,@(modus-themes--heading
- 1 fg-main magenta-alt-other magenta-nuanced-bg bg-region)
+ 1 fg-main magenta-alt-other
+ magenta-nuanced-bg bg-alt bg-region)
,@(modus-themes--scale modus-themes-scale-4))))
`(modus-themes-heading-2
((,class ,@(modus-themes--heading
- 2 fg-special-warm magenta-alt red-nuanced-bg bg-region)
+ 2 fg-special-warm magenta-alt
+ red-nuanced-bg bg-alt bg-region)
,@(modus-themes--scale modus-themes-scale-3))))
`(modus-themes-heading-3
((,class ,@(modus-themes--heading
- 3 fg-special-cold blue blue-nuanced-bg bg-region)
+ 3 fg-special-cold blue
+ blue-nuanced-bg bg-alt bg-region)
,@(modus-themes--scale modus-themes-scale-2))))
`(modus-themes-heading-4
((,class ,@(modus-themes--heading
- 4 fg-special-mild cyan cyan-nuanced-bg bg-region)
+ 4 fg-special-mild cyan
+ cyan-nuanced-bg bg-alt bg-region)
,@(modus-themes--scale modus-themes-scale-1))))
`(modus-themes-heading-5
((,class ,@(modus-themes--heading
- 5 fg-special-calm green-alt-other green-nuanced-bg bg-region))))
+ 5 fg-special-calm green-alt-other
+ green-nuanced-bg bg-alt bg-region))))
`(modus-themes-heading-6
((,class ,@(modus-themes--heading
- 6 yellow-nuanced-fg yellow-alt-other yellow-nuanced-bg bg-region))))
+ 6 yellow-nuanced-fg yellow-alt-other
+ yellow-nuanced-bg bg-alt bg-region))))
`(modus-themes-heading-7
((,class ,@(modus-themes--heading
- 7 red-nuanced-fg red-alt red-nuanced-bg bg-region))))
+ 7 red-nuanced-fg red-alt
+ red-nuanced-bg bg-alt bg-region))))
`(modus-themes-heading-8
((,class ,@(modus-themes--heading
- 8 magenta-nuanced-fg magenta bg-alt bg-region))))
+ 8 magenta-nuanced-fg magenta
+ bg-alt bg-alt bg-region))))
;;;;; graph-specific faces
`(modus-themes-graph-red-0 ((,class :background ,red-graph-0-bg)))
`(modus-themes-graph-red-1 ((,class :background ,red-graph-1-bg)))
@@ -3267,25 +4091,27 @@ ;;;;; graph-specific faces
`(modus-themes-graph-cyan-1 ((,class :background ,cyan-graph-1-bg)))
;;;;; language checkers
`(modus-themes-lang-error ((,class ,@(modus-themes--lang-check
- fg-lang-underline-error
- fg-lang-error
- red red-nuanced-bg))))
+ fg-lang-underline-error fg-lang-error
+ red red-refine-fg red-nuanced-bg red-refine-bg))))
`(modus-themes-lang-note ((,class ,@(modus-themes--lang-check
- fg-lang-underline-note
- fg-lang-note
- blue-alt blue-nuanced-bg))))
+ fg-lang-underline-note fg-lang-note
+ blue-alt blue-refine-fg blue-nuanced-bg blue-refine-bg))))
`(modus-themes-lang-warning ((,class ,@(modus-themes--lang-check
- fg-lang-underline-warning
- fg-lang-warning
- yellow yellow-nuanced-bg))))
+ fg-lang-underline-warning fg-lang-warning
+ yellow yellow-refine-fg yellow-nuanced-bg yellow-refine-bg))))
;;;;; other custom faces
`(modus-themes-bold ((,class ,@(modus-themes--bold-weight))))
`(modus-themes-hl-line ((,class ,@(modus-themes--hl-line
bg-hl-line bg-hl-line-intense
bg-hl-line-intense-accent blue-nuanced-bg
- bg-region blue-intense-bg)
+ bg-region blue-intense-bg
+ fg-alt cyan-intense)
:extend t)))
`(modus-themes-key-binding ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(modus-themes-prompt ((,class ,@(modus-themes--prompt
+ cyan-alt-other blue-alt-other fg-alt
+ cyan-nuanced-bg blue-refine-bg fg-main
+ bg-alt bg-active))))
`(modus-themes-reset-hard ((,class :inherit (fixed-pitch modus-themes-reset-soft))))
`(modus-themes-reset-soft ((,class :background ,bg-main :foreground ,fg-main
:weight normal :slant normal :strike-through nil
@@ -3301,6 +4127,7 @@ ;;;;; other custom faces
green-active))))
`(modus-themes-slant ((,class :inherit italic :slant ,@(modus-themes--slant))))
`(modus-themes-variable-pitch ((,class ,@(modus-themes--variable-pitch))))
+ `(modus-themes-fixed-pitch ((,class ,@(modus-themes--fixed-pitch))))
;;;; standard faces
;;;;; absolute essentials
`(default ((,class :background ,bg-main :foreground ,fg-main)))
@@ -3313,11 +4140,7 @@ ;;;;; basic and/or ungrouped styles
`(bold-italic ((,class :inherit (bold italic))))
`(buffer-menu-buffer ((,class :inherit bold)))
`(comint-highlight-input ((,class :inherit bold)))
- `(comint-highlight-prompt ((,class :inherit modus-themes-bold
- ,@(modus-themes--prompt
- cyan
- blue-nuanced-bg blue-alt
- blue-refine-bg fg-main))))
+ `(comint-highlight-prompt ((,class :inherit modus-themes-prompt)))
`(error ((,class :inherit bold :foreground ,red)))
`(escape-glyph ((,class :foreground ,fg-escape-char-construct)))
`(file-name-shadow ((,class :foreground ,fg-unfocused)))
@@ -3332,15 +4155,14 @@ ;;;;; basic and/or ungrouped styles
`(italic ((,class :slant italic)))
`(nobreak-hyphen ((,class :foreground ,fg-escape-char-construct)))
`(nobreak-space ((,class :foreground ,fg-escape-char-construct :underline t)))
- `(minibuffer-prompt ((,class ,@(modus-themes--prompt
- cyan-alt-other
- cyan-nuanced-bg cyan
- cyan-refine-bg fg-main))))
+ `(minibuffer-prompt ((,class :inherit modus-themes-prompt)))
`(mm-command-output ((,class :foreground ,red-alt-other)))
`(mm-uu-extract ((,class :background ,bg-dim :foreground ,fg-special-mild)))
- `(next-error ((,class :inherit modus-themes-subtle-red)))
+ `(next-error ((,class :inherit modus-themes-subtle-red :extend t)))
`(rectangle-preview ((,class :inherit modus-themes-special-mild)))
- `(region ((,class ,@(modus-themes--region bg-region fg-main bg-hl-alt-intense bg-region-accent))))
+ `(region ((,class ,@(modus-themes--region bg-region fg-main
+ bg-hl-alt-intense bg-region-accent
+ bg-region-accent-subtle))))
`(secondary-selection ((,class :inherit modus-themes-special-cold)))
`(shadow ((,class :foreground ,fg-alt)))
`(success ((,class :inherit bold :foreground ,@(modus-themes--success-deuteran blue green))))
@@ -3348,7 +4170,8 @@ ;;;;; basic and/or ungrouped styles
`(warning ((,class :inherit bold :foreground ,yellow)))
;;;;; buttons, links, widgets
`(button ((,class ,@(modus-themes--link
- blue-alt-other blue-alt-other-faint bg-region))))
+ blue-alt-other blue-alt-other-faint
+ bg-region blue-nuanced-bg bg-alt))))
`(link ((,class :inherit button)))
`(link-visited ((,class :inherit button
,@(modus-themes--link-color
@@ -3358,7 +4181,7 @@ ;;;;; buttons, links, widgets
`(widget-button-pressed ((,class :inherit widget-button :foreground ,magenta)))
`(widget-documentation ((,class :foreground ,green)))
`(widget-field ((,class :background ,bg-alt :foreground ,fg-dim)))
- `(widget-inactive ((,class :background ,bg-inactive :foreground ,fg-inactive)))
+ `(widget-inactive ((,class :foreground ,fg-alt)))
`(widget-single-line-field ((,class :inherit widget-field)))
;;;;; ag
`(ag-hit-face ((,class :foreground ,fg-special-cold)))
@@ -3419,21 +4242,24 @@ ;;;;; anzu
`(anzu-replace-highlight ((,class :inherit modus-themes-refine-yellow :underline t)))
`(anzu-replace-to ((,class :inherit (modus-themes-search-success bold))))
;;;;; apropos
+ `(apropos-button ((,class :inherit button
+ ,@(modus-themes--link-color
+ magenta-alt-other magenta-alt-other-faint))))
`(apropos-function-button ((,class :inherit button
,@(modus-themes--link-color
- magenta-alt-other magenta-alt-other-faint))))
+ magenta magenta-faint))))
`(apropos-keybinding ((,class :inherit modus-themes-key-binding)))
`(apropos-misc-button ((,class :inherit button
,@(modus-themes--link-color
cyan-alt-other cyan-alt-other-faint))))
`(apropos-property ((,class :inherit modus-themes-bold :foreground ,magenta-alt)))
- `(apropos-symbol ((,class :inherit modus-themes-bold :foreground ,magenta)))
+ `(apropos-symbol ((,class :inherit modus-themes-pseudo-header)))
`(apropos-user-option-button ((,class :inherit button
,@(modus-themes--link-color
- green-alt-other green-alt-other-faint))))
+ cyan cyan-faint))))
`(apropos-variable-button ((,class :inherit button
,@(modus-themes--link-color
- blue blue-faint))))
+ blue-alt blue-alt-faint))))
;;;;; apt-sources-list
`(apt-sources-list-components ((,class :foreground ,cyan)))
`(apt-sources-list-options ((,class :foreground ,yellow)))
@@ -3546,7 +4372,7 @@ ;;;;; calendar and diary
`(calendar-month-header ((,class :inherit modus-themes-pseudo-header)))
`(calendar-today ((,class :inherit bold :underline t)))
`(calendar-weekday-header ((,class :foreground ,fg-unfocused)))
- `(calendar-weekend-header ((,class :foreground ,fg-unfocused)))
+ `(calendar-weekend-header ((,class :foreground ,red-faint)))
`(diary ((,class :background ,blue-nuanced-bg :foreground ,blue-alt-other)))
`(diary-anniversary ((,class :foreground ,red-alt-other)))
`(diary-time ((,class :foreground ,cyan)))
@@ -3566,7 +4392,7 @@ ;;;;; calfw
`(cfw:face-sunday ((,class :inherit bold :foreground ,cyan-alt-other)))
`(cfw:face-title ((,class :inherit modus-themes-variable-pitch
:foreground ,fg-special-cold
- ,@(modus-themes--scale modus-themes-scale-5))))
+ ,@(modus-themes--scale modus-themes-scale-title))))
`(cfw:face-today ((,class :background ,bg-inactive)))
`(cfw:face-today-title ((,class :background ,bg-active)))
`(cfw:face-toolbar ((,class :background ,bg-alt :foreground ,bg-alt)))
@@ -3618,7 +4444,7 @@ ;;;;; cider
`(cider-instrumented-face ((,class :box (:line-width -1 :color ,red :style nil) :background ,bg-dim)))
`(cider-reader-conditional-face ((,class :inherit italic :foreground ,fg-special-warm)))
`(cider-repl-input-face ((,class :inherit bold)))
- `(cider-repl-prompt-face ((,class :inherit comint-highlight-prompt)))
+ `(cider-repl-prompt-face ((,class :inherit modus-themes-prompt)))
`(cider-repl-stderr-face ((,class :inherit bold :foreground ,red)))
`(cider-repl-stdout-face ((,class :foreground ,blue)))
`(cider-result-overlay-face ((,class :box (:line-width -1 :color ,blue :style nil) :background ,bg-dim)))
@@ -3642,7 +4468,7 @@ ;;;;; cider
;;;;; circe (and lui)
`(circe-fool-face ((,class :inherit shadow)))
`(circe-highlight-nick-face ((,class :inherit bold :foreground ,blue)))
- `(circe-prompt-face ((,class :inherit comint-highlight-prompt)))
+ `(circe-prompt-face ((,class :inherit modus-themes-prompt)))
`(circe-server-face ((,class :foreground ,fg-unfocused)))
`(lui-button-face ((,class :inherit button)))
`(lui-highlight-face ((,class :foreground ,magenta-alt)))
@@ -3755,6 +4581,9 @@ ;;;;; cperl-mode
`(cperl-nonoverridable-face ((,class :foreground unspecified)))
`(cperl-array-face ((,class :inherit font-lock-keyword-face)))
`(cperl-hash-face ((,class :inherit font-lock-variable-name-face)))
+;;;;; css-mode
+ `(css-property ((,class :inherit font-lock-type-face)))
+ `(css-selector ((,class :inherit font-lock-keyword-face)))
;;;;; csv-mode
`(csv-separator-face ((,class :foreground ,red-intense)))
;;;;; ctrlf
@@ -3851,7 +4680,7 @@ ;;;;; diff-hl
;;;;; diff-mode
`(diff-added ((,class :inherit modus-themes-diff-added)))
`(diff-changed ((,class :inherit modus-themes-diff-changed :extend t)))
- `(diff-context ((,class :foreground ,fg-alt)))
+ `(diff-context ((,class ,@(unless (eq modus-themes-diffs 'bg-only) (list :foreground fg-unfocused)))))
`(diff-error ((,class :inherit modus-themes-intense-red)))
`(diff-file-header ((,class :inherit (bold diff-header))))
`(diff-function ((,class :inherit modus-themes-diff-heading)))
@@ -4113,8 +4942,10 @@ ;;;;; elfeed-score
;;;;; embark
`(embark-keybinding ((,class :inherit modus-themes-key-binding)))
;;;;; emms
- `(emms-playlist-track-face ((,class :foreground ,blue)))
- `(emms-playlist-selected-face ((,class :inherit bold :foreground ,magenta)))
+ `(emms-playlist-track-face ((,class :foreground ,blue-alt)))
+ `(emms-playlist-selected-face ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(emms-metaplaylist-mode-current-face ((,class :inherit emms-playlist-selected-face)))
+ `(emms-metaplaylist-mode-face ((,class :foreground ,cyan)))
;;;;; enh-ruby-mode (enhanced-ruby-mode)
`(enh-ruby-heredoc-delimiter-face ((,class :inherit font-lock-constant-face)))
`(enh-ruby-op-face ((,class :foreground ,fg-main)))
@@ -4162,7 +4993,7 @@ ;;;;; erc
`(erc-nick-prefix-face ((,class :inherit erc-nick-default-face)))
`(erc-notice-face ((,class :foreground ,fg-unfocused)))
`(erc-pal-face ((,class :inherit bold :foreground ,red-alt)))
- `(erc-prompt-face ((,class :inherit comint-highlight-prompt)))
+ `(erc-prompt-face ((,class :inherit modus-themes-prompt)))
`(erc-timestamp-face ((,class :foreground ,blue-nuanced-fg)))
`(erc-underline-face ((,class :underline t)))
`(bg:erc-color-face0 ((,class :background "white")))
@@ -4215,7 +5046,7 @@ ;;;;; eshell
`(eshell-ls-special ((,class :foreground ,magenta)))
`(eshell-ls-symlink ((,class :foreground ,cyan)))
`(eshell-ls-unreadable ((,class :background ,bg-inactive :foreground ,fg-inactive)))
- `(eshell-prompt ((,class :inherit comint-highlight-prompt)))
+ `(eshell-prompt ((,class :inherit modus-themes-prompt)))
;;;;; eshell-fringe-status
`(eshell-fringe-status-failure ((,class :inherit error)))
`(eshell-fringe-status-success ((,class :inherit success)))
@@ -4363,45 +5194,56 @@ ;;;;; fold-this
;;;;; font-lock
`(font-lock-builtin-face ((,class :inherit modus-themes-bold
,@(modus-themes--syntax-extra
- magenta-alt magenta-alt-faint blue-alt))))
+ magenta-alt magenta-alt-faint
+ magenta magenta-faint))))
`(font-lock-comment-delimiter-face ((,class :inherit font-lock-comment-face)))
`(font-lock-comment-face ((,class :inherit modus-themes-slant
,@(modus-themes--syntax-comment
- fg-alt fg-comment-yellow))))
+ fg-alt fg-comment-yellow yellow-alt-other-faint))))
`(font-lock-constant-face ((,class ,@(modus-themes--syntax-extra
- blue-alt-other blue-alt-other-faint magenta-alt-other))))
+ blue-alt-other blue-alt-other-faint
+ magenta-alt-other magenta-alt-other-faint))))
`(font-lock-doc-face ((,class :inherit modus-themes-slant
- ,@(modus-themes--syntax-docstring
- fg-docstring green-alt-other-faint
- green-alt-other-faint magenta-nuanced-fg))))
+ ,@(modus-themes--syntax-string
+ fg-docstring fg-special-cold
+ fg-special-mild magenta-nuanced-fg
+ fg-special-mild magenta-nuanced-fg))))
`(font-lock-function-name-face ((,class ,@(modus-themes--syntax-extra
- magenta magenta-faint magenta-alt))))
+ magenta magenta-faint
+ magenta-alt magenta-alt-faint))))
`(font-lock-keyword-face ((,class :inherit modus-themes-bold
,@(modus-themes--syntax-extra
- magenta-alt-other magenta-alt-other-faint cyan-alt-other))))
+ magenta-alt-other magenta-alt-other-faint
+ cyan cyan-faint))))
`(font-lock-negation-char-face ((,class :inherit modus-themes-bold
,@(modus-themes--syntax-foreground
yellow yellow-faint))))
- `(font-lock-preprocessor-face ((,class ,@(modus-themes--syntax-foreground
- red-alt-other red-alt-other-faint))))
+ `(font-lock-preprocessor-face ((,class ,@(modus-themes--syntax-extra
+ red-alt-other red-alt-other-faint
+ blue-alt blue-alt-faint))))
`(font-lock-regexp-grouping-backslash ((,class :inherit bold
,@(modus-themes--syntax-string
fg-escape-char-backslash yellow-alt-faint
- magenta-alt-other blue-alt))))
+ yellow magenta-alt
+ yellow-faint red-faint))))
`(font-lock-regexp-grouping-construct ((,class :inherit bold
,@(modus-themes--syntax-string
fg-escape-char-construct red-alt-other-faint
- red magenta-alt))))
+ blue blue-alt-other
+ blue-faint blue-alt-other-faint))))
`(font-lock-string-face ((,class ,@(modus-themes--syntax-string
- blue-alt blue-alt-faint green green-alt))))
+ blue-alt blue-alt-faint
+ green red
+ green-faint red-faint))))
`(font-lock-type-face ((,class :inherit modus-themes-bold
- ,@(modus-themes--syntax-extra
- cyan-alt-other cyan-alt-faint cyan-alt))))
+ ,@(modus-themes--syntax-foreground
+ cyan-alt-other cyan-alt-faint))))
`(font-lock-variable-name-face ((,class ,@(modus-themes--syntax-extra
- cyan cyan-faint blue-alt-faint))))
+ cyan cyan-faint
+ blue-alt-other blue-alt-other-faint))))
`(font-lock-warning-face ((,class :inherit modus-themes-bold
- ,@(modus-themes--syntax-foreground
- yellow-active yellow-alt-faint))))
+ ,@(modus-themes--syntax-comment
+ yellow-active red-active red-faint yellow-faint))))
;;;;; forge
`(forge-post-author ((,class :inherit bold :foreground ,fg-main)))
`(forge-post-date ((,class :foreground ,fg-special-cold)))
@@ -4439,7 +5281,7 @@ ;;;;; geiser
`(geiser-font-lock-image-button ((,class :inherit button :foreground ,green-alt)))
`(geiser-font-lock-repl-input ((,class :inherit bold)))
`(geiser-font-lock-repl-output ((,class :inherit font-lock-keyword-face)))
- `(geiser-font-lock-repl-prompt ((,class :inherit minibuffer-prompt)))
+ `(geiser-font-lock-repl-prompt ((,class :inherit modus-themes-prompt)))
`(geiser-font-lock-xref-header ((,class :inherit bold)))
`(geiser-font-lock-xref-link ((,class :inherit button)))
;;;;; git-commit
@@ -4580,7 +5422,13 @@ ;;;;; gnus
`(gnus-summary-normal-ticked ((,class :foreground ,red-alt-other)))
`(gnus-summary-normal-undownloaded ((,class :foreground ,yellow)))
`(gnus-summary-normal-unread ((,class :foreground ,fg-main)))
- `(gnus-summary-selected ((,class :inherit modus-themes-subtle-blue :extend t)))
+ `(gnus-summary-selected ((,class :inherit highlight :extend t)))
+;;;;; gotest
+ `(go-test--ok-face ((,class :inherit success)))
+ `(go-test--error-face ((,class :inherit error)))
+ `(go-test--warning-face ((,class :inherit warning)))
+ `(go-test--pointer-face ((,class :foreground ,magenta-alt-other)))
+ `(go-test--standard-face ((,class :foreground ,fg-special-cold)))
;;;;; golden-ratio-scroll-screen
`(golden-ratio-scroll-highlight-line-face ((,class :background ,cyan-subtle-bg :foreground ,fg-main)))
;;;;; helm
@@ -4681,7 +5529,7 @@ ;;;;; helm
'modus-themes-subtle-cyan
'modus-themes-nuanced-cyan
cyan-alt-other))))
- `(helm-minibuffer-prompt ((,class :inherit minibuffer-prompt)))
+ `(helm-minibuffer-prompt ((,class :inherit modus-themes-prompt)))
`(helm-moccur-buffer ((,class :inherit button
,@(modus-themes--link-color
cyan-alt-other cyan-alt-other-faint))))
@@ -4748,7 +5596,7 @@ ;;;;; highlight region or ad-hoc regexp
`(hi-red-b ((,class :inherit bold :background ,red-intense-bg :foreground ,fg-main)))
`(hi-salmon ((,class :background ,red-subtle-bg :foreground ,fg-main)))
`(hi-yellow ((,class :background ,yellow-subtle-bg :foreground ,fg-main)))
- `(highlight ((,class :inherit modus-themes-subtle-blue)))
+ `(highlight ((,class :background ,blue-subtle-bg :foreground ,fg-main)))
`(highlight-changes ((,class :foreground ,red-alt :underline nil)))
`(highlight-changes-delete ((,class :background ,red-nuanced-bg
:foreground ,red :underline t)))
@@ -4791,11 +5639,11 @@ ;;;;; hl-fill-column
;;;;; hl-todo
`(hl-todo ((,class :inherit (bold modus-themes-slant) :foreground ,red-alt-other)))
;;;;; hydra
- `(hydra-face-amaranth ((,class :inherit bold :foreground ,yellow)))
- `(hydra-face-blue ((,class :inherit bold :foreground ,blue-alt)))
- `(hydra-face-pink ((,class :inherit bold :foreground ,magenta-alt)))
- `(hydra-face-red ((,class :inherit bold :foreground ,red)))
- `(hydra-face-teal ((,class :inherit bold :foreground ,cyan)))
+ `(hydra-face-amaranth ((,class :inherit bold :foreground ,yellow-alt)))
+ `(hydra-face-blue ((,class :inherit bold :foreground ,blue)))
+ `(hydra-face-pink ((,class :inherit bold :foreground ,magenta-alt-faint)))
+ `(hydra-face-red ((,class :inherit bold :foreground ,red-faint)))
+ `(hydra-face-teal ((,class :inherit bold :foreground ,cyan-alt-other)))
;;;;; hyperlist
`(hyperlist-condition ((,class :foreground ,green)))
`(hyperlist-hashtag ((,class :foreground ,yellow)))
@@ -4847,10 +5695,10 @@ ;;;;; indium
`(indium-keyword-face ((,class :inherit font-lock-keyword-face)))
`(indium-litable-face ((,class :inherit modus-themes-slant :foreground ,fg-special-warm)))
`(indium-repl-error-face ((,class :inherit error)))
- `(indium-repl-prompt-face ((,class :inherit comint-highlight-prompt)))
+ `(indium-repl-prompt-face ((,class :inherit modus-themes-prompt)))
`(indium-repl-stdout-face ((,class :foreground ,fg-main)))
;;;;; info
- `(Info-quoted ((,class ,@(modus-themes--mixed-fonts) ; the capitalization is canonical
+ `(Info-quoted ((,class :inherit modus-themes-fixed-pitch ; the capitalization is canonical
:background ,bg-alt :foreground ,fg-special-calm)))
`(info-header-node ((,class :inherit bold :foreground ,fg-alt)))
`(info-header-xref ((,class :foreground ,blue-active)))
@@ -5016,6 +5864,17 @@ ;;;;; kaocha-runner
;;;;; keycast
`(keycast-command ((,class :inherit bold :foreground ,blue-active)))
`(keycast-key ((,class :background ,blue-active :foreground ,bg-main)))
+;;;;; ledger-mode
+ `(ledger-font-auto-xact-face ((,class :foreground ,magenta)))
+ `(ledger-font-account-name-face ((,class :foreground ,fg-special-cold)))
+ `(ledger-font-directive-face ((,class :foreground ,magenta-alt-other)))
+ `(ledger-font-posting-date-face ((,class :inherit bold :foreground ,fg-main)))
+ `(ledger-font-periodic-xact-face ((,class :foreground ,cyan-alt-other)))
+ `(ledger-font-posting-amount-face ((,class :foreground ,fg-special-mild)))
+ `(ledger-font-payee-cleared-face ((,class :foreground ,blue-alt)))
+ `(ledger-font-payee-pending-face ((,class :foreground ,yellow)))
+ `(ledger-font-payee-uncleared-face ((,class :foreground ,red-alt-other)))
+ `(ledger-font-xact-highlight-face ((,class :background ,bg-hl-alt)))
;;;;; line numbers (display-line-numbers-mode and global variant)
`(line-number
((,class :inherit default
@@ -5119,7 +5978,7 @@ ;;;;; magit
bg-diff-changed fg-diff-changed
yellow-nuanced-bg fg-diff-changed))))
`(magit-diff-base-highlight ((,class :inherit modus-themes-diff-focus-changed)))
- `(magit-diff-context ((,class :foreground ,fg-unfocused)))
+ `(magit-diff-context ((,class ,@(unless (eq modus-themes-diffs 'bg-only) (list :foreground fg-unfocused)))))
`(magit-diff-context-highlight ((,class ,@(modus-themes--diff
bg-dim fg-dim
bg-inactive fg-inactive
@@ -5239,7 +6098,7 @@ ;;;;; marginalia
;;;;; markdown-mode
`(markdown-blockquote-face ((,class :inherit modus-themes-slant :foreground ,fg-special-cold)))
`(markdown-bold-face ((,class :inherit bold)))
- `(markdown-code-face ((,class ,@(modus-themes--mixed-fonts) :background ,bg-dim :extend t)))
+ `(markdown-code-face ((,class :inherit modus-themes-fixed-pitch :background ,bg-dim :extend t)))
`(markdown-comment-face ((,class :inherit font-lock-comment-face)))
`(markdown-footnote-marker-face ((,class :inherit bold :foreground ,cyan-alt)))
`(markdown-footnote-text-face ((,class :inherit modus-themes-slant :foreground ,fg-main)))
@@ -5254,22 +6113,22 @@ ;;;;; markdown-mode
`(markdown-header-face-6 ((,class :inherit modus-themes-heading-6)))
`(markdown-header-rule-face ((,class :inherit bold :foreground ,fg-special-warm)))
`(markdown-hr-face ((,class :inherit bold :foreground ,fg-special-warm)))
- `(markdown-html-attr-name-face ((,class ,@(modus-themes--mixed-fonts)
+ `(markdown-html-attr-name-face ((,class :inherit modus-themes-fixed-pitch
:foreground ,cyan)))
- `(markdown-html-attr-value-face ((,class ,@(modus-themes--mixed-fonts)
+ `(markdown-html-attr-value-face ((,class :inherit modus-themes-fixed-pitch
:foreground ,blue)))
- `(markdown-html-entity-face ((,class ,@(modus-themes--mixed-fonts)
+ `(markdown-html-entity-face ((,class :inherit modus-themes-fixed-pitch
:foreground ,cyan)))
- `(markdown-html-tag-delimiter-face ((,class ,@(modus-themes--mixed-fonts)
+ `(markdown-html-tag-delimiter-face ((,class :inherit modus-themes-fixed-pitch
:foreground ,fg-special-mild)))
- `(markdown-html-tag-name-face ((,class ,@(modus-themes--mixed-fonts)
+ `(markdown-html-tag-name-face ((,class :inherit modus-themes-fixed-pitch
:foreground ,magenta-alt)))
- `(markdown-inline-code-face ((,class ,@(modus-themes--mixed-fonts)
+ `(markdown-inline-code-face ((,class :inherit modus-themes-fixed-pitch
:background ,bg-alt :foreground ,fg-special-calm)))
`(markdown-italic-face ((,class :inherit italic :foreground ,fg-special-cold)))
- `(markdown-language-info-face ((,class ,@(modus-themes--mixed-fonts)
+ `(markdown-language-info-face ((,class :inherit modus-themes-fixed-pitch
:foreground ,fg-special-cold)))
- `(markdown-language-keyword-face ((,class ,@(modus-themes--mixed-fonts)
+ `(markdown-language-keyword-face ((,class :inherit modus-themes-fixed-pitch
:background ,bg-alt
:foreground ,fg-alt)))
`(markdown-line-break-face ((,class :inherit modus-themes-refine-cyan :underline t)))
@@ -5285,46 +6144,53 @@ ;;;;; markdown-mode
`(markdown-pre-face ((,class :inherit markdown-code-face :foreground ,fg-special-mild)))
`(markdown-reference-face ((,class :inherit markdown-markup-face)))
`(markdown-strike-through-face ((,class :strike-through t)))
- `(markdown-table-face ((,class ,@(modus-themes--mixed-fonts)
+ `(markdown-table-face ((,class :inherit modus-themes-fixed-pitch
:foreground ,fg-special-cold)))
`(markdown-url-face ((,class :foreground ,blue-alt)))
;;;;; markup-faces (`adoc-mode')
- `(markup-anchor-face ((,class :foreground ,fg-inactive)))
- `(markup-attribute-face ((,class :inherit italic :foreground ,fg-inactive)))
- `(markup-big-face ((,class :height 1.3 :foreground ,blue-nuanced-fg)))
+ `(markup-attribute-face ((,class :inherit (italic markup-meta-face))))
`(markup-bold-face ((,class :inherit bold :foreground ,red-nuanced-fg)))
- `(markup-code-face ((,class :inherit fixed-pitch :foreground ,magenta)))
- `(markup-command-face ((,class :foreground ,fg-inactive)))
+ `(markup-code-face ((,class :foreground ,magenta)))
`(markup-comment-face ((,class :inherit font-lock-comment-face)))
- `(markup-complex-replacement-face ((,class :box (:line-width 2 :color nil :style released-button)
- :inherit modus-themes-refine-magenta)))
- `(markup-emphasis-face ((,class :inherit italic :foreground ,fg-special-cold)))
- `(markup-error-face ((,class :inherit bold :foreground ,red)))
+ `(markup-complex-replacement-face ((,class :background ,magenta-nuanced-bg
+ :foreground ,magenta-alt-other
+ :underline ,magenta-alt-other)))
+ `(markup-emphasis-face ((,class :inherit markup-italic-face)))
+ `(markup-error-face ((,class :inherit error)))
`(markup-gen-face ((,class :foreground ,magenta-alt)))
- `(markup-internal-reference-face ((,class :inherit button :foreground ,fg-alt)))
+ `(markup-internal-reference-face ((,class :foreground ,fg-alt :underline ,bg-region)))
`(markup-italic-face ((,class :inherit italic :foreground ,fg-special-cold)))
- `(markup-list-face ((,class :inherit modus-themes-special-calm)))
- `(markup-meta-face ((,class :foreground ,fg-inactive)))
- `(markup-meta-hide-face ((,class :inherit shadow)))
- `(markup-passthrough-face ((,class :inherit fixed-pitch :foreground ,cyan)))
- `(markup-preprocessor-face ((,class :foreground ,red-alt-other)))
- `(markup-replacement-face ((,class :foreground ,yellow-alt-other)))
- `(markup-secondary-text-face ((,class :height 0.8 :foreground ,magenta-nuanced-fg)))
- `(markup-small-face ((,class :height 0.8 :foreground ,fg-main)))
- `(markup-strong-face ((,class :inherit bold :foreground ,red-nuanced-fg)))
- `(markup-subscript-face ((,class :height 0.8 :foreground ,fg-special-cold)))
- `(markup-superscript-face ((,class :height 0.8 :foreground ,fg-special-cold)))
- `(markup-table-cell-face ((,class :inherit modus-themes-special-cold)))
- `(markup-table-face ((,class :inherit modus-themes-subtle-cyan)))
- `(markup-table-row-face ((,class :inherit modus-themes-subtle-cyan)))
- `(markup-title-0-face ((,class :height 3.0 :foreground ,blue-nuanced-fg)))
- `(markup-title-1-face ((,class :height 2.4 :foreground ,blue-nuanced-fg)))
- `(markup-title-2-face ((,class :height 1.8 :foreground ,blue-nuanced-fg)))
- `(markup-title-3-face ((,class :height 1.4 :foreground ,blue-nuanced-fg)))
- `(markup-title-4-face ((,class :height 1.2 :foreground ,blue-nuanced-fg)))
- `(markup-title-5-face ((,class :height 1.2 :foreground ,blue-nuanced-fg :underline t)))
- `(markup-value-face ((,class :foreground ,fg-inactive)))
- `(markup-verbatim-face ((,class :inherit modus-themes-special-mild)))
+ `(markup-list-face ((,class :inherit modus-themes-special-cold)))
+ `(markup-meta-face ((,class :inherit shadow)))
+ `(markup-meta-hide-face ((,class :foreground "gray50")))
+ `(markup-reference-face ((,class :foreground ,blue-alt :underline ,bg-region)))
+ `(markup-replacement-face ((,class :inherit fixed-pitch :foreground ,red-alt)))
+ `(markup-secondary-text-face ((,class :height 0.9 :foreground ,cyan-alt-other)))
+ `(markup-small-face ((,class :inherit markup-gen-face :height 0.9)))
+ `(markup-strong-face ((,class :inherit markup-bold-face)))
+ `(markup-subscript-face ((,class :height 0.9 :foreground ,magenta-alt-other)))
+ `(markup-superscript-face ((,class :height 0.9 :foreground ,magenta-alt-other)))
+ `(markup-table-cell-face ((,class :inherit modus-themes-subtle-neutral)))
+ `(markup-table-face ((,class :inherit modus-themes-subtle-neutral)))
+ `(markup-table-row-face ((,class :inherit modus-themes-special-cold)))
+ `(markup-title-0-face ((,class :inherit (bold modus-themes-variable-pitch)
+ :foreground ,blue-nuanced-fg
+ ,@(modus-themes--scale modus-themes-scale-title))))
+ `(markup-title-1-face ((,class :inherit (bold modus-themes-variable-pitch)
+ :foreground ,blue-nuanced-fg
+ ,@(modus-themes--scale modus-themes-scale-1))))
+ `(markup-title-2-face ((,class :inherit (bold modus-themes-variable-pitch)
+ :foreground ,blue-nuanced-fg
+ ,@(modus-themes--scale modus-themes-scale-2))))
+ `(markup-title-3-face ((,class :inherit (bold modus-themes-variable-pitch)
+ :foreground ,blue-nuanced-fg
+ ,@(modus-themes--scale modus-themes-scale-3))))
+ `(markup-title-4-face ((,class :inherit (bold modus-themes-variable-pitch)
+ :foreground ,blue-nuanced-fg
+ ,@(modus-themes--scale modus-themes-scale-4))))
+ `(markup-title-5-face ((,class :inherit (bold modus-themes-variable-pitch)
+ :foreground ,blue-nuanced-fg)))
+ `(markup-verbatim-face ((,class :background ,bg-alt)))
;;;;; mentor
`(mentor-download-message ((,class :foreground ,fg-special-warm)))
`(mentor-download-name ((,class :foreground ,fg-special-cold)))
@@ -5548,39 +6414,41 @@ ;;;;; orderless
yellow yellow-nuanced-bg
yellow-refine-bg yellow-refine-fg))))
;;;;; org
- `(org-agenda-calendar-event ((,class :foreground ,fg-main)))
- `(org-agenda-calendar-sexp ((,class :foreground ,cyan-alt)))
+ `(org-agenda-calendar-event ((,class :inherit shadow)))
+ `(org-agenda-calendar-sexp ((,class :inherit (modus-themes-slant shadow))))
`(org-agenda-clocking ((,class :inherit modus-themes-special-cold :extend t)))
`(org-agenda-column-dateline ((,class :background ,bg-alt)))
- `(org-agenda-current-time ((,class :inherit bold :foreground ,blue-alt-other)))
- `(org-agenda-date ((,class :foreground ,cyan)))
- `(org-agenda-date-today ((,class :inherit bold :foreground ,fg-main :underline t)))
- `(org-agenda-date-weekend ((,class :foreground ,cyan-alt-other)))
- `(org-agenda-diary ((,class :foreground ,fg-main)))
- `(org-agenda-dimmed-todo-face ((,class :inherit bold :foreground ,fg-alt)))
- `(org-agenda-done ((,class :foreground ,green-alt)))
- `(org-agenda-filter-category ((,class :inherit bold :foreground ,magenta-active)))
- `(org-agenda-filter-effort ((,class :inherit bold :foreground ,magenta-active)))
- `(org-agenda-filter-regexp ((,class :inherit bold :foreground ,magenta-active)))
- `(org-agenda-filter-tags ((,class :inherit bold :foreground ,magenta-active)))
+ `(org-agenda-current-time ((,class :foreground ,blue-alt-other-faint)))
+ `(org-agenda-date ((,class ,@(modus-themes--agenda-date cyan fg-main nil))))
+ `(org-agenda-date-today ((,class :background ,bg-active
+ ,@(modus-themes--agenda-date blue-active fg-main t cyan-active))))
+ `(org-agenda-date-weekend ((,class ,@(modus-themes--agenda-date cyan-alt-other fg-alt nil cyan fg-main))))
+ `(org-agenda-diary ((,class :inherit shadow)))
+ `(org-agenda-dimmed-todo-face ((,class :inherit shadow)))
+ `(org-agenda-done ((,class :foreground ,@(modus-themes--success-deuteran
+ blue-nuanced-fg
+ green-nuanced-fg))))
+ `(org-agenda-filter-category ((,class :inherit bold :foreground ,cyan-active)))
+ `(org-agenda-filter-effort ((,class :inherit bold :foreground ,cyan-active)))
+ `(org-agenda-filter-regexp ((,class :inherit bold :foreground ,cyan-active)))
+ `(org-agenda-filter-tags ((,class :inherit bold :foreground ,cyan-active)))
`(org-agenda-restriction-lock ((,class :background ,bg-dim :foreground ,fg-dim)))
- `(org-agenda-structure ((,class ,@(modus-themes--scale modus-themes-scale-5)
- :foreground ,blue-alt)))
+ `(org-agenda-structure ((,class ,@(modus-themes--agenda-structure blue-alt))))
`(org-archived ((,class :background ,bg-alt :foreground ,fg-alt)))
- `(org-block ((,class ,@(modus-themes--mixed-fonts)
+ `(org-block ((,class :inherit modus-themes-fixed-pitch
,@(modus-themes--org-block bg-dim fg-main))))
- `(org-block-begin-line ((,class ,@(modus-themes--mixed-fonts)
+ `(org-block-begin-line ((,class :inherit modus-themes-fixed-pitch
,@(modus-themes--org-block-delim
bg-dim fg-special-cold
- bg-alt fg-special-mild))))
+ bg-alt fg-alt))))
`(org-block-end-line ((,class :inherit org-block-begin-line)))
`(org-checkbox ((,class :box (:line-width 1 :color ,bg-active)
:background ,bg-inactive :foreground ,fg-active)))
`(org-checkbox-statistics-done ((,class :inherit org-done)))
`(org-checkbox-statistics-todo ((,class :inherit org-todo)))
`(org-clock-overlay ((,class :inherit modus-themes-special-cold)))
- `(org-code ((,class ,@(modus-themes--mixed-fonts)
- :background ,magenta-nuanced-bg :foreground ,magenta-nuanced-fg)))
+ `(org-code ((,class :inherit modus-themes-fixed-pitch
+ :background ,bg-alt :foreground ,fg-special-mild)))
`(org-column ((,class :background ,bg-alt)))
`(org-column-title ((,class :inherit bold :underline t :background ,bg-alt)))
`(org-date ((,class :inherit ,(if modus-themes-no-mixed-fonts
@@ -5591,51 +6459,52 @@ ;;;;; org
`(org-date-selected ((,class :inherit bold :foreground ,blue-alt :inverse-video t)))
`(org-dispatcher-highlight ((,class :inherit (bold modus-themes-mark-alt))))
`(org-document-info ((,class :foreground ,fg-special-cold)))
- `(org-document-info-keyword ((,class ,@(modus-themes--mixed-fonts)
- :foreground ,fg-alt)))
+ `(org-document-info-keyword ((,class :inherit modus-themes-fixed-pitch :foreground ,fg-alt)))
`(org-document-title ((,class :inherit (bold modus-themes-variable-pitch) :foreground ,fg-special-cold
- ,@(modus-themes--scale modus-themes-scale-5))))
+ ,@(modus-themes--scale modus-themes-scale-title))))
`(org-done ((,class :foreground ,@(modus-themes--success-deuteran blue green))))
- `(org-drawer ((,class ,@(modus-themes--mixed-fonts)
- :foreground ,fg-alt)))
+ `(org-drawer ((,class :inherit modus-themes-fixed-pitch :foreground ,fg-alt)))
`(org-ellipsis (())) ; inherits from the heading's color
`(org-footnote ((,class :inherit button
,@(modus-themes--link-color
blue-alt blue-alt-faint))))
- `(org-formula ((,class ,@(modus-themes--mixed-fonts)
- :foreground ,red-alt)))
- `(org-habit-alert-face ((,class ,@(modus-themes--org-habit
+ `(org-formula ((,class :inherit modus-themes-fixed-pitch :foreground ,red-alt)))
+ `(org-habit-alert-face ((,class ,@(modus-themes--agenda-habit
yellow-graph-0-bg
yellow-graph-0-bg
yellow-graph-1-bg))))
- `(org-habit-alert-future-face ((,class ,@(modus-themes--org-habit
+ `(org-habit-alert-future-face ((,class ,@(modus-themes--agenda-habit
yellow-graph-1-bg
yellow-graph-0-bg
yellow-graph-1-bg))))
- `(org-habit-clear-face ((,class ,@(modus-themes--org-habit
+ `(org-habit-clear-face ((,class ,@(modus-themes--agenda-habit
blue-graph-0-bg
green-graph-1-bg
+ blue-graph-1-bg
blue-graph-1-bg))))
- `(org-habit-clear-future-face ((,class ,@(modus-themes--org-habit
+ `(org-habit-clear-future-face ((,class ,@(modus-themes--agenda-habit
blue-graph-1-bg
green-graph-1-bg
+ blue-graph-1-bg
blue-graph-1-bg))))
- `(org-habit-overdue-face ((,class ,@(modus-themes--org-habit
+ `(org-habit-overdue-face ((,class ,@(modus-themes--agenda-habit
red-graph-0-bg
red-graph-0-bg
red-graph-1-bg))))
- `(org-habit-overdue-future-face ((,class ,@(modus-themes--org-habit
+ `(org-habit-overdue-future-face ((,class ,@(modus-themes--agenda-habit
red-graph-1-bg
red-graph-0-bg
red-graph-1-bg))))
- `(org-habit-ready-face ((,class ,@(modus-themes--org-habit
+ `(org-habit-ready-face ((,class ,@(modus-themes--agenda-habit
green-graph-0-bg
green-graph-0-bg
- green-graph-1-bg))))
- `(org-habit-ready-future-face ((,class ,@(modus-themes--org-habit
+ green-graph-1-bg
+ blue-graph-0-bg))))
+ `(org-habit-ready-future-face ((,class ,@(modus-themes--agenda-habit
green-graph-1-bg
green-graph-0-bg
- green-graph-1-bg))))
+ green-graph-1-bg
+ blue-graph-0-bg))))
`(org-headline-done ((,class :inherit modus-themes-variable-pitch
:foreground ,@(modus-themes--success-deuteran
blue-nuanced-fg
@@ -5654,23 +6523,20 @@ ;;;;; org
`(org-level-8 ((,class :inherit modus-themes-heading-8)))
`(org-link ((,class :inherit button)))
`(org-list-dt ((,class :inherit bold)))
- `(org-macro ((,class ,@(modus-themes--mixed-fonts)
+ `(org-macro ((,class :inherit modus-themes-fixed-pitch
:background ,cyan-nuanced-bg :foreground ,cyan-nuanced-fg)))
- `(org-meta-line ((,class ,@(modus-themes--mixed-fonts) :foreground ,fg-alt)))
+ `(org-meta-line ((,class :inherit modus-themes-fixed-pitch :foreground ,fg-alt)))
`(org-mode-line-clock ((,class :foreground ,fg-main)))
- `(org-mode-line-clock-overrun ((,class :inherit modus-themes-active-red)))
+ `(org-mode-line-clock-overrun ((,class :inherit bold :foreground ,red-active)))
`(org-priority ((,class :foreground ,magenta)))
- `(org-property-value ((,class ,@(modus-themes--mixed-fonts)
- :foreground ,fg-special-cold)))
+ `(org-property-value ((,class :inherit modus-themes-fixed-pitch :foreground ,fg-special-cold)))
`(org-quote ((,class ,@(modus-themes--org-block bg-dim fg-special-cold fg-main))))
- `(org-scheduled ((,class :foreground ,magenta-alt)))
- `(org-scheduled-previously ((,class :foreground ,yellow-alt-other)))
- `(org-scheduled-today ((,class :foreground ,magenta-alt-other)))
+ `(org-scheduled ((,class ,@(modus-themes--agenda-scheduled yellow-faint fg-special-warm magenta-alt))))
+ `(org-scheduled-previously ((,class ,@(modus-themes--agenda-scheduled yellow fg-special-warm yellow-alt-other))))
+ `(org-scheduled-today ((,class ,@(modus-themes--agenda-scheduled yellow fg-special-warm magenta-alt-other))))
`(org-sexp-date ((,class :inherit org-date)))
- `(org-special-keyword ((,class ,@(modus-themes--mixed-fonts)
- :foreground ,fg-alt)))
- `(org-table ((,class ,@(modus-themes--mixed-fonts)
- :foreground ,fg-special-cold)))
+ `(org-special-keyword ((,class :inherit modus-themes-fixed-pitch :foreground ,fg-alt)))
+ `(org-table ((,class :inherit modus-themes-fixed-pitch :foreground ,fg-special-cold)))
`(org-table-header ((,class :inherit (fixed-pitch modus-themes-intense-neutral))))
`(org-tag ((,class :foreground ,magenta-nuanced-fg)))
`(org-tag-group ((,class :inherit bold :foreground ,cyan-nuanced-fg)))
@@ -5678,8 +6544,8 @@ ;;;;; org
`(org-time-grid ((,class :foreground ,fg-unfocused)))
`(org-todo ((,class :foreground ,red)))
`(org-upcoming-deadline ((,class :foreground ,red-alt-other)))
- `(org-upcoming-distant-deadline ((,class :foreground ,red-nuanced-fg)))
- `(org-verbatim ((,class ,@(modus-themes--mixed-fonts)
+ `(org-upcoming-distant-deadline ((,class :foreground ,red-faint)))
+ `(org-verbatim ((,class :inherit modus-themes-fixed-pitch
:background ,bg-alt :foreground ,fg-special-calm)))
`(org-verse ((,class :inherit org-quote)))
`(org-warning ((,class :inherit bold :foreground ,red-alt-other)))
@@ -5719,7 +6585,7 @@ ;;;;; org-tree-slide
`(org-tree-slide-header-overlay-face
((,class :inherit (bold modus-themes-variable-pitch) :background ,bg-main
:foreground ,fg-special-cold :overline nil
- ,@(modus-themes--scale modus-themes-scale-5))))
+ ,@(modus-themes--scale modus-themes-scale-title))))
;;;;; org-treescope
`(org-treescope-faces--markerinternal-midday ((,class :inherit modus-themes-intense-blue)))
`(org-treescope-faces--markerinternal-range ((,class :inherit modus-themes-special-mild)))
@@ -5736,7 +6602,7 @@ ;;;;; outline-mode
`(outline-7 ((,class :inherit modus-themes-heading-7)))
`(outline-8 ((,class :inherit modus-themes-heading-8)))
;;;;; outline-minor-faces
- `(outline-minor-0 ((,class :background ,bg-alt)))
+ `(outline-minor-0 (()))
;;;;; package (M-x list-packages)
`(package-description ((,class :foreground ,fg-special-cold)))
`(package-help-section-name ((,class :inherit bold :foreground ,magenta-alt-other)))
@@ -5845,6 +6711,8 @@ ;;;;; prodigy
`(prodigy-green-face ((,class :foreground ,green)))
`(prodigy-red-face ((,class :foreground ,red)))
`(prodigy-yellow-face ((,class :foreground ,yellow)))
+;;;;; pulse
+ `(pulse-highlight-start-face ((,class :background ,bg-active-accent :extend t)))
;;;;; quick-peek
`(quick-peek-background-face ((,class :background ,bg-alt)))
`(quick-peek-border-face ((,class :background ,fg-window-divider-inner :height 1)))
@@ -5911,7 +6779,7 @@ ;;;;; rcirc
`(rcirc-nick-in-message ((,class :foreground ,magenta-alt-other)))
`(rcirc-nick-in-message-full-line ((,class :inherit bold :foreground ,fg-special-mild)))
`(rcirc-other-nick ((,class :inherit bold :foreground ,fg-special-cold)))
- `(rcirc-prompt ((,class :inherit comint-highlight-prompt)))
+ `(rcirc-prompt ((,class :inherit modus-themes-prompt)))
`(rcirc-server ((,class :foreground ,fg-unfocused)))
`(rcirc-timestamp ((,class :foreground ,blue-nuanced-fg)))
`(rcirc-url ((,class :foreground ,blue :underline t)))
@@ -5997,6 +6865,7 @@ ;;;;; selectrum
:background ,@(pcase modus-themes-completions
('opinionated (list bg-active))
(_ (list bg-inactive))))))
+ `(selectrum-mouse-highlight ((,class :inherit highlight)))
`(selectrum-primary-highlight
((,class :inherit bold
,@(modus-themes--standard-completions
@@ -6053,6 +6922,12 @@ ;;;;; show-paren-mode
`(show-paren-match-expression ((,class :background ,bg-paren-expression)))
`(show-paren-mismatch ((,class :inherit modus-themes-intense-red)))
;;;;; shr
+ `(shr-h1 ((,class :inherit modus-themes-heading-1)))
+ `(shr-h2 ((,class :inherit modus-themes-heading-2)))
+ `(shr-h3 ((,class :inherit modus-themes-heading-3)))
+ `(shr-h4 ((,class :inherit modus-themes-heading-4)))
+ `(shr-h5 ((,class :inherit modus-themes-heading-5)))
+ `(shr-h6 ((,class :inherit modus-themes-heading-6)))
`(shr-abbreviation ((,class :inherit modus-themes-lang-note)))
`(shr-selected-link ((,class :inherit modus-themes-subtle-red)))
;;;;; side-notes
@@ -6309,8 +7184,8 @@ ;;;;; tomatinho
`(tomatinho-reset-face ((,class :inherit shadow)))
;;;;; transient
`(transient-active-infix ((,class :inherit modus-themes-special-mild)))
- `(transient-amaranth ((,class :inherit bold :foreground ,yellow)))
- `(transient-argument ((,class :inherit bold :foreground ,red-alt)))
+ `(transient-amaranth ((,class :inherit bold :foreground ,yellow-alt)))
+ `(transient-argument ((,class :inherit bold :foreground ,green)))
`(transient-blue ((,class :inherit bold :foreground ,blue)))
`(transient-disabled-suffix ((,class :inherit modus-themes-intense-red)))
`(transient-enabled-suffix ((,class :inherit ,@(modus-themes--success-deuteran
@@ -6322,8 +7197,8 @@ ;;;;; transient
`(transient-key ((,class :inherit modus-themes-key-binding)))
`(transient-mismatched-key ((,class :underline t)))
`(transient-nonstandard-key ((,class :underline t)))
- `(transient-pink ((,class :inherit bold :foreground ,magenta)))
- `(transient-red ((,class :inherit bold :foreground ,red-intense)))
+ `(transient-pink ((,class :inherit bold :foreground ,magenta-alt-faint)))
+ `(transient-red ((,class :inherit bold :foreground ,red-faint)))
`(transient-teal ((,class :inherit bold :foreground ,cyan-alt-other)))
`(transient-unreachable ((,class :foreground ,fg-unfocused)))
`(transient-unreachable-key ((,class :foreground ,fg-unfocused)))
@@ -6560,7 +7435,7 @@ ;;;;; whitespace-mode
`(whitespace-empty ((,class :inherit modus-themes-intense-magenta)))
`(whitespace-hspace ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
`(whitespace-indentation ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
- `(whitespace-line ((,class :background ,bg-alt)))
+ `(whitespace-line ((,class :inherit modus-themes-subtle-yellow)))
`(whitespace-newline ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
`(whitespace-space ((,class :background ,bg-whitespace :foreground ,fg-whitespace)))
`(whitespace-space-after-tab ((,class :inherit modus-themes-subtle-magenta)))
diff --git a/etc/themes/modus-vivendi-theme.el b/etc/themes/modus-vivendi-theme.el
index fa8ba217f0..6ff359d341 100644
--- a/etc/themes/modus-vivendi-theme.el
+++ b/etc/themes/modus-vivendi-theme.el
@@ -4,7 +4,7 @@ ;;; modus-vivendi-theme.el --- Accessible dark theme (WCAG AAA) -*- lexical-bind
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; URL: https://gitlab.com/protesilaos/modus-themes
-;; Version: 1.4.0
+;; Version: 1.5.0
;; Package-Requires: ((emacs "26.1"))
;; Keywords: faces, theme, accessibility
--
2.32.0
next reply other threads:[~2021-07-15 14:26 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-07-15 14:26 Protesilaos Stavrou [this message]
2021-07-15 14:49 ` bug#49572: 28.0.50; [PATCH] Update modus-themes to version 1.5.0 Lars Ingebrigtsen
2021-07-15 15:13 ` Protesilaos Stavrou
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87czrjps9n.fsf@protesilaos.com \
--to=info@protesilaos.com \
--cc=49572@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.