From 169425d379eb1f045953d4fe4bde357f4f143aa2 Mon Sep 17 00:00:00 2001 Message-Id: <169425d379eb1f045953d4fe4bde357f4f143aa2.1626358822.git.info@protesilaos.com> From: Protesilaos Stavrou 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): . --- 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 ;; 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 ;; 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: ). ;; -;; 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: -;; . -;; -;; The web page of the change log is also available: -;; . -;; -;; An Info manual should be distributed with the Modus themes. -;; Evaluate this form to access it directly: -;; -;; (info "(modus-themes) Top") - ;;; Code: @@ -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) ;;; 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")) @@ -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 ;; 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