From 543e6b62b3ae7bf92ac1311af2e5a7c354cf01f1 Mon Sep 17 00:00:00 2001 Message-Id: <543e6b62b3ae7bf92ac1311af2e5a7c354cf01f1.1645096562.git.info@protesilaos.com> From: Protesilaos Stavrou Date: Thu, 17 Feb 2022 13:15:39 +0200 Subject: [PATCH] Update modus-themes to version 2.1.0 * doc/misc/modus-themes.org (Customization Options): Document new user options and relevant changes. (Option for links, Option for box buttons) (Option for completion framework aesthetics, Option for mail citations) (Option for intense markup in Org and others) (Option for diff buffer looks, Option for org-mode block styles) (Option for Org agenda constructs) (Option for the headings' overall style): Update user options. (More accurate colors in terminal emulators): Add section on how to improve the accuracy of color reproduction in terminal emulators. (Case-by-case face specs using the themes' palette) (Face specs at scale using the themes' palette, Override colors) (Override colors through blending, Custom Org user faces): Improve wording. (Custom Org emphasis faces): Add section about bespoke faces for Org emphasis markers. (Backdrop for pdf-tools): Improve sample code. (Ediff without diff color-coding): Add section about user-level changes to the style of Ediff buffers. (Full support for packages or face groups): Update lists of supported packages. (Indirectly covered packages): Update list of indirectly supported packages. (Note on underlines in compilation buffers): Clarify wording. (Note on EWW and Elfeed fonts): Be more specific about 'shr' faces. (Are these color schemes?): Answer frequently asked question. (Acknowledgements): Update acknowledgements' section. * etc/themes/modus-themes.el (modus-themes-operandi-colors) (modus-themes-vivendi-colors): Update color palettes. (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-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-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-variable-pitch, modus-themes-lang-note) (modus-themes-lang-warning, modus-themes-lang-error) (modus-themes-reset-soft, modus-themes-reset-hard): Fix typo in ':group'. (modus-themes-markup-code): Add face. (modus-themes--headings-choice, modus-themes-headings) (modus-themes-org-agenda): Update documentation about typographic weights. (modus-themes-org-blocks, modus-themes-completions): Update doc string and add new stylistic variant. (modus-themes-intense-markup): Deprecate old user option. Replace it with 'modus-themes-markup'. (modus-themes-mail-citations): Update doc string and add another stylistic variant. (modus-themes-box-buttons): Add new user option. (modus-themes--slant): Tweak how slant is applied. (modus-themes--markup, modus-themes--prompt, modus-themes--paren) (modus-themes--syntax-foreground, modus-themes--syntax-extra) (modus-themes--syntax-string, modus-themes--syntax-comment) (modus-themes--heading, modus-themes--agenda-structure) (modus-themes--agenda-habit, modus-themes--org-block-delim) (modus-themes--mode-line-attrs, modus-themes--standard-completions) (modus-themes--link, modus-themes--link-color, modus-themes--region) (modus-themes--hl-line, modus-themes--mail-cite): Tweak private functions. (modus-themes--button): Adjust private function. (modus-themes--heading-weights): Deprecate it. Replace by 'modus-themes-weights'. (modus-themes-faces): Update faces. * etc/themes/modus-vivendi-theme.el * etc/themes/modus-operandi-theme.el: Bump version number. For a detailed change log, read: . --- doc/misc/modus-themes.org | 834 ++++++++++++-- etc/themes/modus-operandi-theme.el | 6 +- etc/themes/modus-themes.el | 1671 +++++++++++++++------------- etc/themes/modus-vivendi-theme.el | 6 +- 4 files changed, 1633 insertions(+), 884 deletions(-) diff --git a/doc/misc/modus-themes.org b/doc/misc/modus-themes.org index 35bc8853fd..a3bc468413 100644 --- a/doc/misc/modus-themes.org +++ b/doc/misc/modus-themes.org @@ -5,9 +5,9 @@ #+options: ':t toc:nil author:t email:t num:t #+startup: content -#+macro: stable-version 2.0.0 -#+macro: release-date 2021-12-24 -#+macro: development-version 2.1.0-dev +#+macro: stable-version 2.1.0 +#+macro: release-date 2022-02-17 +#+macro: development-version 2.2.0-dev #+macro: file @@texinfo:@file{@@$1@@texinfo:}@@ #+macro: space @@texinfo:@: @@ #+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@ @@ -42,7 +42,7 @@ * COPYING :custom_id: h:b14c3fcb-13dd-4144-9d92-2c58b3ed16d3 :end: -Copyright (C) 2020-2022 Free Software Foundation, Inc. +Copyright (C) 2020-2022 Free Software Foundation, Inc. #+begin_quote Permission is granted to copy, distribute and/or modify this document @@ -416,7 +416,6 @@ * Customization Options modus-themes-bold-constructs nil modus-themes-mixed-fonts nil modus-themes-subtle-line-numbers nil - modus-themes-intense-markup t modus-themes-deuteranopia t modus-themes-tabs-accented t modus-themes-variable-pitch-ui nil @@ -435,6 +434,11 @@ * Customization Options ;; `accented', and a natural number for extra padding modus-themes-mode-line '(4 accented borderless) + ;; Options for `modus-themes-markup' are either nil, or a list + ;; that can combine any of `bold', `italic', `background', + ;; `intense'. + modus-themes-markup '(background italic) + ;; 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' @@ -456,14 +460,21 @@ * Customization Options ;; `bold', `italic', `background' modus-themes-links '(neutral-underline background) + ;; Options for `modus-themes-box-buttons' are either nil (the + ;; default), or a list that can combine any of `flat', `accented', + ;; `faint', `variable-pitch', `underline', the symbol of any font + ;; weight as listed in `modus-themes-weights', and a floating + ;; point number (e.g. 0.9) for the height of the button's text. + modus-themes-box-buttons '(variable-pitch flat faint 0.9) + ;; 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-completions 'moderate ; {nil,'moderate,'opinionated,'super-opinionated} - modus-themes-mail-citations nil ; {nil,'faint,'monochrome} + modus-themes-mail-citations nil ; {nil,'intense,'faint,'monochrome} ;; Options for `modus-themes-region' are either nil (the default), ;; or a list of properties that may include any of those symbols: @@ -711,7 +722,7 @@ ** Option for links :properties: :alt_title: Link styles :description: Choose among several styles, with or without underline -:custom_id: h:c119d7b2-fcd4-4e44-890e-5e25733d5e52 +:custom_id: h:5808be52-361a-4d18-88fd-90129d206f9b :end: #+vindex: modus-themes-links @@ -780,6 +791,89 @@ ** Option for links ~x-underline-at-descent-line~, ~underline-minimum-offset~. Please refer to their documentation strings. +** Option for box buttons +:properties: +:alt_title: Box buttons +:description: Choose among several styles for buttons +:custom_id: h:8b85f711-ff40-45b0-b7fc-4727503cd2ec +:end: +#+vindex: modus-themes-box-buttons + +Brief: Control the style of buttons in the Custom UI and related. + +Symbol: ~modus-themes-box-buttons~ (=choice= type, list of properties) + +Possible values are expressed as a list of properties (default is ~nil~ or +an empty list). The list can include any of the following symbols: + ++ ~flat~ ++ ~accented~ ++ ~faint~ ++ ~variable-pitch~ ++ ~underline~ ++ A font weight, which must be supported by the underlying typeface: + - ~thin~ + - ~ultralight~ + - ~extralight~ + - ~light~ + - ~semilight~ + - ~regular~ + - ~medium~ + - ~semibold~ + - ~bold~ + - ~heavy~ + - ~extrabold~ + - ~ultrabold~ ++ A floating point as a height multiple of the default (e.g. =0.9=) + +The default (a nil value or an empty list) is a gray background combined +with a pseudo three-dimensional effect. + +The ~flat~ property makes the button two dimensional. + +The ~accented~ property changes the background from gray to an accent +color. + +The ~faint~ property reduces the overall coloration. + +The ~variable-pitch~ property applies a proportionately spaced typeface +to the button~s text. + +[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and others]]. + +The ~underline~ property draws a line below the affected text and +removes whatever box effect. This is optimal when Emacs runs inside a +terminal emulator ([[#h:fbb5e254-afd6-4313-bb05-93b3b4f67358][More accurate colors in terminal emulators]]). If +~flat~ and ~underline~ are defined together, the latter takes +precedence. + +The symbol of a weight attribute adjusts the font of the button +accordingly, such as ~light~, ~semibold~, etc. Valid symbols are +defined in the variable ~modus-themes-weights~. + +[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]]. + +A number, expressed as a floating point (e.g. =0.9=), adjusts the height +of the button's text to that many times the base font size. The default +height is the same as =1.0=, though it need not be explicitly stated. + +Combinations of any of those properties are expressed as a list, +like in these examples: + +#+begin_src emacs-lisp +(flat) +(variable-pitch flat) +(variable-pitch flat 0.9 semibold) +#+end_src + +The order in which the properties are set is not significant. + +In user configuration files the form may look like this: + +#+begin_src emacs-lisp +(setq modus-themes-box-buttons '(variable-pitch flat 0.9)) +#+end_src + ** Option for command prompt styles :properties: :alt_title: Command prompts @@ -978,35 +1072,39 @@ ** Option for completion framework aesthetics 1. ~nil~ (default) 2. ~moderate~ 3. ~opinionated~ +4. ~super-opinionated~ This is a special option that has different effects depending on the completion UI. The interfaces can be grouped in two categories, based on their default aesthetics: (i) those that only or mostly use foreground colors for their interaction model, and (ii) those that combine background and foreground values for some of their metaphors. -The former category encompasses Icomplete, Ido, Selectrum, Vertico, as -well as pattern matching styles like Orderless and Flx. The latter +The former category encompasses Icomplete, Ido, Selectrum, Vertico, Mct, +as well as pattern matching styles like Orderless and Flx. The latter covers Helm and Ivy. -A value of ~nil~ (the default) will simply respect the metaphors of each +A value of nil (the default) will simply respect the metaphors of each completion framework. Option ~moderate~ applies a combination of background and foreground that is fairly subtle. For Icomplete and friends this constitutes a departure from their default aesthetics, however the difference is -small. While Helm, Ivy et al appear slightly different than their -original looks, as they are toned down a bit. +small. While Helm and Ivy appear slightly different than their original +looks, as they are toned down a bit. Option ~opinionated~ uses color combinations that refashion the completion UI. For the Icomplete camp this means that intense background and -foreground combinations are used: in effect their looks emulate those of -Helm, Ivy and co. in their original style. Whereas the other group of -packages will revert to an even more nuanced aesthetic with some +foreground combinations are used: in effect their looks approximate +those of Helm and Ivy in their original style. Whereas the other group +of packages will revert to an even more nuanced aesthetic with some additional changes to the choice of hues. +Option ~super-opinionated~ is like the ~opinionated~ though it has a more +pronounced effect, especially on the color of the current +line/candidate. + To appreciate the scope of this customization option, you should spend -some time with every one of the ~nil~ (default), ~moderate~, and ~opinionated~ -possibilities. +some time with every one of those presets. ** Option for mail citations :properties: @@ -1024,17 +1122,21 @@ ** Option for mail citations Possible values: 1. ~nil~ (default) -2. ~faint~ -3. ~monochrome~ +2. ~intense~ +3. ~faint~ +4. ~monochrome~ + +By default (a nil value) citations are styled with contrasting hues to +denote their depth. Colors are easy to tell apart because they +complement each other, but they otherwise are not very prominent. -By default, citations in email-related buffers apply contrasting hues to -different levels of depth in cited text. The colors are fairly easy to -tell apart. +Option ~intense~ is similar to the default in terms of using contrasting +and complementary hues, but applies more saturated colors. -A value of ~faint~ makes all citation levels less intense, while retaining -the default style of contrasting hues (albeit very subtle ones). +Option ~faint~ maintains the same color-based distinction between citation +levels though the colors it uses have subtle differences between them. -Option ~monochrome~ turns all citations in to a uniform shade of gray. +Option ~monochrome~ turns all quotes into a shade of gray. Whatever the value assigned to this variable, citations in emails are controlled by typographic elements or indentation, which the themes do @@ -1220,29 +1322,60 @@ ** Option for line numbers the rest of the buffer. Foreground values for all relevant faces are updated to accommodate this aesthetic. -** Option for intense markup in Org and others +** Option for markup style in Org and others :properties: -:alt_title: Intense markup -:description: Toggle intense style for markup in Org and others +:alt_title: Markup +:description: Choose style for markup in Org and others :custom_id: h:9d9a4e64-99ac-4018-8f66-3051b9c43fd7 :end: -#+vindex: modus-themes-intense-markup +#+vindex: modus-themes-markup -Brief: Toggle intense style for inline code and related markup. +Brief: Choose style of markup in Org, Markdown, and others (affects +constructs such as Org's ==verbatim== and =~code~=). -Symbol: ~modus-themes-intense-markup~ (=boolean= type) +Symbol: ~modus-themes-markup~ (=boolean= type) -Possible value: +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. ~t~ +1. ~bold~ +2. ~italic~ +3. ~background~ +4. ~intense~ + +The ~italic~ property applies a typographic slant (italics). + +The ~bold~ property applies a heavier typographic weight. + +[[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]]. + +The ~background~ property adds a background color. The background is a +shade of gray, unless the ~intense~ property is also set. -The default style for certain markup types like inline code and verbatim -constructs in Org and related major modes is a subtle foreground color -combined with a subtle background. +The ~intense~ property amplifies the existing coloration. When +~background~ is used, the background color is enhanced as well and +becomes tinted instead of being gray. -With a non-nil value (~t~), these constructs will use a more prominent -background and foreground color combination instead. +Combinations of any of those properties are expressed as a list, +like in these examples: + +#+begin_src emacs-lisp +(bold) +(bold italic) +(bold italic intense) +(bold italic intense background) +#+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-markup '(bold italic)) +#+end_src + +Also check the variables ~org-hide-emphasis-markers~, +~org-hide-macro-markers~. ** Option for parenthesis matching :properties: @@ -1387,6 +1520,8 @@ ** Option for diff buffer looks [[#h:e2aed9eb-5e1e-45ec-bbd7-bc4faeab3236][Diffs with only the foreground]]. +[[#h:b0b31802-0216-427e-b071-1a47adcfe608][Ediff without diff color-coding]]. + ** Option for org-mode block styles :properties: :alt_title: Org mode blocks @@ -1405,20 +1540,28 @@ ** Option for org-mode block styles 2. ~gray-background~ (value ~grayscale~ exists for backward compatibility) 3. ~tinted-background~ (value ~rainbow~ exists for backward compatibility) -The default means that the block has no distinct background of its own -and uses the one that applies to the rest of the buffer. +Nil (the default) means that the block has no background of its own: it +uses the one that applies to the rest of the buffer. In this case, the +delimiter lines have a gray color for their text, making them look +exactly like all other Org properties. Option ~gray-background~ applies a subtle gray background to the block's -contents. It also affects the begin and end lines of the block: their -background extends to the edge of the window for Emacs version >= 27 -where the ~:extend~ keyword is recognized by ~set-face-attribute~ (this is -contingent on the variable ~org-fontify-whole-block-delimiter-line~). +contents. It also affects the begin and end lines of the block as they +get another shade of gray as their background, which differentiates them +from the contents of the block. All background colors extend to the +edge of the window, giving the area a rectangular, "blocky" +presentation. Option ~tinted-background~ uses a slightly colored background for the contents of the block. The exact color will depend on the programming language and is controlled by the variable ~org-src-block-faces~ (refer to the theme's source code for the current association list). For this to -take effect, Org must be restarted with {{{kbd(M-x org-mode-restart)}}}. +take effect, the Org buffer needs to be restarted with ~org-mode-restart~. +In this scenario, it may be better to inhibit the extension of the +delimiter lines' background to the edge of the window because Org does +not provide a mechanism to update their colors depending on the contents +of the block. Disable the extension of such backgrounds by setting +~org-fontify-whole-block-delimiter-line~ to nil. Code blocks use their major mode's colors only when the variable ~org-src-fontify-natively~ is non-nil. While quote/verse blocks require @@ -1471,10 +1614,10 @@ ** Option for Org agenda constructs are present, the default is a small increase in height (a value of 1.15). - The symbol of a weight attribute adjusts the font of the heading - accordingly, such as ~light~, ~semibold~, etc. Valid symbols are defined - in the internal variable ~modus-themes--heading-weights~. The absence - of a weight means that bold will be used by virtue of inheriting the - ~bold~ face. + accordingly, such as ~light~, ~semibold~, etc. Valid symbols are + defined in the variable ~modus-themes-weights~. The absence of a + weight means that bold will be used by virtue of inheriting the ~bold~ + face. [[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]]. @@ -1594,10 +1737,10 @@ ** Option for Org agenda constructs 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. -- When ~modus-themes-deuteranopia~ is non-nil the habit graph uses a - three-color style like the aforementioned ~traffic-light~ variant, - except that shades of blue are applied instead of green. This is - suitable for users with red-green color deficiency (deuteranopia). +- When ~modus-themes-deuteranopia~ is non-nil the exact style of the habit + graph adapts to the needs of users with red-green colour deficiency by + substituting every instance of green with blue or cyan (depending on + the specifics). [[#h:3ed03a48-20d8-4ce7-b214-0eb7e4c79abe][Option for red-green color deficiency or deuteranopia]]. @@ -1674,7 +1817,7 @@ ** Option for the headings' overall style - ~extrabold~ - ~ultrabold~ + ~no-bold~ (deprecated alias of a ~regular~ weight) -+ A floating point as a height multiple of the default ++ A floating point as a height multiple of the default (e.g. =1.1=) By default (a ~nil~ value for this variable), all headings have a bold typographic weight and use a desaturated text color. @@ -1695,10 +1838,10 @@ ** Option for the headings' overall style of the ~variable-pitch~ face (normally a proportionately spaced typeface). The symbol of a weight attribute adjusts the font of the heading -accordingly, such as ~light~, ~semibold~, etc. Valid symbols are defined in -the internal variable ~modus-themes--heading-weights~. The absence of a -weight means that bold will be used by virtue of inheriting the ~bold~ -face. For backward compatibility, the ~no-bold~ value is accepted, though +accordingly, such as ~light~, ~semibold~, etc. Valid symbols are +defined in the variable ~modus-themes-weights~. The absence of a weight +means that bold will be used by virtue of inheriting the ~bold~ face. +For backward compatibility, the ~no-bold~ value is accepted, though users are encouraged to specify a ~regular~ weight instead. [[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]]. @@ -1793,6 +1936,57 @@ * Advanced customization incompatibilities between versioned releases of the themes. As such, they are labelled as "do-it-yourself" or "DIY". +** More accurate colors in terminal emulators +:PROPERTIES: +:CUSTOM_ID: h:fbb5e254-afd6-4313-bb05-93b3b4f67358 +:END: +#+cindex: Color accuracy of terminal emulators + +[ This is based on partial information. Please help verify and/or + expand these findings. ] + +The graphical version of Emacs can reproduce color values accurately. +Whereas things get more tricky when Emacs is used in a terminal +emulator, because the terminals' own capabilities determine the number +of colors that may be displayed: the Modus themes don't look as good in +that case. + +There is, however, a way to instruct supported terminal emulators to use +more accurate colors. In a shell prompt type =toe -a | grep direct= to +get a list of relevant terminfo entries. There should be items such as +=xterm-direct=, =alacritty-direct=, =kitty-direct=. Once you find the one +that corresponds to your terminal, call Emacs with an environment +variable like =TERM=xterm-direct=. Example that can be adapted to shell +aliases: + +: TERM=xterm-direct emacsclient -nw + +Another example that can be bound to a key: + +: TERM=xterm-direct uxterm -e emacsclient -nw + +** Visualize the active Modus theme's palette +:properties: +:custom_id: h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d +:end: +#+findex: modus-themes-list-colors +#+findex: modus-themes-list-colors-current +#+cindex: Preview color values + +The command ~modus-themes-list-colors~ prompts for a choice between +=modus-operandi= and =modus-vivendi= to produce a help buffer that shows a +preview of each variable in the given theme's color palette. The +command ~modus-themes-list-colors-current~ skips the prompt, using the +current Modus theme. + +Each row shows a foreground and background coloration using the +underlying value it references. For example a line with =#a60000= (a +shade of red) will show red text followed by a stripe with that same +color as a backdrop. + +The name of the buffer describes the given Modus theme. It is thus +called =*modus-operandi-list-colors*= or =*modus-vivendi-list-colors*=. + ** Per-theme customization settings :properties: :custom_id: h:a897b302-8e10-4a26-beab-3caaee1e1193 @@ -1868,7 +2062,11 @@ ** Case-by-case face specs using the themes' palette #+end_src Do {{{kbd(C-h v)}}} on the aforementioned variables to check all the available -symbols that can be passed to this function. +symbols that can be passed to this function. Or simply invoke the +command ~modus-themes-list-colors~ to produce a buffer with a preview of +each entry in the palette. + +[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Visualize the active Modus theme's palette]]. With that granted, let us expand the example to actually change the ~cursor~ face's background property. We employ the built-in function of @@ -1947,7 +2145,10 @@ ** Face specs at scale using the themes' palette values by employing the backquote/backtick and comma notation. The values are stored in the alists ~modus-themes-operandi-colors~ and ~modus-themes-vivendi-colors~, while the macro always queries that of the -active Modus theme. +active Modus theme (preview the current palette with the command +~modus-themes-list-colors~). + +[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Visualize the active Modus theme's palette]]. Here is an abstract example that just returns a list of color values while ~modus-operandi~ is enabled: @@ -2288,6 +2489,8 @@ ** Override colors ~modus-themes-vivendi-colors~ respectively. As with all customisations, overriding must be done before loading the affected theme. +[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Visualize the active Modus theme's palette]]. + Let us approach the present topic one step at a time. Here is a simplified excerpt of the default palette for Modus Operandi with some basic background values that apply to buffers and the mode line @@ -2509,6 +2712,71 @@ ** Override color saturation ('modus-vivendi (modus-themes-load-vivendi)))) #+end_src +** Override colors through blending +:properties: +:custom_id: h:80c326bf-fe32-47b2-8c59-58022256fd6e +:end: +#+cindex: Change theme colors through blending + +This is yet another method of overriding color values. + +[[#h:307d95dd-8dbd-4ece-a543-10ae86f155a6][Override colors]]. + +[[#h:4589acdc-2505-41fc-9f5e-699cfc45ab00][Override color saturation]]. + +Building on ideas and concepts from the previous sections, this method +blends the entire palette at once with the chosen colors. The function +~my-modus-themes-interpolate~ blends two colors, taking a value from the +themes and mixing it with a user-defined color to arrive at a midpoint. +This scales to all background and foreground colors with the help of the +~my-modus-themes-tint-palette~ function. + +#+begin_src emacs-lisp +(setq my-modus-operandi-bg-blend "#fbf1c7" + my-modus-operandi-fg-blend "#3a6084" + my-modus-vivendi-bg-blend "#3a4042" + my-modus-vivendi-fg-blend "#d7b765") + +;; Adapted from the `kurecolor-interpolate' function of kurecolor.el +(defun my-modus-themes-interpolate (color1 color2) + (cl-destructuring-bind (r g b) + (mapcar #'(lambda (n) (* (/ n 2) 255.0)) + (cl-mapcar '+ (color-name-to-rgb color1) (color-name-to-rgb color2))) + (format "#%02X%02X%02X" r g b))) + +(defun my-modus-themes-tint-palette (palette bg-blend fg-blend) + "Modify Modus PALETTE programmatically and return a new palette. +Blend background colors with BG-BLEND and foreground colors with FG-BLEND." + (let (name cons colors) + (dolist (cons palette) + (let ((blend (if (string-match "bg" (symbol-name (car cons))) + bg-blend + fg-blend))) + (setq name (my-modus-themes-interpolate (cdr cons) blend))) + (setq name (format "%s" name)) + (setq cons `(,(car cons) . ,name)) + (push cons colors)) + colors)) + +(define-minor-mode modus-themes-tinted-mode + "Tweak some Modus themes colors." + :init-value nil + :global t + (if modus-themes-tinted-mode + (setq modus-themes-operandi-color-overrides + (my-modus-themes-tint-palette modus-themes-operandi-colors + my-modus-operandi-bg-blend + my-modus-operandi-fg-blend) + modus-themes-vivendi-color-overrides + (my-modus-themes-tint-palette modus-themes-vivendi-colors + my-modus-vivendi-bg-blend + my-modus-vivendi-fg-blend)) + (setq modus-themes-operandi-color-overrides nil + modus-themes-vivendi-color-overrides nil))) + +(modus-themes-tinted-mode 1) +#+end_src + ** Font configurations for Org and others :properties: :custom_id: h:defcf4fc-8fa8-4c29-b12e-7119582cc929 @@ -2670,11 +2938,11 @@ ** Configure bold and italic faces [[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the themes' palette]]. -** Custom Org user faces +** Custom Org todo keyword and priority faces :properties: :custom_id: h:89f0678d-c5c3-4a57-a526-668b2bb2d7ad :end: -#+cindex: Org extra faces +#+cindex: Org custom todo faces Users of ~org-mode~ have the option to configure various keywords and priority cookies to better match their workflow. User options are @@ -2758,6 +3026,139 @@ ** Custom Org user faces [[#h:02e25930-e71a-493d-828a-8907fc80f874][Check color combinations]]. +** Custom Org emphasis faces +:properties: +:custom_id: h:26026302-47f4-4471-9004-9665470e7029 +:end: +#+cindex: Org custom emphasis faces + +Org provides the user option ~org-emphasis-alist~ which assosiates a +character with a face, list of faces, or face attributes. The default +specification of that variable looks like this: + +#+begin_src emacs-lisp +(setq org-emphasis-alist + '(("*" bold) + ("/" italic) + ("_" underline) + ("=" org-verbatim verbatim) + ("~" org-code verbatim) + ("+" (:strike-through t)))) +#+end_src + +With the exception of ~org-verbatim~ and ~org-code~ faces, everything else +uses the corresponding type of emphasis: a bold typographic weight, or +italicised, underlined, and struck through text. + +The best way for users to add some extra attributes, such as a +foreground color, is to define their own faces and assign them to the +given emphasis marker/character. + +This is a custom face that extends the standard ~bold~ face with a red +foreground value (so it colorises the text in addition to the bold +weight): + +#+begin_src emacs-lisp +(defface my-org-emphasis-bold + '((default :inherit bold) + (((class color) (min-colors 88) (background light)) + :foreground "#a60000") + (((class color) (min-colors 88) (background dark)) + :foreground "#ff8059")) + "My bold emphasis for Org.") +#+end_src + +This face definition reads as follows: + ++ Always inherit the ~bold~ face ([[#h:2793a224-2109-4f61-a106-721c57c01375][Configure bold and italic faces]]). ++ For versions of Emacs that support at least 88 colors (graphical + Emacs, for example) and use a light background, apply the =#a60000= + value. ++ For the same kind of Emacs that has a dark background use the =#ff8059= + color instead. + +Same principle for how to extend ~italic~ and ~underline~ with, for example, +green and yellow hues, respectively: + +#+begin_src emacs-lisp +(defface my-org-emphasis-italic + '((default :inherit italic) + (((class color) (min-colors 88) (background light)) + :foreground "#005e00") + (((class color) (min-colors 88) (background dark)) + :foreground "#44bc44")) + "My italic emphasis for Org.") + +(defface my-org-emphasis-underline + '((default :inherit underline) + (((class color) (min-colors 88) (background light)) + :foreground "#813e00") + (((class color) (min-colors 88) (background dark)) + :foreground "#d0bc00")) + "My underline emphasis for Org.") +#+end_src + +In the case of a strike-through effect, we have no generic face to +inherit from, so we can write it as follows to also change the +foreground to a more subtle gray: + +#+begin_src emacs-lisp +(defface my-org-emphasis-strike-through + '((default :strike-through t) + (((class color) (min-colors 88) (background light)) + :foreground "#505050") + (((class color) (min-colors 88) (background dark)) + :foreground "#a8a8a8")) + "My strike-through emphasis for Org.") +#+end_src + +Or we can just change the color of the line that strikes through the +text to, for example, a shade of red: + +#+begin_src emacs-lisp +(defface my-org-emphasis-strike-through + '((((class color) (min-colors 88) (background light)) + :strike-through "#972500") + (((class color) (min-colors 88) (background dark)) + :strike-through "#ef8b50")) + "My strike-through emphasis for Org.") +#+end_src + +It is possible to combine those effects: + +#+begin_src emacs-lisp +(defface my-org-emphasis-strike-through + '((((class color) (min-colors 88) (background light)) + :strike-through "#972500" :foreground "#505050") + (((class color) (min-colors 88) (background dark)) + :strike-through "#ef8b50" :foreground "#a8a8a8")) + "My strike-through emphasis for Org.") +#+end_src + +One may inspect the variables ~modus-themes-operandi-colors~ and +~modus-themes-vivendi-colors~ for possible color values. Or call the +command ~modus-themes-list-colors~ to show a buffer that previews each +entry in the palette. + +[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Visualize the active Modus theme's palette]]. + +Once we have defined the faces we need, we must update the +~org-emphasis-alist~. Given that ~org-verbatim~ and ~org-code~ are already +styled by the themes, it probably is best not to edit them: + +#+begin_src emacs-lisp +(setq org-emphasis-alist + '(("*" my-org-emphasis-bold) + ("/" my-org-emphasis-italic) + ("_" my-org-emphasis-underline) + ("=" org-verbatim verbatim) + ("~" org-code verbatim) + ("+" my-org-emphasis-strike-through))) +#+end_src + +That's it! For changes to take effect in already visited Org files, +invoke {{{kbd(M-x org-mode-restart)}}}. + ** Update Org block delimiter fontification :properties: :custom_id: h:f44cc6e3-b0f1-4a5e-8a90-9e48fa557b50 @@ -2954,13 +3355,20 @@ ** Backdrop for pdf-tools (pdf-view-midnight-minor-mode -1)) (my-pdf-tools-backdrop))) +(defun my-pdf-tools-themes-toggle () + (mapc + (lambda (buf) + (with-current-buffer buf + (my-pdf-tools-midnight-mode-toggle))) + (buffer-list))) + (add-hook 'pdf-tools-enabled-hook #'my-pdf-tools-midnight-mode-toggle) -(add-hook 'modus-themes-after-load-theme-hook #'my-pdf-tools-midnight-mode-toggle) +(add-hook 'modus-themes-after-load-theme-hook #'my-pdf-tools-themes-toggle) #+end_src With those in place, PDFs have a distinct backdrop for their page, while -they automatically switch to their dark mode when ~modus-themes-toggle~ is -called from inside a buffer whose major-mode is ~pdf-view-mode~. +buffers with major-mode as ~pdf-view-mode~ automatically switches to dark +mode when ~modus-themes-toggle~ is called. ** Decrease mode line height :properties: @@ -3161,6 +3569,45 @@ ** Diffs with only the foreground removed since version =2.0.0= to ensure that the accessibility standard and aesthetic quality of the themes is not compromised. +** Ediff without diff color-coding +:properties: +:custom_id: h:b0b31802-0216-427e-b071-1a47adcfe608 +:end: + +Ediff uses the same color-coding as ordinary diffs in ~diff-mode~, Magit, +etc. ([[#h:ea7ac54f-5827-49bd-b09f-62424b3b6427][Option for diff buffer looks]]). This is consistent with the +principle of least surprise. + +Users may, however, prefer to treat Ediff differently on the premise +that it does not need any particular color-coding to show added or +removed lines/words: it does not use the =+= or =-= markers, after all. + +This can be achieved by customizing the Ediff faces with color +combinations that do not carry the same connotations as those of diffs. +Consider this example, which leverages the ~modus-themes-with-colors~ +macro ([[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the themes' palette]]): + +#+begin_src emacs-lisp +(defun my-modus-themes-custom-faces () + (modus-themes-with-colors + (custom-set-faces + `(ediff-current-diff-A ((,class :inherit unspecified :background ,bg-special-faint-cold :foreground ,fg-special-cold))) + `(ediff-current-diff-B ((,class :inherit unspecified :background ,bg-special-faint-warm :foreground ,fg-special-warm))) + `(ediff-current-diff-C ((,class :inherit unspecified :background ,bg-special-faint-calm :foreground ,fg-special-calm))) + `(ediff-fine-diff-A ((,class :inherit unspecified :background ,bg-special-cold :foreground ,fg-special-cold))) + `(ediff-fine-diff-B ((,class :inherit unspecified :background ,bg-special-warm :foreground ,fg-special-warm))) + `(ediff-fine-diff-C ((,class :inherit unspecified :background ,bg-special-calm :foreground ,fg-special-calm)))))) + +;; This is so that the changes persist when switching between +;; `modus-operandi' and `modus-vivendi'. +(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces) +#+end_src + +Remove the =:foreground= and its value to preserve the underlying +coloration. + +[[#h:f4d4b71b-2ca5-4c3d-b0b4-9bfd7aa7fb4d][Visualize the active Modus theme's palette]]. + * Face coverage :properties: :custom_id: h:a9c8f29d-7f72-4b54-b74b-ddefe15d6a19 @@ -3186,6 +3633,8 @@ ** Full support for packages or face groups + ace-window + alert + all-the-icons ++ all-the-icons-dired ++ all-the-icons-ibuffer + annotate + ansi-color + anzu @@ -3209,6 +3658,7 @@ ** Full support for packages or face groups + change-log and log-view (such as ~vc-print-log~, ~vc-print-root-log~) + cider + circe ++ citar + color-rg + column-enforce-mode + company-mode* @@ -3257,6 +3707,7 @@ ** Full support for packages or face groups + elfeed-score + elpher + embark ++ ement + emms + enh-ruby-mode (enhanced-ruby-mode) + epa @@ -3348,6 +3799,7 @@ ** Full support for packages or face groups + marginalia + markdown-mode + markup-faces (~adoc-mode~) ++ mct + mentor + messages + minimap @@ -3395,6 +3847,7 @@ ** Full support for packages or face groups + proced + prodigy + pulse ++ pyim + quick-peek + racket-mode + rainbow-blocks @@ -3417,6 +3870,8 @@ ** Full support for packages or face groups + side-notes + sieve-mode + skewer-mode ++ slime (slbd) ++ sly + smart-mode-line + smartparens + smerge @@ -3438,6 +3893,7 @@ ** Full support for packages or face groups + telephone-line + terraform-mode + term ++ textsec + tomatinho + transient (pop-up windows such as Magit's) + trashed @@ -3492,6 +3948,7 @@ ** Indirectly covered packages + counsel-org-capture-string + define-word + disk-usage ++ dtache + easy-kill + edit-indirect + evil-owl @@ -3504,6 +3961,7 @@ ** Indirectly covered packages + i3wm-config-mode + minibuffer-line + no-emoji ++ org-remark + parrot + perl-mode + php-mode @@ -3597,14 +4055,15 @@ ** Note on underlines in compilation buffers 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: +To outright disable the effect, use this (buffers need to be generated +anew): #+begin_src emacs-lisp (setq compilation-message-face nil) #+end_src If some element of differentiation is still desired, a good option is to -render the affected text using the ~italic~ face: +render the affected text with the ~italic~ face: #+begin_src emacs-lisp (setq compilation-message-face 'italic) @@ -4075,20 +4534,66 @@ ** Note on SHR colors Consult {{{kbd(C-h v shr-use-colors)}}}. -** Note on EWW and Elfeed fonts +** Note on SHR fonts :properties: :custom_id: h:e6c5451f-6763-4be7-8fdb-b4706a422a4c :end: +#+cindex: Fonts in EWW, Elfeed, Ement, and SHR -EWW and Elfeed rely on the Simple HTML Renderer to display their -content. The {{{file(shr.el)}}} library contains the variable ~shr-use-fonts~ -that controls whether the text in the buffer is set to a ~variable-pitch~ -typeface (proportionately spaced) or if just retains whatever the -default font family is. Its default value is non-nil, which means that -~variable-pitch~ is applied. +By default, packages that build on top of the Simple HTML Remember (=shr=) +use proportionately spaced fonts. This is controlled by the user option +~shr-use-fonts~, which is set to non-nil by default. To use the standard +font instead, set that variable to nil. [[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and others]]. +Packages affected by this are: + ++ elfeed ++ ement ++ eww + +This is a non-exhaustive list. + +** Note on Ement colors and fonts +:properties: +:custom_id: h:8e636056-356c-4ca7-bc78-ebe61031f585 +:end: + +The =ement.el= library by Adam Porter (also known as "alphapapa") defaults +to a method of colorizing usernames in a rainbow style. This is +controlled by the user option ~ement-room-prism~ and can be disabled with: + +#+begin_src emacs-lisp +(setq ement-room-prism nil) +#+end_src + +The contrast ratio of these colors is governed by another user option: +~ement-room-prism-minimum-contrast~. By default, it is set to 6 which is +slightly below our nominal target. Try this instead: + +#+begin_src emacs-lisp +(setq ement-room-prism-minimum-contrast 7) +#+end_src + +With regard to fonts, Ement depends on =shr= ([[#h:e6c5451f-6763-4be7-8fdb-b4706a422a4c][Note on SHR fonts]]). + +Since we are here, here is an excerpt from Ement's source code: + +#+begin_src emacs-lisp +(defcustom ement-room-prism-minimum-contrast 6 + "Attempt to enforce this minimum contrast ratio for user faces. +This should be a reasonable number from, e.g. 0-7 or so." + ;; Prot would almost approve of this default. :) I would go all the way + ;; to 7, but 6 already significantly dilutes the colors in some cases. + :type 'number) +#+end_src + +Yes, I do approve of that default. Even a 4.5 (the WCAG AA rating) +would be a good baseline for many themes and/or user configurations. +Our target is the highest of the sort, though we do not demand that +everyone conforms with it. + ** Note on Helm grep :properties: :custom_id: h:d28879a2-8e4b-4525-986e-14c0f873d229 @@ -4400,6 +4905,139 @@ ** What is the best setup for legibility? the remaining contributing factors in each case need to be considered in full. +** Are these color schemes? +:properties: +:custom_id: h:a956dbd3-8fd2-4f5d-8b01-5f881268cf2b +:end: +#+cindex: Themes, not color schemes + +No, the Modus themes are not color schemes. + +A color scheme is a collection of colors. A good color scheme is a +combination of colors with an inner logic or abstract structure. + +A theme is a set of patterns that are applied across different contexts. +A good theme is one that does so with consistency, though not +uniformity. + +In practical terms, a color scheme is what one uses when, for example, +they edit the first sixteen escape sequences of a terminal emulator to +the hues of their preference. The terminal offers the option to choose, +say, the exact value of what counts as "red", but does not provide the +means to control where that is mapped to and whether it should also have +other qualities such as a bold weight for the underlying text or an +added background color. In contradistinction, Emacs uses constructs +known as "faces" which allow the user/developer to specify where a given +color will be used and whether it should be accompanied by other +typographic or stylistic attributes. + +By configuring the multitude of faces on offer we thus control both +which colors are applied and how they appear in their context. When a +package wants to render each instance of "foo" with the "bar" face, it +is not requesting a specific color, which makes things considerably more +flexible as we can treat "bar" in its own right without necessarily +having to use some color value that we hardcoded somewhere. + +Which brings us to the distinction between consistency and uniformity +where our goal is always the former: we want things to look similar +across all interfaces, but we must never force a visual identity where +that runs contrary to the functionality of the given interface. For +instance, all links are underlined by default yet there are cases such +as when viewing listings of emails in Gnus (and Mu4e, Notmuch) where (i) +it is already understood that one must follow the indicator or headline +to view its contents and (ii) underlining everything would make the +interface virtually unusable. + +[[#h:5808be52-361a-4d18-88fd-90129d206f9b][Option for links]]. + +Again, one must exercise judgement in order to avoid discrimination, +where "discrimination" refers to: + ++ The treatment of substantially different magnitudes as if they were of + the same class. ++ Or the treatment of the same class of magnitudes as if they were of a + different class. + +(To treat similar things differently; to treat dissimilar things alike.) + +If, in other words, one was to enforce uniformity without accounting for +the particular requirements of each case---the contextual demands for +usability beyond matters of color---they would be making a +not-so-obvious error of treating different cases as if they were the +same. + +The Modus themes prioritise "thematic consistency" over abstract harmony +or regularity among their applicable colors. In concrete terms, we do +not claim that, say, our yellows are the best complements for our blues +because we generally avoid using complementary colors side-by-side, so +it is wrong to optimise for a decontextualised blue+yellow combination. +Not to imply that our colors do not work well together because they do, +just to clarify that consistency of context is what themes must strive +for, and that requires widening the scope of the design beyond the +particularities of a color scheme. + +Long story short: color schemes and themes have different requirements. +Please do not conflate the two. + +** Port the Modus themes to other platforms? +:properties: +:custom_id: h:7156b949-917d-488e-9a72-59f70d80729c +:end: +#+cindex: Porting the themes to other editors + +There is no plan to port the themes to other platforms or text editors. +I (Protesilaos) only use GNU Emacs and thus cannot maintain code that +targets software I am either not familiar with or am not using on a +daily basis. + +While it is possible to produce a simulacrum based on a given template, +doing so would run contrary to how this project is maintained where +details matter greatly. + +Each program has its own requirements so it won't always be +possible---or indeed desirable---to have 1:1 correspondence between what +applies to Emacs and what should be done elsewhere. No port should ever +strive to be a faithful copy of the Emacs implementation, as no other +program is an Emacs equivalent, but instead try to follow the spirit of +the design. For example, some of the customization options accept a +list as their value, or an alist, which may not be possible to reproduce +on other platforms. + +[[#h:bf1c82f2-46c7-4eb2-ad00-dd11fdd8b53f][Customization options]]. + +In other words, if something must be done differently on a certain +editor then that is acceptable so long as (i) the accessibility +standards are not compromised and (ii) the overall character of the +themes remains consistent. + +The former criterion should be crystal clear as it pertains to the +scientific foundations of the themes: high legibility and taking care of +the needs of users with red-green colour deficiency (deuteranopia) by +avoiding red+green colour coding paradigms and/or by providing red+blue +variants. + +The latter criterion is the "je ne sais quoi" of the artistic aspect of +the themes, which is partially fleshed out in this manual. + +[[#h:b3384767-30d3-4484-ba7f-081729f03a47][Frequently Asked Questions]]. + +With regard to the artistic aspect (where "art" qua skill may amount to +an imprecise science), there is no hard-and-fast rule in effect as it +requires one to exercise discretion and make decisions based on +context-dependent information or constraints. As is true with most +things in life, when in doubt, do not cling on to the letter of the law +but try to understand its spirit. + +For a trivial example: the curly underline that Emacs draws for spelling +errors is thinner than, e.g., what a graphical web browser has, so if I +was to design for an editor than has a thicker curly underline I would +make the applicable colours less intense to counterbalance the +typographic intensity of the added thickness. + +With those granted, if anyone is willing to develop a port of the +themes, they are welcome to contact me and I will do my best to help +them in their efforts. + * Contributing :properties: :custom_id: h:9c3cd842-14b7-44d7-84b2-a5c8bc3fc3b1 @@ -4523,17 +5161,18 @@ * Acknowledgements + Author/maintainer :: Protesilaos Stavrou. -+ Contributions to code or documentation :: Anders Johansson, Basil - L.{{{space()}}} Contovounesios, Björn Lindström, Carlo Zancanaro, Christian - Tietze, Daniel Mendler, Eli Zaretskii, Fritz Grabo, Illia Ostapyshyn, - Kévin Le Gouguec, Kostadin Ninev, Madhavan Krishnan, Markus Beppler, - Matthew Stevenson, Mauro Aranda, Nicolas De Jaeghere, Philip - Kaludercic, Rudolf Adamkovič, Stephen Gildea, Shreyas Ragavan, Stefan - Kangas, Vincent Murphy, Xinglu Chen. ++ Contributions to code or documentation :: Alex Griffin, Anders + Johansson, Basil L.{{{space()}}} Contovounesios, Björn Lindström, Carlo + Zancanaro, Christian Tietze, Daniel Mendler, Eli Zaretskii, Fritz + Grabo, Illia Ostapyshyn, Kévin Le Gouguec, Kostadin Ninev, Madhavan + Krishnan, Markus Beppler, Matthew Stevenson, Mauro Aranda, Nicolas De + Jaeghere, Philip Kaludercic, Rudolf Adamkovič, Stephen Gildea, Shreyas + Ragavan, Stefan Kangas, Utkarsh Singh, Vincent Murphy, Xinglu Chen, + Yuanchen Xie. + Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers, - Adrian Manea, Alex Griffin, Alex Peitsinis, Alexey Shmalko, Alok - Singh, Anders Johansson, André Alexandre Gomes, Arif Rezai, Basil + Adrian Manea, Alex Griffin, Alex Koen, Alex Peitsinis, Alexey Shmalko, + Alok Singh, Anders Johansson, André Alexandre Gomes, Arif Rezai, Basil L.{{{space()}}} Contovounesios, Burgess Chang, Christian Tietze, Christopher Dimech, Damien Cassou, Daniel Mendler, Dario Gjorgjevski, David Edmondson, Davor Rotim, Divan Santana, Eliraz Kedmi, Emanuele Michele @@ -4541,17 +5180,18 @@ * Acknowledgements Agbobada, Gianluca Recchia, Guilherme Semente, Gustavo Barros, Hörmetjan Yiltiz, Ilja Kocken, Iris Garcia, Jeremy Friesen, Jerry Zhang, Johannes Grødem, 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. + Kévin Le Gouguec, Kostadin Ninev, Len Trigg, Magne Hov, Manuel Uberti, + Mark Bestley, 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, Samuel Culpepper, Saša Janiška, + Shreyas Ragavan, Simon Pugnet, Tassilo Horn, Thibaut Verron, Thomas + Heartman, Togan Muftuoglu, Trey Merkley, Tomasz Hołubowicz, Toon + Claes, Uri Sharf, Utkarsh Singh, Vincent Foley. As well as users: + Ben, CsBigDataHub1, Emacs Contrib, Eugene, Fourchaux, Fredrik, + Moesasji, Nick, TheBlob42, Trey, bepolymathe, bit9tream, derek-upham, + doolio, fleimgruber, gitrj95, iSeeU, jixiuf, okamsn, pRot0ta1p. + Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii, Glenn Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core Emacs), @@ -4589,6 +5229,8 @@ * Meta + [[https://protesilaos.com/codelog/2021-01-11-modus-themes-review-select-faint-colours/][Modus themes: review of select "faint" colours]] (2021-01-11) + [[https://protesilaos.com/codelog/2021-02-25-modus-themes-diffs-deuteranopia/][The Modus themes now cover deuteranopia in diffs]] (2021-02-25) + [[https://protesilaos.com/codelog/2021-06-02-modus-themes-org-agenda/][Introducing the variable modus-themes-org-agenda]] (2021-06-02) ++ [[https://protesilaos.com/codelog/2022-01-02-review-modus-themes-org-habit-colours/][Modus themes: review of the org-habit graph colours]] (2022-01-02) ++ [[https://protesilaos.com/codelog/2022-01-03-modus-themes-port-faq/][Re: VSCode or Vim ports of the Emacs modus-themes?]] (2022-01-03) And here are the canonical sources of this project's documentation: diff --git a/etc/themes/modus-operandi-theme.el b/etc/themes/modus-operandi-theme.el index a5e8fc701c..aac5b04c6a 100644 --- a/etc/themes/modus-operandi-theme.el +++ b/etc/themes/modus-operandi-theme.el @@ -1,10 +1,10 @@ -;;; modus-operandi-theme.el --- Accessible light theme (WCAG AAA) -*- lexical-binding:t -*- +;;; modus-operandi-theme.el --- Accessible and customizable light theme (WCAG AAA) -*- lexical-binding:t -*- -;; Copyright (C) 2019-2022 Free Software Foundation, Inc. +;; Copyright (C) 2019-2022 Free Software Foundation, Inc. ;; Author: Protesilaos Stavrou ;; URL: https://gitlab.com/protesilaos/modus-themes -;; Version: 2.0.0 +;; Version: 2.1.0 ;; Package-Requires: ((emacs "27.1")) ;; Keywords: faces, theme, accessibility diff --git a/etc/themes/modus-themes.el b/etc/themes/modus-themes.el index 8afa961ba3..a902cc8ca2 100644 --- a/etc/themes/modus-themes.el +++ b/etc/themes/modus-themes.el @@ -1,11 +1,11 @@ -;;; modus-themes.el --- Highly accessible themes (WCAG AAA) -*- lexical-binding:t -*- +;;; modus-themes.el --- Highly accessible and customizable themes (WCAG AAA) -*- lexical-binding:t -*- -;; Copyright (C) 2019-2022 Free Software Foundation, Inc. +;; Copyright (C) 2019-2022 Free Software Foundation, Inc. ;; Author: Protesilaos Stavrou ;; URL: https://gitlab.com/protesilaos/modus-themes -;; Version: 2.0.0 -;; Last-Modified: <2021-12-24 12:35:25 +0200> +;; Version: 2.1.0 +;; Last-Modified: <2022-02-17 10:36:27 +0200> ;; Package-Requires: ((emacs "27.1")) ;; Keywords: faces, theme, accessibility @@ -40,11 +40,11 @@ ;;; Commentary: ;; modus-themes-bold-constructs (boolean) ;; modus-themes-deuteranopia (boolean) ;; modus-themes-inhibit-reload (boolean) -;; modus-themes-intense-markup (boolean) ;; modus-themes-italic-constructs (boolean) ;; modus-themes-mixed-fonts (boolean) ;; modus-themes-subtle-line-numbers (boolean) ;; modus-themes-variable-pitch-ui (boolean) +;; modus-themes-box-buttons (choice) ;; modus-themes-completions (choice) ;; modus-themes-diffs (choice) ;; modus-themes-fringes (choice) @@ -52,6 +52,7 @@ ;;; Commentary: ;; modus-themes-lang-checkers (choice) ;; modus-themes-links (choice) ;; modus-themes-mail-citations (choice) +;; modus-themes-markup (choice) ;; modus-themes-mode-line (choice) ;; modus-themes-org-blocks (choice) ;; modus-themes-paren-match (choice) @@ -74,6 +75,8 @@ ;;; Commentary: ;; ace-window ;; alert ;; all-the-icons +;; all-the-icons-dired +;; all-the-icons-ibuffer ;; annotate ;; ansi-color ;; anzu @@ -97,6 +100,7 @@ ;;; Commentary: ;; change-log and log-view (`vc-print-log' and `vc-print-root-log') ;; cider ;; circe +;; citar ;; color-rg ;; column-enforce-mode ;; company-mode @@ -146,6 +150,7 @@ ;;; Commentary: ;; elfeed-score ;; elpher ;; embark +;; ement (ement.el) ;; emms ;; enh-ruby-mode (enhanced-ruby-mode) ;; epa @@ -235,6 +240,7 @@ ;;; Commentary: ;; marginalia ;; markdown-mode ;; markup-faces (`adoc-mode') +;; mct ;; mentor ;; messages ;; minimap @@ -281,6 +287,7 @@ ;;; Commentary: ;; proced ;; prodigy ;; pulse +;; pyim ;; quick-peek ;; racket-mode ;; rainbow-blocks @@ -303,6 +310,8 @@ ;;; Commentary: ;; side-notes ;; sieve-mode ;; skewer-mode +;; slime (sldb) +;; sly ;; smart-mode-line ;; smartparens ;; smerge @@ -323,6 +332,7 @@ ;;; Commentary: ;; telephone-line ;; terraform-mode ;; term +;; textsec ;; tomatinho ;; transient (pop-up windows like Magit's) ;; trashed @@ -412,10 +422,10 @@ (defconst modus-themes-operandi-colors ;; highlighted constructs; they must either be used as pairs based ;; on their name or each can be combined with {fg,bg}-{main,alt,dim} ;; always in accordance with their role as background or foreground - (bg-special-cold . "#dde3f4") (fg-special-cold . "#093060") - (bg-special-mild . "#c4ede0") (fg-special-mild . "#184034") - (bg-special-warm . "#f0e0d4") (fg-special-warm . "#5d3026") - (bg-special-calm . "#f8ddea") (fg-special-calm . "#61284f") + (bg-special-cold . "#dde3f4") (bg-special-faint-cold . "#f0f1ff") (fg-special-cold . "#093060") + (bg-special-mild . "#c4ede0") (bg-special-faint-mild . "#ebf5eb") (fg-special-mild . "#184034") + (bg-special-warm . "#f0e0d4") (bg-special-faint-warm . "#fef2ea") (fg-special-warm . "#5d3026") + (bg-special-calm . "#f8ddea") (bg-special-faint-calm . "#faeff9") (fg-special-calm . "#61284f") ;; foregrounds that can be combined with bg-main, bg-dim, bg-alt (red . "#a60000") (red-alt . "#972500") @@ -495,18 +505,18 @@ (defconst modus-themes-operandi-colors ;; those background values should only be used for graphs or similar ;; applications where colored blocks are expected to be positioned ;; next to each other - (red-graph-0-bg . "#ef6f79") - (red-graph-1-bg . "#ff9f9f") - (green-graph-0-bg . "#49d239") - (green-graph-1-bg . "#6dec6d") - (yellow-graph-0-bg . "#efec08") - (yellow-graph-1-bg . "#dbff4e") - (blue-graph-0-bg . "#55a2f0") - (blue-graph-1-bg . "#7fcfff") - (magenta-graph-0-bg . "#ba86ef") - (magenta-graph-1-bg . "#e7afff") - (cyan-graph-0-bg . "#30d3f0") - (cyan-graph-1-bg . "#6fefff") + (red-graph-0-bg . "#ef7969") + (red-graph-1-bg . "#ffaab4") + (green-graph-0-bg . "#4faa09") + (green-graph-1-bg . "#8fef00") + (yellow-graph-0-bg . "#ffcf00") + (yellow-graph-1-bg . "#f9ff00") + (blue-graph-0-bg . "#7090ff") + (blue-graph-1-bg . "#9fc6ff") + (magenta-graph-0-bg . "#e07fff") + (magenta-graph-1-bg . "#fad0ff") + (cyan-graph-0-bg . "#70d3f0") + (cyan-graph-1-bg . "#afefff") ;; the following are for cases where both the foreground and the ;; background need to have a similar hue and so must be combined ;; with themselves, even though the foregrounds can be paired with @@ -545,6 +555,8 @@ (defconst modus-themes-operandi-colors ;; while bg-tab-inactive should be combined with fg-dim, whereas ;; bg-tab-inactive-alt goes together with fg-main ;; + ;; bg-completion-* variants are meant to be combined with fg-main + ;; ;; fg-escape-char-construct and fg-escape-char-backslash can ;; be combined bg-main, bg-dim, bg-alt ;; @@ -564,7 +576,7 @@ (defconst modus-themes-operandi-colors ;; all pairs are combinable with themselves (bg-hl-line . "#f2eff3") (bg-hl-line-intense . "#e0e0e0") - (bg-hl-line-intense-accent . "#b9e1ef") + (bg-hl-line-intense-accent . "#cfe2ff") (bg-hl-alt . "#fbeee0") (bg-hl-alt-intense . "#e8dfd1") (bg-paren-match . "#e0af82") @@ -574,6 +586,10 @@ (defconst modus-themes-operandi-colors (bg-region-accent . "#afafef") (bg-region-accent-subtle . "#efdfff") + (bg-completion-nuanced . "#dfe5ff") + (bg-completion-subtle . "#c3d4ff") + (bg-completion-intense . "#9fc8ff") + (bg-tab-active . "#f6f6f6") (bg-tab-inactive . "#b7b7b7") (bg-tab-inactive-accent . "#a9b4f6") @@ -653,10 +669,10 @@ (defconst modus-themes-vivendi-colors ;; highlighted constructs; they must either be used as pairs based ;; on their name or each can be combined with {fg,bg}-{main,alt,dim} ;; always in accordance with their role as background or foreground - (bg-special-cold . "#203448") (fg-special-cold . "#c6eaff") - (bg-special-mild . "#00322e") (fg-special-mild . "#bfebe0") - (bg-special-warm . "#382f27") (fg-special-warm . "#f8dec0") - (bg-special-calm . "#392a48") (fg-special-calm . "#fbd6f4") + (bg-special-cold . "#203448") (bg-special-faint-cold . "#0e183a") (fg-special-cold . "#c6eaff") + (bg-special-mild . "#00322e") (bg-special-faint-mild . "#001f1a") (fg-special-mild . "#bfebe0") + (bg-special-warm . "#382f27") (bg-special-faint-warm . "#241613") (fg-special-warm . "#f8dec0") + (bg-special-calm . "#392a48") (bg-special-faint-calm . "#251232") (fg-special-calm . "#fbd6f4") ;; foregrounds that can be combined with bg-main, bg-dim, bg-alt (red . "#ff8059") (red-alt . "#ef8b50") @@ -736,18 +752,18 @@ (defconst modus-themes-vivendi-colors ;; those background values should only be used for graphs or similar ;; applications where colored blocks are expected to be positioned ;; next to each other - (red-graph-0-bg . "#af0404") - (red-graph-1-bg . "#801f2f") - (green-graph-0-bg . "#24ba2f") - (green-graph-1-bg . "#0f8f07") - (yellow-graph-0-bg . "#ffd03e") - (yellow-graph-1-bg . "#d7d800") - (blue-graph-0-bg . "#406fff") - (blue-graph-1-bg . "#2f50c8") - (magenta-graph-0-bg . "#af7bee") - (magenta-graph-1-bg . "#7f59cf") - (cyan-graph-0-bg . "#47dcfa") - (cyan-graph-1-bg . "#0bc0df") + (red-graph-0-bg . "#b52c2c") + (red-graph-1-bg . "#702020") + (green-graph-0-bg . "#4fd100") + (green-graph-1-bg . "#007800") + (yellow-graph-0-bg . "#f1e00a") + (yellow-graph-1-bg . "#b08600") + (blue-graph-0-bg . "#2fafef") + (blue-graph-1-bg . "#1f2f8f") + (magenta-graph-0-bg . "#bf94fe") + (magenta-graph-1-bg . "#5f509f") + (cyan-graph-0-bg . "#47dfea") + (cyan-graph-1-bg . "#00808f") ;; the following are for cases where both the foreground and the ;; background need to have a similar hue and so must be combined ;; with themselves, even though the foregrounds can be paired with @@ -786,6 +802,8 @@ (defconst modus-themes-vivendi-colors ;; while bg-tab-inactive should be combined with fg-dim, whereas ;; bg-tab-inactive-alt goes together with fg-main ;; + ;; bg-completion-* variants are meant to be combined with fg-main + ;; ;; fg-escape-char-construct and fg-escape-char-backslash can ;; be combined bg-main, bg-dim, bg-alt ;; @@ -805,16 +823,20 @@ (defconst modus-themes-vivendi-colors ;; all pairs are combinable with themselves (bg-hl-line . "#151823") (bg-hl-line-intense . "#292929") - (bg-hl-line-intense-accent . "#00353f") + (bg-hl-line-intense-accent . "#002a4f") (bg-hl-alt . "#181732") (bg-hl-alt-intense . "#282e46") - (bg-paren-match . "#5f362f") + (bg-paren-match . "#6f3355") (bg-paren-match-intense . "#7416b5") (bg-paren-expression . "#221044") (bg-region . "#3c3c3c") (bg-region-accent . "#4f3d88") (bg-region-accent-subtle . "#240f55") + (bg-completion-nuanced . "#1a2854") + (bg-completion-subtle . "#282878") + (bg-completion-intense . "#323da2") + (bg-tab-active . "#0e0e0e") (bg-tab-inactive . "#424242") (bg-tab-inactive-accent . "#35398f") @@ -888,7 +910,7 @@ (defface modus-themes-subtle-red nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-subtle-green nil "Subtle green background combined with a dimmed foreground. @@ -896,7 +918,7 @@ (defface modus-themes-subtle-green nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-subtle-yellow nil "Subtle yellow background combined with a dimmed foreground. @@ -904,7 +926,7 @@ (defface modus-themes-subtle-yellow nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-subtle-blue nil "Subtle blue background combined with a dimmed foreground. @@ -912,7 +934,7 @@ (defface modus-themes-subtle-blue nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-subtle-magenta nil "Subtle magenta background combined with a dimmed foreground. @@ -920,7 +942,7 @@ (defface modus-themes-subtle-magenta nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-subtle-cyan nil "Subtle cyan background combined with a dimmed foreground. @@ -928,7 +950,7 @@ (defface modus-themes-subtle-cyan nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-subtle-neutral nil "Subtle gray background combined with a dimmed foreground. @@ -936,7 +958,7 @@ (defface modus-themes-subtle-neutral nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-intense-red nil "Intense red background combined with the main foreground. @@ -944,7 +966,7 @@ (defface modus-themes-intense-red nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-intense-green nil "Intense green background combined with the main foreground. @@ -952,7 +974,7 @@ (defface modus-themes-intense-green nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-intense-yellow nil "Intense yellow background combined with the main foreground. @@ -960,7 +982,7 @@ (defface modus-themes-intense-yellow nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-intense-blue nil "Intense blue background combined with the main foreground. @@ -968,7 +990,7 @@ (defface modus-themes-intense-blue nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-intense-magenta nil "Intense magenta background combined with the main foreground. @@ -976,7 +998,7 @@ (defface modus-themes-intense-magenta nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-intense-cyan nil "Intense cyan background combined with the main foreground. @@ -984,7 +1006,7 @@ (defface modus-themes-intense-cyan nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-intense-neutral nil "Intense gray background combined with the main foreground. @@ -992,7 +1014,7 @@ (defface modus-themes-intense-neutral nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-refine-red nil "Combination of accented red background and foreground. @@ -1000,7 +1022,7 @@ (defface modus-themes-refine-red nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-refine-green nil "Combination of accented green background and foreground. @@ -1008,7 +1030,7 @@ (defface modus-themes-refine-green nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-refine-yellow nil "Combination of accented yellow background and foreground. @@ -1016,7 +1038,7 @@ (defface modus-themes-refine-yellow nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-refine-blue nil "Combination of accented blue background and foreground. @@ -1024,7 +1046,7 @@ (defface modus-themes-refine-blue nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-refine-magenta nil "Combination of accented magenta background and foreground. @@ -1032,7 +1054,7 @@ (defface modus-themes-refine-magenta nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-refine-cyan nil "Combination of accented cyan background and foreground. @@ -1040,91 +1062,91 @@ (defface modus-themes-refine-cyan nil or for completion interfaces. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-nuanced-red nil "A nuanced red background. @@ -1134,7 +1156,7 @@ (defface modus-themes-nuanced-red nil on display. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-nuanced-green nil "A nuanced green background. @@ -1144,7 +1166,7 @@ (defface modus-themes-nuanced-green nil on display. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-nuanced-yellow nil "A nuanced yellow background. @@ -1154,7 +1176,7 @@ (defface modus-themes-nuanced-yellow nil on display. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-nuanced-blue nil "A nuanced blue background. @@ -1164,7 +1186,7 @@ (defface modus-themes-nuanced-blue nil on display. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-nuanced-magenta nil "A nuanced magenta background. @@ -1174,7 +1196,7 @@ (defface modus-themes-nuanced-magenta nil on display. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-nuanced-cyan nil "A nuanced cyan background. @@ -1184,7 +1206,7 @@ (defface modus-themes-nuanced-cyan nil on display. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-special-cold nil "Combines the 'special cold' background and foreground values. @@ -1193,7 +1215,7 @@ (defface modus-themes-special-cold nil not be appropriate. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-special-mild nil "Combines the 'special mild' background and foreground values. @@ -1202,7 +1224,7 @@ (defface modus-themes-special-mild nil not be appropriate. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-special-warm nil "Combines the 'special warm' background and foreground values. @@ -1211,7 +1233,7 @@ (defface modus-themes-special-warm nil not be appropriate. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-special-calm nil "Combines the 'special calm' background and foreground values. @@ -1220,7 +1242,7 @@ (defface modus-themes-special-calm nil not be appropriate. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-diff-added nil "Combines green colors for the 'added' state in diffs. @@ -1228,7 +1250,7 @@ (defface modus-themes-diff-added nil `modus-themes-diffs'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-diff-changed nil "Combines yellow colors for the 'changed' state in diffs. @@ -1236,7 +1258,7 @@ (defface modus-themes-diff-changed nil `modus-themes-diffs'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-diff-removed nil "Combines red colors for the 'removed' state in diffs. @@ -1244,7 +1266,7 @@ (defface modus-themes-diff-removed nil `modus-themes-diffs'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-diff-refine-added nil "Combines green colors for word-wise 'added' state in diffs. @@ -1252,7 +1274,7 @@ (defface modus-themes-diff-refine-added nil `modus-themes-diffs'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-diff-refine-changed nil "Combines yellow colors for word-wise 'changed' state in diffs. @@ -1260,7 +1282,7 @@ (defface modus-themes-diff-refine-changed nil `modus-themes-diffs'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-diff-refine-removed nil "Combines red colors for word-wise 'removed' state in diffs. @@ -1268,7 +1290,7 @@ (defface modus-themes-diff-refine-removed nil `modus-themes-diffs'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-diff-focus-added nil "Combines green colors for the focused 'added' state in diffs. @@ -1276,7 +1298,7 @@ (defface modus-themes-diff-focus-added nil `modus-themes-diffs'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-diff-focus-changed nil "Combines yellow colors for the focused 'changed' state in. @@ -1284,7 +1306,7 @@ (defface modus-themes-diff-focus-changed nil `modus-themes-diffs'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-diff-focus-removed nil "Combines red colors for the focused 'removed' state in diffs. @@ -1292,7 +1314,7 @@ (defface modus-themes-diff-focus-removed nil `modus-themes-diffs'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-diff-heading nil "Combines blue colors for the diff hunk heading. @@ -1300,40 +1322,40 @@ (defface modus-themes-diff-heading nil `modus-themes-diffs'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-heading-1 nil "General purpose face for use in headings level 1. @@ -1341,7 +1363,7 @@ (defface modus-themes-heading-1 nil values assigned to the `modus-themes-headings' variable. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-heading-2 nil "General purpose face for use in headings level 2. @@ -1349,7 +1371,7 @@ (defface modus-themes-heading-2 nil values assigned to the `modus-themes-headings' variable. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-heading-3 nil "General purpose face for use in headings level 3. @@ -1357,7 +1379,7 @@ (defface modus-themes-heading-3 nil values assigned to the `modus-themes-headings' variable. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-heading-4 nil "General purpose face for use in headings level 4. @@ -1365,7 +1387,7 @@ (defface modus-themes-heading-4 nil values assigned to the `modus-themes-headings' variable. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-heading-5 nil "General purpose face for use in headings level 5. @@ -1373,7 +1395,7 @@ (defface modus-themes-heading-5 nil values assigned to the `modus-themes-headings' variable. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-heading-6 nil "General purpose face for use in headings level 6. @@ -1381,7 +1403,7 @@ (defface modus-themes-heading-6 nil values assigned to the `modus-themes-headings' variable. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-heading-7 nil "General purpose face for use in headings level 7. @@ -1389,7 +1411,7 @@ (defface modus-themes-heading-7 nil values assigned to the `modus-themes-headings' variable. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-heading-8 nil "General purpose face for use in headings level 8. @@ -1397,7 +1419,7 @@ (defface modus-themes-heading-8 nil values assigned to the `modus-themes-headings' variable. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-hl-line nil "General purpose face for the current line. @@ -1405,21 +1427,21 @@ (defface modus-themes-hl-line nil values assigned to the `modus-themes-hl-line' variable. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-bold nil "Generic face for applying a conditional bold weight. This behaves in accordance with `modus-themes-bold-constructs'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-slant nil "Generic face for applying a conditional slant (italics). This behaves in accordance with `modus-themes-italic-constructs'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-variable-pitch nil "Generic face for applying a conditional `variable-pitch'. @@ -1428,127 +1450,19 @@ (defface modus-themes-variable-pitch nil and `modus-themes-variable-pitch-ui'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-fixed-pitch nil "Generic face for applying a conditional `fixed-pitch'. This behaves in accordance with `modus-themes-mixed-fonts'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-ui-variable-pitch nil "Face for `modus-themes-variable-pitch-ui'. 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. -This is intended to be applied in contexts such as the Org agenda -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'." - :group 'modus-theme-faces) - -(defface modus-themes-graph-red-1 nil - "Special prominent red face for use in graphs. -This is intended to be applied in contexts such as the Org agenda -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'." - :group 'modus-theme-faces) - -(defface modus-themes-graph-green-0 nil - "Special subdued green face for use in graphs. -This is intended to be applied in contexts such as the Org agenda -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'." - :group 'modus-theme-faces) - -(defface modus-themes-graph-green-1 nil - "Special prominent green face for use in graphs. -This is intended to be applied in contexts such as the Org agenda -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'." - :group 'modus-theme-faces) - -(defface modus-themes-graph-yellow-0 nil - "Special subdued yellow face for use in graphs. -This is intended to be applied in contexts such as the Org agenda -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'." - :group 'modus-theme-faces) - -(defface modus-themes-graph-yellow-1 nil - "Special prominent yellow face for use in graphs. -This is intended to be applied in contexts such as the Org agenda -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'." - :group 'modus-theme-faces) - -(defface modus-themes-graph-blue-0 nil - "Special subdued blue face for use in graphs. -This is intended to be applied in contexts such as the Org agenda -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'." - :group 'modus-theme-faces) - -(defface modus-themes-graph-blue-1 nil - "Special prominent blue face for use in graphs. -This is intended to be applied in contexts such as the Org agenda -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'." - :group 'modus-theme-faces) - -(defface modus-themes-graph-magenta-0 nil - "Special subdued magenta face for use in graphs. -This is intended to be applied in contexts such as the Org agenda -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'." - :group 'modus-theme-faces) - -(defface modus-themes-graph-magenta-1 nil - "Special prominent magenta face for use in graphs. -This is intended to be applied in contexts such as the Org agenda -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'." - :group 'modus-theme-faces) - -(defface modus-themes-graph-cyan-0 nil - "Special subdued cyan face for use in graphs. -This is intended to be applied in contexts such as the Org agenda -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'." - :group 'modus-theme-faces) - -(defface modus-themes-graph-cyan-1 nil - "Special prominent cyan face for use in graphs. -This is intended to be applied in contexts such as the Org agenda -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'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-lang-note nil "Generic face for linter or spell checker notes. @@ -1556,7 +1470,7 @@ (defface modus-themes-lang-note nil `modus-themes-lang-checkers'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-lang-warning nil "Generic face for linter or spell checker warnings. @@ -1564,7 +1478,7 @@ (defface modus-themes-lang-warning nil `modus-themes-lang-checkers'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-lang-error nil "Generic face for linter or spell checker errors. @@ -1572,7 +1486,7 @@ (defface modus-themes-lang-error nil `modus-themes-lang-checkers'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-reset-soft nil "Generic face to set most face properties to nil. @@ -1583,7 +1497,7 @@ (defface modus-themes-reset-soft nil see `modus-themes-reset-hard'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-reset-hard nil "Generic face to set all face properties to nil. @@ -1594,32 +1508,32 @@ (defface modus-themes-reset-hard nil see `modus-themes-reset-soft'. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-key-binding nil "Generic face for key bindings. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-faces) (defface modus-themes-search-success nil "Generic face for successful search. The actual styling of the face is done by `modus-themes-faces'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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'." - :group 'modus-theme-faces) + :group 'modus-themes-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) + :group 'modus-themes-faces) ;; "Grue" is "green" and "blue". (defface modus-themes-grue nil @@ -1682,11 +1596,51 @@ (defface modus-themes-tab-inactive nil The actual styling of the face is done by `modus-themes-faces'." :group 'modus-themes-faces) +(defface modus-themes-markup-code nil + "Face of inline code markup. +The actual styling of the face is done by `modus-themes-faces'." + :group 'modus-themes-faces) + +(defface modus-themes-markup-macro nil + "Face of macro markup. +The actual styling of the face is done by `modus-themes-faces'." + :group 'modus-themes-faces) + (defface modus-themes-markup-verbatim nil "Face of verbatim markup. The actual styling of the face is done by `modus-themes-faces'." :group 'modus-themes-faces) +(defface modus-themes-completion-standard-first-match nil + "Face for the Icomplete/Ido style first match. +The actual styling of the face is done by `modus-themes-faces'." + :group 'modus-themes-faces) + +(defface modus-themes-completion-standard-selected nil + "Face for the standard completion UI current selection. +The actual styling of the face is done by `modus-themes-faces'." + :group 'modus-themes-faces) + +(defface modus-themes-completion-extra-selected nil + "Face for the extra completion UI current selection. +The actual styling of the face is done by `modus-themes-faces'." + :group 'modus-themes-faces) + +(defface modus-themes-completion-key-binding nil + "Face for key bindings in a completion UI context. +The actual styling of the face is done by `modus-themes-faces'." + :group 'modus-themes-faces) + +(defface modus-themes-box-button nil + "Face for widget buttons (e.g. in the Custom UI). +The actual styling of the face is done by `modus-themes-faces'." + :group 'modus-themes-faces) + +(defface modus-themes-box-button-pressed nil + "Face for pressed widget buttons (e.g. in the Custom UI). +The actual styling of the face is done by `modus-themes-faces'." + :group 'modus-themes-faces) + ;;; Customization variables @@ -1827,6 +1781,7 @@ (defcustom modus-themes-mixed-fonts nil (defconst modus-themes--headings-choice '(set :tag "Properties" :greedy t (const :tag "Background color" background) + (const :tag "Proportionately spaced font (variable-pitch)" variable-pitch) (const :tag "Overline" overline) (choice :tag "Font weight (must be supported by the typeface)" (const :tag "Bold (default)" nil) @@ -1890,12 +1845,12 @@ (defcustom modus-themes-headings nil The symbol of a weight attribute adjusts the font of the heading accordingly, such as `light', `semibold', etc. Valid symbols are -defined in the internal variable `modus-themes--heading-weights'. -The absence of a weight means that bold will be used by virtue of -inheriting the `bold' face (check the manual for tweaking bold -and italic faces). For backward compatibility, the `no-bold' -value is accepted, though users are encouraged to specify a -`regular' weight instead. +defined in the variable `modus-themes-weights'. The absence of a +weight means that bold will be used by virtue of inheriting the +`bold' face (check the manual for tweaking bold and italic +faces). For backward compatibility, the `no-bold' value is +accepted, though users are encouraged to specify a `regular' +weight instead. A number, expressed as a floating point (e.g. 1.5), adjusts the height of the heading to that many times the base font size. The @@ -1979,10 +1934,10 @@ (defcustom modus-themes-org-agenda nil small increase in height (a value of 1.15). - The symbol of a weight attribute adjusts the font of the heading accordingly, such as `light', `semibold', etc. Valid - symbols are defined in the internal variable - `modus-themes--heading-weights'. The absence of a weight means - that bold will be used by virtue of inheriting the `bold' - face (check the manual for tweaking bold and italic faces). + symbols are defined in the variable `modus-themes-weights'. + The absence of a weight means that bold will be used by virtue + of inheriting the `bold' face (check the manual for tweaking + bold and italic faces). In case both a number and `no-scale' are in the list, the latter takes precedence. If two numbers are specified, the first one is @@ -2100,11 +2055,10 @@ (defcustom modus-themes-org-agenda nil 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. -- When `modus-themes-deuteranopia' is non-nil the habit graph - uses a three-color style like the aforementioned - `traffic-light' variant, except that shades of blue are applied - instead of green. This is suitable for users with red-green - color deficiency (deuteranopia). +- When `modus-themes-deuteranopia' is non-nil the exact style of + the habit graph adapts to the needs of users with red-green + colour deficiency by substituting every instance of green with + blue or cyan (depending on the specifics). For example: @@ -2112,7 +2066,7 @@ (defcustom modus-themes-org-agenda nil (habit . simplified) (habit . traffic-light)" :group 'modus-themes - :package-version '(modus-themes . "2.0.0") + :package-version '(modus-themes . "2.1.0") :version "29.1" :type '(set (cons :tag "Block header" @@ -2323,25 +2277,32 @@ (defcustom modus-themes-lang-checkers nil :link '(info-link "(modus-themes) Language checkers")) (defcustom modus-themes-org-blocks nil - "Use a subtle gray or color-coded background for Org blocks. + "Set the overall style of Org code blocks, quotes, and the like. -Nil (the default) means that the block has no distinct background -of its own and uses the one that applies to the rest of the -buffer. +Nil (the default) means that the block has no background of its +own: it uses the one that applies to the rest of the buffer. In +this case, the delimiter lines have a gray color for their text, +making them look exactly like all other Org properties. Option `gray-background' applies a subtle gray background to the block's contents. It also affects the begin and end lines of the -block: their background extends to the edge of the window for -Emacs version >= 27 where the ':extend' keyword is recognized by -`set-face-attribute' (this is contingent on the variable -`org-fontify-whole-block-delimiter-line'). +block as they get another shade of gray as their background, +which differentiates them from the contents of the block. All +background colors extend to the edge of the window, giving the +area a rectangular, \"blocky\" presentation. Option `tinted-background' uses a slightly colored background for the contents of the block. The exact color will depend on the programming language and is controlled by the variable `org-src-block-faces' (refer to the theme's source code for the current association list). For this to take effect, the Org -buffer needs to be restarted with `org-mode-restart'. +buffer needs to be restarted with `org-mode-restart'. In this +scenario, it may be better to inhibit the extension of the +delimiter lines' background to the edge of the window because Org +does not provide a mechanism to update their colors depending on +the contents of the block. Disable the extension of such +backgrounds by setting `org-fontify-whole-block-delimiter-line' +to nil. Code blocks use their major mode's colors only when the variable `org-src-fontify-natively' is non-nil. While quote/verse blocks @@ -2353,7 +2314,7 @@ (defcustom modus-themes-org-blocks nil are aliases for `gray-background' and `tinted-background', respectively." :group 'modus-themes - :package-version '(modus-themes . "1.4.0") + :package-version '(modus-themes . "2.1.0") :version "28.1" :type '(choice (const :format "[%v] %t\n" :tag "No Org block background (default)" nil) @@ -2509,8 +2470,9 @@ (defcustom modus-themes-completions nil only or mostly use foreground colors for their interaction model, and (ii) those that combine background and foreground values for some of their metaphors. The former category encompasses -Icomplete, Ido, Selectrum, Vertico, as well as pattern matching -styles like Orderless and Flx. The latter covers Helm and Ivy. +Icomplete, Ido, Selectrum, Vertico, Mct, as well as pattern +matching styles like Orderless and Flx. The latter covers Helm +and Ivy. A value of nil (the default) will simply respect the metaphors of each completion framework. @@ -2518,28 +2480,32 @@ (defcustom modus-themes-completions nil Option `moderate' applies a combination of background and foreground that is fairly subtle. For Icomplete and friends this constitutes a departure from their default aesthetics, however -the difference is small. While Helm, Ivy et al appear slightly +the difference is small. While Helm and Ivy appear slightly different than their original looks, as they are toned down a bit. Option `opinionated' uses color combinations that refashion the completion UI. For the Icomplete camp this means that intense background and foreground combinations are used: in effect their -looks emulate those of Helm, Ivy and company in their original -style. Whereas the other group of packages will revert to an -even more nuanced aesthetic with some additional changes to the -choice of hues. +looks approximate those of Helm and Ivy in their original style. +Whereas the other group of packages will revert to an even more +nuanced aesthetic with some additional changes to the choice of +hues. + +Option `super-opinionated' is like the `opinionated' though it +has a more pronounced effect, especially on the color of the +current line/candidate. To appreciate the scope of this customization option, you should -spend some time with every one of the nil (default), `moderate', -and `opinionated' possibilities." +spend some time with each of those presets." :group 'modus-themes - :package-version '(modus-themes . "1.0.0") - :version "28.1" + :package-version '(modus-themes . "2.1.0") + :version "29.1" :type '(choice (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)) + (const :format "[%v] %t\n" :tag "Alternative to the framework's looks" opinionated) + (const :format "[%v] %t\n" :tag "Radical alternative to the framework's looks" super-opinionated)) :set #'modus-themes--set-option :initialize #'custom-initialize-default :link '(info-link "(modus-themes) Completion UIs")) @@ -2646,21 +2612,56 @@ (defcustom modus-themes-subtle-line-numbers nil :initialize #'custom-initialize-default :link '(info-link "(modus-themes) Line numbers")) -(defcustom modus-themes-intense-markup nil - "Use more intense markup in Org, Markdown, and related. -The default style for certain markup types like inline code and -verbatim constructs in Org and related major modes is a subtle -foreground color combined with a subtle background. +(defcustom modus-themes-markup nil + "Style markup in Org, Markdown, and others. + +This affects constructs such as Org's =verbatim= and ~code~. + +The value is a list of properties, each designated by a symbol. +The default (a nil value or an empty list) is a foreground +color. + +The `italic' property applies a typographic slant (italics). + +The `bold' property applies a heavier typographic weight. + +The `background' property adds a background color. The +background is a shade of gray, unless the `intense' property is +also set. -With a non-nil value (t), these constructs will use a more -prominent background and foreground color combination instead." +The `intense' property amplifies the existing coloration. When +`background' is used, the background color is enhanced as well +and becomes tinted instead of being gray. + +Combinations of any of those properties are expressed as a list, +like in these examples: + + (bold) + (bold italic) + (bold italic intense) + (bold italic intense 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-markup (quote (bold italic))) + +Also check the variables `org-hide-emphasis-markers', +`org-hide-macro-markers'." :group 'modus-themes - :package-version '(modus-themes . "1.7.0") + :package-version '(modus-themes . "2.1.0") :version "29.1" - :type 'boolean + :type '(set :tag "Properties" :greedy t + (const :tag "Added background" background) + (const :tag "Intense colors" intense) + (const :tag "Bold weight" bold) + (const :tag "Italics (slanted text)" italic)) :set #'modus-themes--set-option :initialize #'custom-initialize-default - :link '(info-link "(modus-themes) Intense markup")) + :link '(info-link "(modus-themes) Markup")) + +(make-obsolete 'modus-themes-intense-markup 'modus-themes-markup "2.1.0") (defcustom modus-themes-paren-match nil "Control the style of matching parentheses or delimiters. @@ -2895,23 +2896,32 @@ (defcustom modus-themes-deuteranopia nil :link '(info-link "(modus-themes) Deuteranopia style")) (defcustom modus-themes-mail-citations nil - "Control the color of citations in messages or email clients. + "Control the color of citations/quotes in messages or emails. + +By default (a nil value) citations are styled with contrasting +hues to denote their depth. Colors are easy to tell apart +because they complement each other, but they otherwise are not +very prominent. + +Option `intense' is similar to the default in terms of using +contrasting and complementary hues, but applies more saturated +colors. -Nil (the default) means to use a variety of contrasting hues to -denote depth in nested citations. Colors are fairly easy to tell -apart. +Option `faint' maintains the same color-based distinction between +citation levels though the colors it uses have subtle differences +between them. -Option `faint' maintains a color-based distinction between -citation levels but the colors it applies have very subtle -differences between them. +Option `monochrome' turns all quotes into a shade of gray. -Option `monochrome' turns all citations that would otherwise be -colored into a uniform shade of shade of gray." +Whatever the value assigned to this variable, citations in emails +are controlled by typographic elements and/or indentation, which +the themes do not touch." :group 'modus-themes - :package-version '(modus-themes . "1.4.0") - :version "28.1" + :package-version '(modus-themes . "2.1.0") + :version "29.1" :type '(choice - (const :format "[%v] %t\n" :tag "Colorful mail citations with contrasting hues (default)" nil) + (const :format "[%v] %t\n" :tag "Colorful email citations with contrasting hues (default)" nil) + (const :format "[%v] %t\n" :tag "Like the default, but with more saturated colors" intense) (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)) @@ -2931,6 +2941,75 @@ (defcustom modus-themes-tabs-accented nil :initialize #'custom-initialize-default :link '(info-link "(modus-themes) Tab style")) +(defcustom modus-themes-box-buttons nil + "Control the style of buttons in the Custom UI and related. + +The value is a list of properties, each designated by a symbol. +The default (a nil value or an empty list) is a gray background +combined with a pseudo three-dimensional effect. + +The `flat' property makes the button two dimensional. + +The `accented' property changes the background from gray to an +accent color. + +The `faint' property reduces the overall coloration. + +The `variable-pitch' property applies a proportionately spaced +typeface to the button's text. + +The `underline' property draws a line below the affected text and +removes whatever box effect. This is optimal when Emacs runs +inside a terminal emulator. If `flat' and `underline' are +defined together, the latter takes precedence. + +The symbol of a weight attribute adjusts the font of the button +accordingly, such as `light', `semibold', etc. Valid symbols are +defined in the variable `modus-themes-weights'. + +A number, expressed as a floating point (e.g. 0.9), adjusts the +height of the button's text to that many times the base font +size. The default height is the same as 1.0, though it need not +be explicitly stated. + +Combinations of any of those properties are expressed as a list, +like in these examples: + + (flat) + (variable-pitch flat) + (variable-pitch flat 0.9 semibold) + +The order in which the properties are set is not significant. + +In user configuration files the form may look like this: + + (setq modus-themes-box-buttons (quote (variable-pitch flat 0.9)))" + :group 'modus-themes + :package-version '(modus-themes . "2.1.0") + :version "29.1" + :type '(set :tag "Properties" :greedy t + (const :tag "Two-dimensional button" flat) + (const :tag "Accented background instead of gray" accented) + (const :tag "Reduce overall coloration" faint) + (const :tag "Proportionately spaced font (variable-pitch)" variable-pitch) + (const :tag "Underline instead of a box effect" underline) + (choice :tag "Font weight (must be supported by the typeface)" + (const :tag "Thin" thin) + (const :tag "Ultra-light" ultralight) + (const :tag "Extra-light" extralight) + (const :tag "Light" light) + (const :tag "Semi-light" semilight) + (const :tag "Regulat (default)" nil) + (const :tag "Medium" medium) + (const :tag "Bold" bold) + (const :tag "Semi-bold" semibold) + (const :tag "Extra-bold" extrabold) + (const :tag "Ultra-bold" ultrabold)) + (float :tag "Number (float) to adjust height by" :value 0.9)) + :set #'modus-themes--set-option + :initialize #'custom-initialize-default + :link '(info-link "(modus-themes) Box buttons")) + ;;; Internal functions @@ -2985,9 +3064,8 @@ (defun modus-themes--bold-weight () (defun modus-themes--slant () "Conditional use of italics for slant attribute." - (if modus-themes-italic-constructs - (list 'italic) - (list 'normal))) + (when modus-themes-italic-constructs + (list :inherit 'italic))) (defun modus-themes--fixed-pitch () "Conditional application of `fixed-pitch' inheritance." @@ -3016,14 +3094,41 @@ (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--markup (mainfg intensefg &optional mainbg intensebg) +(defun modus-themes--markup (mainfg intensefg subtlebg intensebg) "Conditional use of colors for markup in Org and others. -MAINBG is the default background. MAINFG is the default -foreground. INTENSEBG and INTENSEFG must be more colorful -variants." - (if modus-themes-intense-markup - (list :background (or intensebg 'unspecified) :foreground intensefg) - (list :background (or mainbg 'unspecified) :foreground mainfg))) +MAINFG is the default foreground. SUBTLEBG is a gray background. +INTENSEBG is a colorful background for use with the main +foreground. INTENSEFG is an alternative to the default." + (let ((properties modus-themes-markup)) + (list + :inherit + (cond + ((and (memq 'bold properties) + (memq 'italic properties)) + (list 'modus-themes-fixed-pitch 'bold-italic)) + ((memq 'italic properties) + (list 'modus-themes-fixed-pitch 'italic)) + ((memq 'bold properties) + (list 'modus-themes-fixed-pitch 'bold)) + (t 'modus-themes-fixed-pitch)) + :background + (cond + ((and (memq 'background properties) + (memq 'intense properties)) + intensebg) + ((memq 'background properties) + subtlebg) + (t + 'unspecified)) + :foreground + (cond + ((and (memq 'background properties) + (memq 'intense properties)) + mainfg) + ((memq 'intense properties) + intensefg) + (t + mainfg))))) (defun modus-themes--lang-check (underline subtlefg intensefg intensefg-alt subtlebg intensebg faintfg) "Conditional use of foreground colors for language checkers. @@ -3090,19 +3195,7 @@ (defun modus-themes--prompt (mainfg intensefg grayfg subtlebg intensebg intenseb 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 ((properties - (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)))))) + (let ((properties modus-themes-prompts)) (list :foreground (cond ((and (memq 'gray properties) @@ -3148,16 +3241,7 @@ (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'." - (let ((properties - (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)))))) + (let ((properties modus-themes-paren-match)) (list :inherit (if (memq 'bold properties) 'bold @@ -3175,18 +3259,7 @@ (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." - (let ((properties - (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)))))) + (let ((properties modus-themes-syntax)) (list :foreground (cond ((memq 'faint properties) @@ -3198,18 +3271,7 @@ (defun modus-themes--syntax-extra (fg faint alt &optional faint-alt) FG is the default. FAINT is typically the same color in its desaturated version. ALT is another hue while optional FAINT-ALT is its subtle alternative." - (let ((properties - (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)))))) + (let ((properties modus-themes-syntax)) (list :foreground (cond ((and (memq 'alt-syntax properties) @@ -3228,18 +3290,7 @@ (defun modus-themes--syntax-string (fg faint green alt &optional faint-green fai 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 ((properties - (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)))))) + (let ((properties modus-themes-syntax)) (list :foreground (cond ((and (memq 'faint properties) @@ -3261,18 +3312,7 @@ (defun modus-themes--syntax-comment (fg yellow &optional faint-yellow faint) 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 ((properties - (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)))))) + (let ((properties modus-themes-syntax)) (list :foreground (cond ((and (memq 'faint properties) @@ -3292,12 +3332,17 @@ (defun modus-themes--key-cdr (key alist) "Get cdr of KEY in ALIST." (cdr (assoc key alist))) -(defvar modus-themes--heading-weights +(define-obsolete-variable-alias + 'modus-themes--heading-weights + 'modus-themes-weights + "2.1.0") + +(defconst modus-themes-weights '( thin ultralight extralight light semilight regular medium semibold bold heavy extrabold ultrabold) - "List of font weights used by `modus-themes--heading'.") + "List of font weights.") -(defun modus-themes--heading-weight (list) +(defun modus-themes--weight (list) "Search for `modus-themes--heading' weight in LIST." (catch 'found (dolist (elt list) @@ -3316,33 +3361,12 @@ (defun modus-themes--heading (level fg fg-alt bg bg-gray border) (let* ((key (modus-themes--key-cdr level modus-themes-headings)) (style (or key (modus-themes--key-cdr t modus-themes-headings))) (style-listp (listp style)) - (properties - (if style-listp - 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))))) + (properties style) (var (when (memq 'variable-pitch properties) 'variable-pitch)) (varbold (if var (append (list 'bold) (list var)) 'bold)) - (weight (when style-listp (modus-themes--heading-weight style)))) + (weight (when style-listp (modus-themes--weight style)))) (list :inherit (cond ;; `no-bold' is for backward compatibility because we cannot @@ -3378,7 +3402,7 @@ (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)) - (weight (modus-themes--heading-weight properties))) + (weight (modus-themes--weight properties))) (list :inherit (cond ((and weight (memq 'variable-pitch properties)) @@ -3479,18 +3503,28 @@ (defun modus-themes--agenda-scheduled (defaultfg uniformfg rainbowfg) ('rainbow (list :foreground rainbowfg)) (_ (list :foreground defaultfg)))) -(defun modus-themes--agenda-habit (default traffic simple &optional traffic-deuteran) +(defun modus-themes--agenda-habit (default traffic simple &optional default-d traffic-d simple-d) "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." - (if modus-themes-deuteranopia - (list :background (or traffic-deuteran traffic)) - (pcase (modus-themes--key-cdr 'habit modus-themes-org-agenda) - ('traffic-light (list :background traffic)) - ('simplified (list :background simple)) - (_ (list :background default))))) +corresponds to the 'simplified style'. + +Optional DEFAULT-D, TRAFFIC-D, SIMPLE-D are alternatives to the +main colors, meant for dopia when `modus-themes-deuteranopia' is +non-nil." + (let ((habit (modus-themes--key-cdr 'habit modus-themes-org-agenda))) + (cond + ((and modus-themes-deuteranopia (null habit)) + (list :background (or default-d default))) + ((and modus-themes-deuteranopia (eq habit 'traffic-light)) + (list :background (or traffic-d traffic))) + ((and modus-themes-deuteranopia (eq habit 'simplified)) + (list :background (or simple-d simple))) + (t + (pcase habit + ('traffic-light (list :background traffic)) + ('simplified (list :background simple)) + (_ (list :background default))))))) (defun modus-themes--org-block (bgblk fgdefault &optional fgblk) "Conditionally set the background of Org blocks. @@ -3526,8 +3560,9 @@ (defun modus-themes--org-block-delim (bgaccent fgaccent bg fg) ('gray-background (list :background bg :foreground fg :extend t)) ('grayscale (list :background bg :foreground fg :extend t)) ('greyscale (list :background bg :foreground fg :extend t)) + ('tinted-background (list :background bgaccent :foreground fgaccent :extend nil)) ('rainbow (list :background bgaccent :foreground fgaccent :extend nil)) - (_ (list :background bg :foreground fg :extend nil)))) + (_ (list :foreground fg :extend nil)))) (defun modus-themes--mode-line-attrs (fg bg fg-alt bg-alt fg-accent bg-accent border border-3d &optional alt-style fg-distant) @@ -3545,22 +3580,7 @@ (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." - (let* ((properties - (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* ((properties modus-themes-mode-line) (padding (seq-find #'natnump properties 1)) (padded (> padding 1)) (base (cond ((memq 'accented properties) @@ -3622,6 +3642,12 @@ (defun modus-themes--mode-line-attrs fg-distant 'unspecified)))) +;; Basically this is just for the keycast key indicator. +(defun modus-themes--mode-line-padded-box (color) + "Set padding of mode line box attribute with given COLOR." + (let ((padding (seq-find #'natnump modus-themes-mode-line 1))) + (list :box (list :line-width padding :color color)))) + (defun modus-themes--diff (mainbg mainfg altbg altfg &optional deuteranbg deuteranfg bg-only-fg) "Color combinations for `modus-themes-diffs'. @@ -3650,39 +3676,47 @@ (defun modus-themes--deuteran (deuteran main) (list deuteran) (list main))) -(defun modus-themes--standard-completions (mainfg subtlebg intensebg intensefg) +(defun modus-themes--standard-completions (mainfg subtlebg subtlefg intensebg intensefg &optional superbg superfg) "Combinations for `modus-themes-completions'. MAINFG is an accented foreground value. SUBTLEBG is an accented -background value that can be combined with MAINFG. INTENSEBG and -INTENSEFG are accented colors that are designed to be used in -tandem. +background value that can be combined with SUBTLEFG. INTENSEBG +and INTENSEFG are accented colors that are designed to be used in +tandem. Same principle for the optional SUPERBG and SUPERFG. These are intended for Icomplete, Ido, and related." (pcase modus-themes-completions + ('super-opinionated (list :background (or superbg intensebg) :foreground (or superfg intensefg))) ('opinionated (list :background intensebg :foreground intensefg)) - ('moderate (list :background subtlebg :foreground mainfg)) + ('moderate (list :background subtlebg :foreground subtlefg)) (_ (list :foreground mainfg)))) -(defun modus-themes--extra-completions (subtleface intenseface altface &optional altfg bold) +(defun modus-themes--extra-completions (default moderate opinionated) "Combinations for `modus-themes-completions'. -SUBTLEFACE and INTENSEFACE are custom theme faces that combine a -background and foreground value. The difference between the two -is a matter of degree. +DEFAULT, MODERATE, and OPINIONATED are faces that correspond to +the stylistic variants of the aforementioned user option. + +These are intended for Ivy and Helm." + (pcase modus-themes-completions + ('super-opinionated (list :inherit (list 'bold opinionated))) + ('opinionated (list :inherit (list 'bold opinionated))) + ('moderate (list :inherit (list 'bold moderate))) + (_ (list :inherit (list 'bold default))))) -ALTFACE is a combination of colors that represents a departure -from the UI's default aesthetics. Optional ALTFG is meant to be -used in tandem with it. +(defun modus-themes--extra-completions-line (mainfg mainbg modbg opbg sopbg) + "Combinations for `modus-themes-completions'. -Optional BOLD will apply a heavier weight to the text. +MAINFG and MAINBG form the basic intense style. MODBG, OPBG, and +SOPBG are the moderate, opinionated, and super-opinionated +backgrounds, respectively. -These are intended for Helm, Ivy, etc." +These are intended for Ivy and Helm." (pcase modus-themes-completions - ('opinionated (list :inherit (list altface bold) - :foreground (or altfg 'unspecified))) - ('moderate (list :inherit (list subtleface bold))) - (_ (list :inherit (list intenseface bold))))) + ('super-opinionated (list :inherit 'bold :background sopbg :foreground mainfg)) + ('opinionated (list :inherit 'bold :background opbg :foreground mainfg)) + ('moderate (list :inherit 'bold :background modbg :foreground mainfg)) + (_ (list :inherit 'bold :background mainbg :foreground mainfg)))) (defun modus-themes--link (fg fgfaint underline bg bgneutral) "Conditional application of link styles. @@ -3690,17 +3724,7 @@ (defun modus-themes--link (fg fgfaint underline bg bgneutral) property. FGFAINT is a desaturated color for the text and underline. UNDERLINE is a gray color only for the undeline. BG is a background color and BGNEUTRAL is its fallback value." - (let ((properties - (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)))))) + (let ((properties modus-themes-links)) (list :inherit (cond ((and (memq 'bold properties) @@ -3738,17 +3762,7 @@ (defun modus-themes--link-color (fg fgfaint &optional neutralfg) "Extend `modus-themes--link'. FG is the main accented foreground. FGFAINT is also accented, yet desaturated. Optional NEUTRALFG is a gray value." - (let ((properties - (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)))))) + (let ((properties modus-themes-links)) (list :foreground (cond ((memq 'no-color properties) @@ -3772,16 +3786,7 @@ (defun modus-themes--region (bg fg bgsubtle bgaccent bgaccentsubtle) used to fontify text and code syntax. BGACCENT is a colored background that combines well with FG. BGACCENTSUBTLE can be combined with all colors used to fontify text." - (let ((properties - (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)))))) + (let ((properties modus-themes-region)) (list :background (cond ((and (memq 'accented properties) @@ -3817,17 +3822,7 @@ (defun modus-themes--hl-line buffer's possible backgrounds: the former is neutral, the latter is accented. LINENEUTRALINTENSE and LINEACCENTINTENSE are their more prominent alternatives." - (let ((properties - (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)))))) + (let ((properties modus-themes-hl-line)) (list :background (cond ((and (memq 'intense properties) @@ -3855,13 +3850,14 @@ (defun modus-themes--hl-line lineneutral) ('unspecified))))) -(defun modus-themes--mail-cite (mainfg subtlefg) +(defun modus-themes--mail-cite (mainfg intensefg subtlefg) "Combinations for `modus-themes-mail-citations'. MAINFG is an accented foreground value. SUBTLEFG is its -desaturated counterpart." +desaturated counterpart. INTENSEFG is a more saturated variant." (pcase modus-themes-mail-citations ('monochrome (list :inherit 'shadow)) + ('intense (list :foreground intensefg)) ('faint (list :foreground subtlefg)) ('desaturated (list :foreground subtlefg)) (_ (list :foreground mainfg)))) @@ -3890,10 +3886,118 @@ (defun modus-themes--tab (bg &optional bgaccent fg fgaccent box-p bold-p var-p) :foreground (or foreground 'unspecified) :box (if box-p (list :line-width 2 :color background) 'unspecified)))) +(defun modus-themes--button (bg bgfaint bgaccent bgaccentfaint border &optional pressed-button-p) + "Apply `modus-themes-box-buttons' styles. + +Work in progress. BG BGFAINT BGACCENT BGACCENTFAINT BORDER PRESSED-BUTTON-P." + (let* ((properties modus-themes-box-buttons) + (weight (modus-themes--weight properties))) + (list :inherit + (cond + ((and (memq 'variable-pitch properties) + (eq weight 'bold)) + (list 'bold 'variable-pitch)) + ((memq 'variable-pitch properties) + 'variable-pitch) + ((eq weight 'bold) + 'bold) + ('unspecified)) + :background + (cond + ((and (memq 'accented properties) + (memq 'faint properties) + bgaccentfaint)) + ((memq 'faint properties) + bgfaint) + ((memq 'accented properties) + bgaccent) + (bg)) + :box + (cond + ((memq 'underline properties) + 'unspecified) + ((memq 'flat properties) + (list :line-width -1 :color border)) + ((list :line-width -1 + :style (if pressed-button-p + 'pressed-button + 'released-button) + :color border))) + :weight + (cond + ((eq weight 'bold) + 'unspecified) ; we :inherit the `bold' face above + (weight weight) + ('unspecified)) + :height + (seq-find #'floatp properties 'unspecified) + :underline + (if (memq 'underline properties) + t + 'unspecified)))) + ;;;; Utilities for DIY users +;;;;; List colors (a respin of M-x list-colors-display) + +(defun modus-themes--list-colors-render (buffer palette) + "Render colors in BUFFER from PALETTE. +Routine for `modus-themes-list-colors'." + (with-help-window buffer + (with-current-buffer standard-output + (erase-buffer) + ;; We need this to properly render the first line. + (insert " ") + (dolist (cell palette) + (let* ((name (car cell)) + (color (cdr cell)) + (fg (readable-foreground-color color)) + (pad (make-string 5 ?\s))) + (let ((old-point (point))) + (insert (format "%s %s" color pad)) + (put-text-property old-point (point) 'face `( :foreground ,color))) + (let ((old-point (point))) + (insert (format " %s %s %s\n" color pad name)) + (put-text-property old-point (point) + 'face `( :background ,color + :foreground ,fg + :extend t))) + ;; We need this to properly render the last line. + (insert " ")))))) + +(defvar modus-themes--list-colors-prompt-history '() + "Minibuffer history for `modus-themes--list-colors-prompt'.") + +(defun modus-themes--list-colors-prompt () + "Prompt for Modus theme. +Helper function for `modus-themes-list-colors'." + (let ((def (format "%s" (modus-themes--current-theme)))) + (completing-read + (format "Use palette from theme [%s]: " def) + '(modus-operandi modus-vivendi) nil t nil + 'modus-themes--list-colors-prompt-history def))) + +(defun modus-themes-list-colors (theme) + "Preview palette of the Modus THEME of choice." + (interactive + (list (intern (modus-themes--list-colors-prompt)))) + (let ((palette (pcase theme + ('modus-operandi modus-themes-operandi-colors) + ('modus-vivendi modus-themes-vivendi-colors) + (_ (user-error "`%s' is not a Modus theme" theme))))) + (modus-themes--list-colors-render + (format "*%s-list-colors*" theme) + palette))) + +(defun modus-themes-list-colors-current () + "Call `modus-themes-list-colors' for the current Modus theme." + (interactive) + (modus-themes-list-colors (modus-themes--current-theme))) + +;;;;; Formula to measure relative luminance + ;; This is the WCAG formula: https://www.w3.org/TR/WCAG20-TECHS/G18.html (defun modus-themes-wcag-formula (hex) "Get WCAG value of color value HEX. @@ -3913,6 +4017,8 @@ (defun modus-themes-contrast (c1 c2) (+ (modus-themes-wcag-formula c2) 0.05)))) (max ct (/ ct)))) +;;;;; Retrieve colors from the themes + (defun modus-themes-current-palette () "Return current color palette." (modus-themes--palette (modus-themes--current-theme))) @@ -4215,19 +4321,6 @@ ;;;;; heading levels ((,class ,@(modus-themes--heading 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))) - `(modus-themes-graph-green-0 ((,class :background ,green-graph-0-bg))) - `(modus-themes-graph-green-1 ((,class :background ,green-graph-1-bg))) - `(modus-themes-graph-yellow-0 ((,class :background ,yellow-graph-0-bg))) - `(modus-themes-graph-yellow-1 ((,class :background ,yellow-graph-1-bg))) - `(modus-themes-graph-blue-0 ((,class :background ,blue-graph-0-bg))) - `(modus-themes-graph-blue-1 ((,class :background ,blue-graph-1-bg))) - `(modus-themes-graph-magenta-0 ((,class :background ,magenta-graph-0-bg))) - `(modus-themes-graph-magenta-1 ((,class :background ,magenta-graph-1-bg))) - `(modus-themes-graph-cyan-0 ((,class :background ,cyan-graph-0-bg))) - `(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 @@ -4241,21 +4334,72 @@ ;;;;; language checkers ;;;;; links `(modus-themes-link-broken ((,class :inherit button ,@(modus-themes--link-color red red-faint)))) `(modus-themes-link-symlink ((,class :inherit button ,@(modus-themes--link-color cyan cyan-faint)))) +;;;;; markup + `(modus-themes-markup-code + ((,class ,@(modus-themes--markup cyan-alt-other cyan-intense bg-alt + bg-special-faint-mild)))) + `(modus-themes-markup-macro + ((,class ,@(modus-themes--markup magenta-alt-other purple-intense bg-alt + bg-special-faint-cold)))) + `(modus-themes-markup-verbatim + ((,class ,@(modus-themes--markup magenta-alt magenta-intense bg-alt + bg-special-faint-calm)))) +;;;;; search + `(modus-themes-search-success ((,class :inherit ,@(modus-themes--deuteran + 'modus-themes-intense-blue + 'modus-themes-intense-green)))) + `(modus-themes-search-success-lazy ((,class :inherit ,@(modus-themes--deuteran + 'modus-themes-special-mild + 'modus-themes-refine-cyan)))) + `(modus-themes-search-success-modeline ((,class :foreground ,@(modus-themes--deuteran + blue-active + green-active)))) ;;;;; tabs `(modus-themes-tab-active ((,class ,@(modus-themes--tab bg-tab-active nil nil nil t t)))) `(modus-themes-tab-backdrop ((,class ,@(modus-themes--tab bg-active bg-active-accent nil nil nil nil t)))) `(modus-themes-tab-inactive ((,class ,@(modus-themes--tab bg-tab-inactive bg-tab-inactive-accent fg-dim nil t)))) -;;;;; other custom faces +;;;;; completion frameworks + `(modus-themes-completion-standard-first-match + ((,class :inherit bold + ,@(modus-themes--standard-completions + magenta bg-alt magenta-alt + bg-active fg-main + blue-intense-bg)))) + `(modus-themes-completion-standard-selected + ((,class :inherit bold :foreground ,fg-main + :background ,@(pcase modus-themes-completions + ('super-opinionated (list bg-completion-intense)) + ('opinionated (list bg-active)) + ('moderate (list bg-completion-nuanced)) + (_ (list bg-inactive)))))) + `(modus-themes-completion-extra-selected + ((,class ,@(modus-themes--extra-completions-line + fg-main bg-completion-intense bg-completion-subtle + bg-completion-nuanced bg-active)))) + `(modus-themes-completion-key-binding + ((,class ,@(if (null modus-themes-completions) + (list :foreground magenta-alt-other) + (list :inherit 'modus-themes-key-binding))))) +;;;;; buttons + `(modus-themes-box-button + ((,class ,@(modus-themes--button bg-active bg-main bg-active-accent + bg-special-cold bg-region)))) + `(modus-themes-box-button-pressed + ((,class ,@(modus-themes--button bg-active bg-main bg-active-accent + bg-special-cold bg-region t)))) +;;;;; typography `(modus-themes-bold ((,class ,@(modus-themes--bold-weight)))) + `(modus-themes-fixed-pitch ((,class ,@(modus-themes--fixed-pitch)))) + `(modus-themes-slant ((,class ,@(modus-themes--slant)))) + `(modus-themes-ui-variable-pitch ((,class ,@(modus-themes--variable-pitch-ui)))) +;;;;; other custom faces `(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 - fg-alt cyan-intense) + fg-alt blue-intense) :extend t))) - `(modus-themes-key-binding ((,class ,@(if (facep 'help-key-binding) ; check emacs28 face - (list :inherit 'help-key-binding) - (list :inherit 'bold :foreground blue-alt-other))))) + `(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 @@ -4264,21 +4408,6 @@ ;;;;; other custom faces `(modus-themes-reset-soft ((,class :background ,bg-main :foreground ,fg-main :weight normal :slant normal :strike-through nil :box nil :underline nil :overline nil :extend nil))) - `(modus-themes-search-success ((,class :inherit ,@(modus-themes--deuteran - 'modus-themes-intense-blue - 'modus-themes-intense-green)))) - `(modus-themes-search-success-lazy ((,class :inherit ,@(modus-themes--deuteran - 'modus-themes-special-mild - 'modus-themes-refine-cyan)))) - `(modus-themes-search-success-modeline ((,class :foreground ,@(modus-themes--deuteran - blue-active - green-active)))) - `(modus-themes-slant ((,class :inherit italic :slant ,@(modus-themes--slant)))) - `(modus-themes-ui-variable-pitch ((,class ,@(modus-themes--variable-pitch-ui)))) - `(modus-themes-fixed-pitch ((,class ,@(modus-themes--fixed-pitch)))) - `(modus-themes-markup-verbatim ((,class :inherit modus-themes-fixed-pitch - ,@(modus-themes--markup fg-special-calm magenta-alt - bg-alt magenta-nuanced-bg)))) ;;;; standard faces ;;;;; absolute essentials `(default ((,class :background ,bg-main :foreground ,fg-main))) @@ -4290,28 +4419,31 @@ ;;;;; basic and/or ungrouped styles `(bold ((,class :weight bold))) `(bold-italic ((,class :inherit (bold italic)))) `(buffer-menu-buffer ((,class :inherit bold))) + `(child-frame-border ((,class :background ,fg-window-divider-inner))) `(comint-highlight-input ((,class :inherit bold))) `(comint-highlight-prompt ((,class :inherit modus-themes-prompt))) `(confusingly-reordered ((,class :inherit modus-themes-lang-error))) + `(elisp-shorthand-font-lock-face ((,class :inherit font-lock-variable-name-face))) `(error ((,class :inherit bold :foreground ,red))) `(escape-glyph ((,class :foreground ,fg-escape-char-construct))) `(file-name-shadow ((,class :inherit (shadow italic)))) `(header-line ((,class :inherit modus-themes-ui-variable-pitch :background ,bg-header :foreground ,fg-header))) - `(header-line-highlight ((,class :inherit modus-themes-active-blue))) + `(header-line-highlight ((,class :inherit highlight))) `(help-argument-name ((,class :inherit modus-themes-slant :foreground ,cyan))) - `(help-key-binding ((,class :box (:line-width (-1 . -1) :color ,bg-active) ; NOTE: box syntax is for Emacs28 - :background ,bg-alt))) + `(help-key-binding ((,class :inherit modus-themes-key-binding))) `(homoglyph ((,class :foreground ,red-alt-faint))) `(ibuffer-locked-buffer ((,class :foreground ,yellow-alt-other-faint))) `(italic ((,class :slant italic))) `(nobreak-hyphen ((,class :foreground ,fg-escape-char-construct))) `(nobreak-space ((,class :foreground ,fg-escape-char-construct :underline t))) + `(menu ((,class :inverse-video unspecified :inherit modus-themes-intense-neutral))) `(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 :extend t))) - `(rectangle-preview ((,class :inherit modus-themes-special-mild))) + `(pgtk-im-0 ((,class :inherit modus-themes-fringe-blue :underline t))) + `(rectangle-preview ((,class :background ,bg-special-faint-warm :foreground ,fg-special-warm))) `(region ((,class ,@(modus-themes--region bg-region fg-main bg-hl-alt-intense bg-region-accent bg-region-accent-subtle)))) @@ -4332,7 +4464,7 @@ ;;;;; buttons, links, widgets `(widget-button ((,class :inherit bold :foreground ,blue-alt))) `(widget-button-pressed ((,class :inherit widget-button :foreground ,magenta))) `(widget-documentation ((,class :foreground ,green))) - `(widget-field ((,class :background ,bg-alt :foreground ,fg-dim))) + `(widget-field ((,class :background ,bg-alt :foreground ,fg-main :extend nil))) `(widget-inactive ((,class :inherit shadow :background ,bg-dim))) `(widget-single-line-field ((,class :inherit widget-field))) ;;;;; alert @@ -4342,41 +4474,47 @@ ;;;;; alert `(alert-trivial-face ((,class :foreground ,fg-special-calm))) `(alert-urgent-face ((,class :inherit bold :foreground ,red-intense))) ;;;;; all-the-icons - `(all-the-icons-blue ((,class :foreground ,blue))) + `(all-the-icons-blue ((,class :foreground ,blue-alt-other))) `(all-the-icons-blue-alt ((,class :foreground ,blue-alt))) - `(all-the-icons-cyan ((,class :foreground ,cyan))) + `(all-the-icons-cyan ((,class :foreground ,cyan-intense))) `(all-the-icons-cyan-alt ((,class :foreground ,cyan-alt))) - `(all-the-icons-dblue ((,class :foreground ,blue-alt-other))) - `(all-the-icons-dcyan ((,class :foreground ,cyan-alt-other))) - `(all-the-icons-dgreen ((,class :foreground ,green-alt-other))) - `(all-the-icons-dired-dir-face ((,class :foreground ,blue))) - `(all-the-icons-dmaroon ((,class :foreground ,magenta-alt-other))) - `(all-the-icons-dorange ((,class :foreground ,red-alt-other))) - `(all-the-icons-dpink ((,class :foreground ,magenta))) - `(all-the-icons-dpurple ((,class :foreground ,magenta-alt))) - `(all-the-icons-dred ((,class :foreground ,red))) - `(all-the-icons-dsilver ((,class :foreground ,fg-special-cold))) - `(all-the-icons-dyellow ((,class :foreground ,yellow))) - `(all-the-icons-green ((,class :foreground ,green))) - `(all-the-icons-lblue ((,class :foreground ,blue-refine-fg))) - `(all-the-icons-lcyan ((,class :foreground ,cyan-refine-fg))) - `(all-the-icons-lgreen ((,class :foreground ,green-refine-fg))) - `(all-the-icons-lmaroon ((,class :foreground ,magenta-refine-fg))) - `(all-the-icons-lorange ((,class :foreground ,red-refine-fg))) - `(all-the-icons-lpink ((,class :foreground ,magenta-refine-fg))) - `(all-the-icons-lpurple ((,class :foreground ,magenta-refine-fg))) - `(all-the-icons-lred ((,class :foreground ,red-refine-fg))) - `(all-the-icons-lsilver ((,class :foreground ,fg-special-cold))) - `(all-the-icons-lyellow ((,class :foreground ,yellow-refine-fg))) - `(all-the-icons-maroon ((,class :foreground ,magenta))) - `(all-the-icons-orange ((,class :foreground ,red-alt))) - `(all-the-icons-pink ((,class :foreground ,magenta))) - `(all-the-icons-purple ((,class :foreground ,magenta-alt))) - `(all-the-icons-purple-alt ((,class :foreground ,magenta-alt-other))) - `(all-the-icons-red ((,class :foreground ,red))) - `(all-the-icons-red-alt ((,class :foreground ,red-alt))) + `(all-the-icons-dblue ((,class :foreground ,blue-faint))) + `(all-the-icons-dcyan ((,class :foreground ,cyan-faint))) + `(all-the-icons-dgreen ((,class :foreground ,green))) + `(all-the-icons-dmaroon ((,class :foreground ,magenta-alt-faint))) + `(all-the-icons-dorange ((,class :foreground ,red-alt-faint))) + `(all-the-icons-dpink ((,class :foreground ,magenta-faint))) + `(all-the-icons-dpurple ((,class :foreground ,magenta-alt-other-faint))) + `(all-the-icons-dred ((,class :foreground ,red-faint))) + `(all-the-icons-dsilver ((,class :foreground ,cyan-alt-faint))) + `(all-the-icons-dyellow ((,class :foreground ,yellow-alt-faint))) + `(all-the-icons-green ((,class :foreground ,green-intense))) + `(all-the-icons-lblue ((,class :foreground ,blue-alt-other))) + `(all-the-icons-lcyan ((,class :foreground ,cyan))) + `(all-the-icons-lgreen ((,class :foreground ,green-alt-other))) + `(all-the-icons-lmaroon ((,class :foreground ,magenta-alt))) + `(all-the-icons-lorange ((,class :foreground ,red-alt))) + `(all-the-icons-lpink ((,class :foreground ,magenta))) + `(all-the-icons-lpurple ((,class :foreground ,magenta-faint))) + `(all-the-icons-lred ((,class :foreground ,red))) + `(all-the-icons-lsilver ((,class :foreground ,fg-docstring))) + `(all-the-icons-lyellow ((,class :foreground ,yellow-alt))) + `(all-the-icons-maroon ((,class :foreground ,magenta-intense))) + `(all-the-icons-orange ((,class :foreground ,orange-intense))) + `(all-the-icons-pink ((,class :foreground ,fg-special-calm))) + `(all-the-icons-purple ((,class :foreground ,magenta-alt-other))) + `(all-the-icons-purple-alt ((,class :foreground ,purple-intense))) + `(all-the-icons-red ((,class :foreground ,red-intense))) + `(all-the-icons-red-alt ((,class :foreground ,red-alt-other))) `(all-the-icons-silver ((,class :foreground ,fg-special-cold))) `(all-the-icons-yellow ((,class :foreground ,yellow))) +;;;;; all-the-icons-dired + `(all-the-icons-dired-dir-face ((,class :foreground ,cyan-faint))) +;;;;; all-the-icons-ibuffer + `(all-the-icons-ibuffer-dir-face ((,class :foreground ,cyan-faint))) + `(all-the-icons-ibuffer-file-face ((,class :foreground ,blue-faint))) + `(all-the-icons-ibuffer-mode-face ((,class :foreground ,cyan))) + `(all-the-icons-ibuffer-size-face ((,class :foreground ,cyan-alt-other))) ;;;;; annotate `(annotate-annotation ((,class :inherit modus-themes-subtle-blue))) `(annotate-annotation-secondary ((,class :inherit modus-themes-subtle-green))) @@ -4430,12 +4568,7 @@ ;;;;; auctex and Tex `(font-latex-italic-face ((,class :inherit italic))) `(font-latex-math-face ((,class :inherit font-lock-constant-face))) `(font-latex-script-char-face ((,class :inherit font-lock-builtin-face))) - `(font-latex-sectioning-0-face ((,class :inherit modus-themes-heading-1))) - `(font-latex-sectioning-1-face ((,class :inherit modus-themes-heading-2))) - `(font-latex-sectioning-2-face ((,class :inherit modus-themes-heading-3))) - `(font-latex-sectioning-3-face ((,class :inherit modus-themes-heading-4))) - `(font-latex-sectioning-4-face ((,class :inherit modus-themes-heading-5))) - `(font-latex-sectioning-5-face ((,class :inherit modus-themes-heading-6))) + `(font-latex-sectioning-5-face ((,class :inherit (bold modus-themes-variable-pitch) :foreground ,blue-nuanced-fg))) `(font-latex-sedate-face ((,class :inherit font-lock-keyword-face))) `(font-latex-slide-title-face ((,class :inherit modus-themes-heading-1))) `(font-latex-string-face ((,class :inherit font-lock-string-face))) @@ -4617,6 +4750,9 @@ ;;;;; circe (and lui) `(lui-button-face ((,class :inherit button))) `(lui-highlight-face ((,class :foreground ,magenta-alt))) `(lui-time-stamp-face ((,class :foreground ,blue-nuanced-fg))) +;;;;; citar + `(citar ((,class :inherit shadow))) + `(citar-highlight (( ))) ;;;;; color-rg `(color-rg-font-lock-column-number ((,class :foreground ,magenta-alt-other))) `(color-rg-font-lock-command ((,class :inherit bold :foreground ,fg-main))) @@ -4656,23 +4792,23 @@ ;;;;; company-posframe `(company-posframe-active-backend-name ((,class :inherit bold :background ,bg-active :foreground ,blue-active))) `(company-posframe-inactive-backend-name ((,class :background ,bg-active :foreground ,fg-active))) `(company-posframe-metadata ((,class :background ,bg-inactive :foreground ,fg-inactive))) -;;;;; compilation feedback - `(compilation-column-number ((,class :foreground ,magenta-alt-other))) +;;;;; compilation + `(compilation-column-number ((,class :inherit compilation-line-number))) `(compilation-error ((,class :inherit modus-themes-bold :foreground ,red))) `(compilation-info ((,class :inherit modus-themes-bold :foreground ,fg-special-cold))) `(compilation-line-number ((,class :foreground ,fg-special-warm))) - `(compilation-mode-line-exit ((,class :inherit modus-themes-bold :foreground ,blue-active))) + `(compilation-mode-line-exit ((,class :inherit bold))) `(compilation-mode-line-fail ((,class :inherit modus-themes-bold :foreground ,red-active))) - `(compilation-mode-line-run ((,class :inherit modus-themes-bold :foreground ,magenta-active))) - `(compilation-warning ((,class :inherit modus-themes-bold :foreground ,yellow))) + `(compilation-mode-line-run ((,class :inherit modus-themes-bold :foreground ,cyan-active))) + `(compilation-warning ((,class :inherit modus-themes-bold :foreground ,yellow-alt))) ;;;;; completions `(completions-annotations ((,class :inherit modus-themes-slant :foreground ,cyan-faint))) `(completions-common-part ((,class ,@(modus-themes--standard-completions - blue-alt blue-nuanced-bg + blue-alt bg-special-mild fg-special-mild cyan-refine-bg cyan-refine-fg)))) `(completions-first-difference ((,class :inherit bold ,@(modus-themes--standard-completions - magenta-alt blue-nuanced-bg + magenta-alt bg-special-calm fg-special-calm magenta-intense-bg fg-main)))) ;;;;; consult `(consult-async-running ((,class :inherit bold :foreground ,blue))) @@ -4736,12 +4872,9 @@ ;;;;; ctrlf ;;;;; cursor-flash `(cursor-flash-face ((,class :inherit modus-themes-intense-blue))) ;;;;; custom (M-x customize) - `(custom-button ((,class :box (:line-width 2 :color nil :style released-button) - :background ,bg-active :foreground ,fg-main))) - `(custom-button-mouse ((,class :box (:line-width 2 :color nil :style released-button) - :background ,bg-active :foreground ,fg-active))) - `(custom-button-pressed ((,class :box (:line-width 2 :color nil :style pressed-button) - :background ,bg-active :foreground ,fg-main))) + `(custom-button ((,class :inherit modus-themes-box-button))) + `(custom-button-mouse ((,class :inherit (highlight custom-button)))) + `(custom-button-pressed ((,class :inherit modus-themes-box-button-pressed))) `(custom-changed ((,class :inherit modus-themes-subtle-cyan))) `(custom-comment ((,class :inherit shadow))) `(custom-comment-tag ((,class :background ,bg-alt :foreground ,yellow-alt-other))) @@ -4752,9 +4885,9 @@ ;;;;; custom (M-x customize) `(custom-modified ((,class :inherit modus-themes-subtle-cyan))) `(custom-rogue ((,class :inherit modus-themes-refine-magenta))) `(custom-set ((,class :foreground ,blue-alt))) - `(custom-state ((,class :foreground ,cyan-alt-other))) + `(custom-state ((,class :foreground ,red-alt-faint))) `(custom-themed ((,class :inherit modus-themes-subtle-blue))) - `(custom-variable-tag ((,class :inherit bold :foreground ,cyan))) + `(custom-variable-tag ((,class :foreground ,cyan))) ;;;;; dap-mode `(dap-mouse-eval-thing-face ((,class :box (:line-width -1 :color ,blue-active :style nil) :background ,bg-active :foreground ,fg-main))) @@ -5032,7 +5165,9 @@ ;;;;; el-search `(el-search-occur-match ((,class :inherit modus-themes-special-calm))) ;;;;; eldoc ;; NOTE: see https://github.com/purcell/package-lint/issues/187 - (list 'eldoc-highlight-function-argument `((,class :inherit bold :foreground ,blue-alt-other))) + (list 'eldoc-highlight-function-argument `((,class :inherit bold + :background ,yellow-nuanced-bg + :foreground ,yellow-alt-other))) ;;;;; eldoc-box `(eldoc-box-body ((,class :background ,bg-alt :foreground ,fg-main))) `(eldoc-box-border ((,class :background ,fg-alt))) @@ -5045,10 +5180,10 @@ ;;;;; elfeed `(elfeed-search-date-face ((,class :foreground ,cyan))) `(elfeed-search-feed-face ((,class :foreground ,blue-faint))) `(elfeed-search-filter-face ((,class :inherit bold :foreground ,magenta-active))) - `(elfeed-search-last-update-face ((,class :foreground ,cyan-active))) - `(elfeed-search-tag-face ((,class :foreground ,cyan-alt-other))) + `(elfeed-search-last-update-face ((,class :inherit bold :foreground ,cyan-active))) + `(elfeed-search-tag-face ((,class :foreground ,magenta-alt-faint))) `(elfeed-search-title-face ((,class :foreground ,fg-dim))) - `(elfeed-search-unread-count-face ((,class :foreground ,green-active))) + `(elfeed-search-unread-count-face ((,class :inherit bold :foreground ,fg-active))) `(elfeed-search-unread-title-face ((,class :inherit bold :foreground ,fg-main))) ;;;;; elfeed-score `(elfeed-score-date-face ((,class :foreground ,blue))) @@ -5061,7 +5196,19 @@ ;;;;; elpher `(elpher-gemini-heading2 ((,class :inherit modus-themes-heading-2))) `(elpher-gemini-heading3 ((,class :inherit modus-themes-heading-3))) ;;;;; embark - `(embark-keybinding ((,class :inherit modus-themes-key-binding))) + `(embark-keybinding ((,class :inherit modus-themes-completion-key-binding))) +;;;;; ement (ement.el) + `(ement-room-fully-read-marker ((,class :background ,cyan-subtle-bg))) + `(ement-room-membership ((,class :inherit shadow))) + `(ement-room-mention (( ))) + `(ement-room-name ((,class :inherit bold))) + `(ement-room-reactions ((,class :inherit shadow))) + `(ement-room-read-receipt-marker ((,class :background ,yellow-subtle-bg))) + `(ement-room-self ((,class :inherit bold :foreground ,magenta))) + `(ement-room-self-message ((,class :foreground ,magenta-faint))) + `(ement-room-timestamp ((,class :inherit shadow))) + `(ement-room-timestamp-header ((,class :inherit bold :foreground ,cyan))) + `(ement-room-user ((,class :inherit bold :foreground ,blue))) ;;;;; emms `(emms-browser-album-face ((,class :foreground ,magenta-alt-other))) `(emms-browser-artist-face ((,class :foreground ,cyan))) @@ -5239,10 +5386,9 @@ ;;;;; eww `(eww-form-checkbox ((,class :inherit eww-form-text))) `(eww-form-file ((,class :inherit eww-form-submit))) `(eww-form-select ((,class :inherit eww-form-submit))) - `(eww-form-submit ((,class :box (:line-width 2 :style released-button) - :background ,bg-active))) - `(eww-form-text ((,class :box ,bg-active :background ,bg-alt))) - `(eww-form-textarea ((,class :background ,bg-alt))) + `(eww-form-submit ((,class :inherit modus-themes-box-button))) + `(eww-form-text ((,class :inherit widget-field))) + `(eww-form-textarea ((,class :inherit eww-form-text))) ;;;;; eyebrowse `(eyebrowse-mode-line-active ((,class :inherit bold :foreground ,blue-active))) ;;;;; fancy-dabbrev @@ -5295,11 +5441,9 @@ ;;;;; flyspell `(flyspell-incorrect ((,class :inherit modus-themes-lang-error))) ;;;;; flx `(flx-highlight-face ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-magenta 'modus-themes-intense-magenta - 'modus-themes-nuanced-magenta - magenta-alt - 'bold)))) + 'modus-themes-subtle-magenta + 'modus-themes-special-calm)))) ;;;;; freeze-it `(freeze-it-show ((,class :background ,bg-dim :foreground ,fg-special-warm))) ;;;;; frog-menu @@ -5346,17 +5490,17 @@ ;;;;; font-lock `(font-lock-regexp-grouping-backslash ((,class :inherit bold ,@(modus-themes--syntax-string fg-escape-char-backslash yellow-alt-faint - yellow magenta-alt - yellow-faint red-faint)))) + yellow-alt magenta-alt + red-faint green-alt-other-faint)))) `(font-lock-regexp-grouping-construct ((,class :inherit bold ,@(modus-themes--syntax-string fg-escape-char-construct red-alt-other-faint - blue blue-alt-other + red-alt-other blue-alt-other blue-faint blue-alt-other-faint)))) `(font-lock-string-face ((,class ,@(modus-themes--syntax-string blue-alt blue-alt-faint - green red - green-faint red-faint)))) + green-alt-other red-alt + green-alt-faint red-alt-faint)))) `(font-lock-type-face ((,class :inherit modus-themes-bold ,@(modus-themes--syntax-foreground cyan-alt-other cyan-alt-faint)))) @@ -5395,8 +5539,10 @@ ;;;;; fountain-mode `(fountain-synopsis ((,class :foreground ,cyan-alt))) `(fountain-trans ((,class :foreground ,yellow-alt-other))) ;;;;; geiser - `(geiser-font-lock-autodoc-current-arg ((,class :inherit font-lock-function-name-face))) - `(geiser-font-lock-autodoc-identifier ((,class :inherit font-lock-constant-face))) + `(geiser-font-lock-autodoc-current-arg ((,class :inherit bold + :background ,yellow-nuanced-bg + :foreground ,yellow-alt-other))) + `(geiser-font-lock-autodoc-identifier ((,class :foreground ,cyan))) `(geiser-font-lock-doc-button ((,class :inherit button :foreground ,fg-docstring))) `(geiser-font-lock-doc-link ((,class :inherit button))) `(geiser-font-lock-error-link ((,class :inherit button :foreground ,red))) @@ -5550,10 +5696,9 @@ ;;;;; helm `(helm-etags-file ((,class :foreground ,fg-dim :underline t))) `(helm-ff-backup-file ((,class :inherit shadow))) `(helm-ff-denied ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-red 'modus-themes-intense-red - 'modus-themes-nuanced-red - red)))) + 'modus-themes-subtle-red + 'modus-themes-special-warm)))) `(helm-ff-directory ((,class :inherit helm-buffer-directory))) `(helm-ff-dirs ((,class :inherit bold :foreground ,blue-alt-other))) `(helm-ff-dotted-directory ((,class :inherit bold :background ,bg-alt :foreground ,fg-alt))) @@ -5565,19 +5710,16 @@ ;;;;; helm `(helm-ff-pipe ((,class ,@(modus-themes--extra-completions 'modus-themes-refine-magenta 'modus-themes-subtle-magenta - 'modus-themes-nuanced-magenta - magenta)))) + 'modus-themes-special-calm)))) `(helm-ff-prefix ((,class ,@(modus-themes--extra-completions 'modus-themes-refine-yellow 'modus-themes-subtle-yellow - 'modus-themes-nuanced-yellow - yellow-alt-other)))) + 'modus-themes-special-warm)))) `(helm-ff-socket ((,class :foreground ,red-alt-other))) `(helm-ff-suid ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-red 'modus-themes-refine-red - 'modus-themes-nuanced-yellow - red-alt)))) + 'modus-themes-subtle-red + 'modus-themes-special-warm)))) `(helm-ff-symlink ((,class :inherit modus-themes-link-symlink))) `(helm-ff-truename ((,class :foreground ,blue-alt-other))) `(helm-fd-finish ((,class :foreground ,green-active))) @@ -5589,57 +5731,39 @@ ;;;;; helm `(helm-header ((,class :inherit bold :foreground ,fg-special-cold))) `(helm-header-line-left-margin ((,class :inherit bold :foreground ,yellow-intense))) `(helm-history-deleted ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-red 'modus-themes-intense-red - 'modus-themes-nuanced-red - red - 'bold)))) + 'modus-themes-subtle-red + 'modus-themes-special-warm)))) `(helm-history-remote ((,class :foreground ,red-alt-other))) - `(helm-lisp-completion-info ((,class :foreground ,fg-special-warm))) + `(helm-lisp-completion-info ((,class :inherit compilation-info))) `(helm-lisp-show-completion ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-yellow 'modus-themes-refine-yellow - 'modus-themes-nuanced-yellow - yellow - 'bold)))) - `(helm-locate-finish ((,class :foreground ,green-active))) + 'modus-themes-subtle-yellow + 'modus-themes-special-warm)))) + `(helm-locate-finish ((,class :inherit success))) `(helm-match ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-cyan 'modus-themes-refine-cyan - 'modus-themes-nuanced-cyan - cyan - 'bold)))) - `(helm-match-item ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-neutral - 'modus-themes-subtle-cyan - 'modus-themes-nuanced-cyan - cyan-alt-other)))) + 'modus-themes-subtle-cyan + 'modus-themes-special-mild)))) + `(helm-match-item ((,class :inherit helm-match))) `(helm-minibuffer-prompt ((,class :inherit modus-themes-prompt))) `(helm-moccur-buffer ((,class :inherit button :foreground ,cyan-alt-other))) `(helm-mode-prefix ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-magenta 'modus-themes-intense-magenta - 'modus-themes-nuanced-magenta - magenta-alt - 'bold)))) + 'modus-themes-subtle-magenta + 'modus-themes-special-calm)))) `(helm-non-file-buffer ((,class :inherit shadow))) `(helm-prefarg ((,class :foreground ,red-active))) `(helm-resume-need-update ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-magenta 'modus-themes-refine-magenta - 'modus-themes-nuanced-magenta - magenta-alt-other)))) - `(helm-selection ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-blue - 'modus-themes-refine-blue - 'modus-themes-special-cold - nil - 'bold)))) + 'modus-themes-subtle-magenta + 'modus-themes-special-calm)))) + `(helm-selection ((,class :inherit modus-themes-completion-extra-selected))) `(helm-selection-line ((,class :inherit modus-themes-special-cold))) `(helm-separator ((,class :foreground ,fg-special-mild))) `(helm-time-zone-current ((,class :foreground ,green))) `(helm-time-zone-home ((,class :foreground ,magenta))) - `(helm-source-header ((,class :inherit modus-themes-pseudo-header :foreground ,fg-special-cold))) + `(helm-source-header ((,class :inherit modus-themes-pseudo-header :foreground ,fg-special-warm))) `(helm-top-columns ((,class :inherit helm-header))) `(helm-ucs-char ((,class :foreground ,yellow-alt-other))) `(helm-visible-mark ((,class :inherit modus-themes-subtle-cyan))) @@ -5655,14 +5779,11 @@ ;;;;; helm-ls-git `(helm-ls-git-untracked-face ((,class :foreground ,fg-special-cold))) ;;;;; helm-switch-shell `(helm-switch-shell-new-shell-face ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-magenta 'modus-themes-refine-magenta - 'modus-themes-nuanced-magenta - magenta-alt-other - 'bold)))) + 'modus-themes-subtle-magenta + 'modus-themes-nuanced-magenta)))) ;;;;; helm-xref - `(helm-xref-file-name ((,class :inherit bold :foreground ,fg-special-cold))) - `(helm-xref-file-name ((,class :foreground ,fg-special-warm))) + `(helm-xref-file-name ((,class :inherit compilation-info))) ;;;;; helpful `(helpful-heading ((,class :inherit modus-themes-heading-1))) ;;;;; highlight region or ad-hoc regexp @@ -5678,7 +5799,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 :background ,blue-subtle-bg :foreground ,fg-main))) + `(highlight ((,class :background ,cyan-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))) @@ -5705,27 +5826,15 @@ ;;;;; hydra `(hydra-face-red ((,class :inherit bold :foreground ,red-faint))) `(hydra-face-teal ((,class :inherit bold :foreground ,cyan-alt-other))) ;;;;; icomplete - `(icomplete-first-match ((,class :inherit bold - ,@(modus-themes--standard-completions - magenta bg-alt - bg-active fg-main)))) - `(icomplete-selected-match ((,class :inherit bold :foreground ,fg-main - :background ,@(pcase modus-themes-completions - ('opinionated (list bg-active)) - (_ (list bg-inactive)))))) + `(icomplete-first-match ((,class :inherit modus-themes-completion-standard-first-match))) + `(icomplete-selected-match ((,class :inherit modus-themes-completion-standard-selected))) ;;;;; icomplete-vertical `(icomplete-vertical-separator ((,class :inherit shadow))) ;;;;; ido-mode - `(ido-first-match ((,class :inherit bold - ,@(modus-themes--standard-completions - magenta bg-alt - bg-active fg-main)))) + `(ido-first-match ((,class :inherit modus-themes-completion-standard-first-match))) `(ido-incomplete-regexp ((,class :inherit error))) `(ido-indicator ((,class :inherit modus-themes-subtle-yellow))) - `(ido-only-match ((,class :inherit bold - ,@(modus-themes--standard-completions - green green-nuanced-bg - green-intense-bg fg-main)))) + `(ido-only-match ((,class :inherit ido-first-match))) `(ido-subdir ((,class :foreground ,blue))) `(ido-virtual ((,class :foreground ,fg-special-warm))) ;;;;; iedit @@ -5759,7 +5868,7 @@ ;;;;; info `(info-header-node ((,class :inherit (shadow bold)))) `(info-header-xref ((,class :foreground ,blue-active))) `(info-index-match ((,class :inherit match))) - `(info-menu-header ((,class :inherit modus-themes-heading-3))) + `(info-menu-header ((,class :inherit modus-themes-pseudo-header))) `(info-menu-star ((,class :foreground ,red))) `(info-node ((,class :inherit bold))) `(info-title-1 ((,class :inherit modus-themes-heading-1))) @@ -5803,62 +5912,32 @@ ;;;;; isearch, occur, and the like `(match ((,class :inherit modus-themes-special-calm))) `(query-replace ((,class :inherit (modus-themes-intense-yellow bold)))) ;;;;; ivy - `(ivy-action ((,class :inherit bold :foreground ,red-alt))) - `(ivy-completions-annotations ((,class :inherit completions-annotations))) - `(ivy-confirm-face ((,class :foreground ,cyan))) - `(ivy-current-match ((,class ,@(modus-themes--extra-completions - 'modus-themes-refine-cyan - 'modus-themes-intense-cyan - 'modus-themes-special-cold - nil - 'bold)))) + `(ivy-action ((,class :inherit modus-themes-key-binding))) + `(ivy-confirm-face ((,class :inherit success))) + `(ivy-current-match ((,class :inherit modus-themes-completion-extra-selected))) `(ivy-cursor ((,class :background ,fg-main :foreground ,bg-main))) - `(ivy-grep-info ((,class :foreground ,cyan-alt))) - `(ivy-grep-line-number ((,class :foreground ,fg-special-warm))) `(ivy-highlight-face ((,class :foreground ,magenta))) `(ivy-match-required-face ((,class :inherit error))) - `(ivy-minibuffer-match-face-1 ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-neutral - 'modus-themes-intense-neutral - 'modus-themes-nuanced-cyan - fg-alt)))) + `(ivy-minibuffer-match-face-1 ((,class :inherit modus-themes-subtle-neutral))) `(ivy-minibuffer-match-face-2 ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-green 'modus-themes-refine-green - 'modus-themes-nuanced-green - green-alt-other - 'bold)))) + 'modus-themes-subtle-green + 'modus-themes-special-mild)))) `(ivy-minibuffer-match-face-3 ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-blue 'modus-themes-refine-blue - 'modus-themes-nuanced-blue - blue-alt-other - 'bold)))) + 'modus-themes-subtle-blue + 'modus-themes-special-cold)))) `(ivy-minibuffer-match-face-4 ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-magenta 'modus-themes-refine-magenta - 'modus-themes-nuanced-magenta - magenta-alt-other - 'bold)))) - `(ivy-minibuffer-match-highlight ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-cyan - 'modus-themes-intense-cyan - 'modus-themes-nuanced-cyan - cyan-alt-other - 'bold)))) + 'modus-themes-subtle-magenta + 'modus-themes-special-calm)))) `(ivy-modified-buffer ((,class :inherit modus-themes-slant :foreground ,yellow))) - `(ivy-modified-outside-buffer ((,class :inherit modus-themes-slant :foreground ,yellow-alt))) + `(ivy-modified-outside-buffer ((,class :inherit modus-themes-slant :foreground ,red-alt))) `(ivy-org ((,class :foreground ,cyan-alt-other))) - `(ivy-prompt-match ((,class :inherit ivy-current-match))) `(ivy-remote ((,class :foreground ,magenta))) `(ivy-separator ((,class :inherit shadow))) - `(ivy-subdir ((,class :foreground ,blue-alt-other))) + `(ivy-subdir ((,class :foreground ,blue))) `(ivy-virtual ((,class :foreground ,magenta-alt-other))) - `(ivy-yanked-word ((,class ,@(modus-themes--extra-completions - 'modus-themes-subtle-blue - 'modus-themes-refine-blue - 'modus-themes-nuanced-blue - blue-alt)))) ;;;;; ivy-posframe `(ivy-posframe ((,class :background ,bg-dim :foreground ,fg-main))) `(ivy-posframe-border ((,class :background ,fg-window-divider-inner))) @@ -5910,7 +5989,8 @@ ;;;;; kaocha-runner `(kaocha-runner-warning-face ((,class :inherit warning))) ;;;;; keycast `(keycast-command ((,class :inherit bold :foreground ,blue-active))) - `(keycast-key ((,class :background ,blue-active :foreground ,bg-main))) + `(keycast-key ((,class ,@(modus-themes--mode-line-padded-box blue-active) + :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))) @@ -5992,9 +6072,9 @@ ;;;;; macrostep `(macrostep-gensym-5 ((,class :inherit bold :foreground ,magenta :box t))) `(macrostep-macro-face ((,class :inherit button :foreground ,green-alt))) ;;;;; magit - `(magit-bisect-bad ((,class :foreground ,red-alt-other))) - `(magit-bisect-good ((,class :foreground ,green-alt-other))) - `(magit-bisect-skip ((,class :foreground ,yellow-alt-other))) + `(magit-bisect-bad ((,class :inherit error))) + `(magit-bisect-good ((,class :inherit success))) + `(magit-bisect-skip ((,class :inherit warning))) `(magit-blame-date ((,class :foreground ,blue))) `(magit-blame-dimmed ((,class :inherit (shadow modus-themes-reset-hard)))) `(magit-blame-hash ((,class :foreground ,fg-special-warm))) @@ -6073,19 +6153,19 @@ ;;;;; magit `(magit-log-author ((,class :foreground ,cyan))) `(magit-log-date ((,class :inherit shadow))) `(magit-log-graph ((,class :foreground ,fg-dim))) - `(magit-mode-line-process ((,class :inherit bold :foreground ,blue-active))) + `(magit-mode-line-process ((,class :inherit bold :foreground ,cyan-active))) `(magit-mode-line-process-error ((,class :inherit bold :foreground ,red-active))) `(magit-process-ng ((,class :inherit error))) `(magit-process-ok ((,class :inherit success))) - `(magit-reflog-amend ((,class :background ,bg-main :foreground ,magenta-intense))) - `(magit-reflog-checkout ((,class :background ,bg-main :foreground ,blue-intense))) - `(magit-reflog-cherry-pick ((,class :background ,bg-main :foreground ,green-intense))) - `(magit-reflog-commit ((,class :background ,bg-main :foreground ,green-intense))) - `(magit-reflog-merge ((,class :background ,bg-main :foreground ,green-intense))) - `(magit-reflog-other ((,class :background ,bg-main :foreground ,cyan-intense))) - `(magit-reflog-rebase ((,class :background ,bg-main :foreground ,magenta-intense))) - `(magit-reflog-remote ((,class :background ,bg-main :foreground ,cyan-intense))) - `(magit-reflog-reset ((,class :background ,bg-main :foreground ,red-intense))) + `(magit-reflog-amend ((,class :inherit warning))) + `(magit-reflog-checkout ((,class :inherit bold :foreground ,blue-alt))) + `(magit-reflog-cherry-pick ((,class :inherit success))) + `(magit-reflog-commit ((,class :inherit bold))) + `(magit-reflog-merge ((,class :inherit success))) + `(magit-reflog-other ((,class :inherit bold :foreground ,cyan))) + `(magit-reflog-rebase ((,class :inherit bold :foreground ,magenta))) + `(magit-reflog-remote ((,class :inherit bold :foreground ,magenta-alt-other))) + `(magit-reflog-reset ((,class :inherit error))) `(magit-refname ((,class :inherit shadow))) `(magit-refname-pullreq ((,class :inherit shadow))) `(magit-refname-stash ((,class :inherit shadow))) @@ -6094,21 +6174,21 @@ ;;;;; magit `(magit-section-heading ((,class :inherit bold :foreground ,cyan))) `(magit-section-heading-selection ((,class :inherit (modus-themes-refine-cyan bold)))) `(magit-section-highlight ((,class :background ,bg-alt))) - `(magit-sequence-done ((,class :inherit modus-themes-grue))) - `(magit-sequence-drop ((,class :foreground ,red-alt))) - `(magit-sequence-exec ((,class :foreground ,magenta-alt))) - `(magit-sequence-head ((,class :foreground ,cyan-alt))) - `(magit-sequence-onto ((,class :inherit shadow))) - `(magit-sequence-part ((,class :foreground ,yellow-alt))) - `(magit-sequence-pick ((,class :foreground ,blue-alt))) - `(magit-sequence-stop ((,class :foreground ,red))) - `(magit-signature-bad ((,class :inherit bold :foreground ,red))) - `(magit-signature-error ((,class :foreground ,red-alt))) - `(magit-signature-expired ((,class :foreground ,yellow))) + `(magit-sequence-done ((,class :inherit success))) + `(magit-sequence-drop ((,class :inherit error))) + `(magit-sequence-exec ((,class :inherit bold :foreground ,magenta-alt))) + `(magit-sequence-head ((,class :inherit bold :foreground ,cyan-alt))) + `(magit-sequence-onto ((,class :inherit (bold shadow)))) + `(magit-sequence-part ((,class :inherit warning))) + `(magit-sequence-pick ((,class :inherit bold))) + `(magit-sequence-stop ((,class :inherit error))) + `(magit-signature-bad ((,class :inherit error))) + `(magit-signature-error ((,class :inherit error))) + `(magit-signature-expired ((,class :inherit warning))) `(magit-signature-expired-key ((,class :foreground ,yellow))) - `(magit-signature-good ((,class :inherit modus-themes-grue))) - `(magit-signature-revoked ((,class :foreground ,magenta))) - `(magit-signature-untrusted ((,class :foreground ,cyan))) + `(magit-signature-good ((,class :inherit success))) + `(magit-signature-revoked ((,class :inherit bold :foreground ,magenta))) + `(magit-signature-untrusted ((,class :inherit (bold shadow)))) `(magit-tag ((,class :foreground ,yellow-alt-other))) ;;;;; magit-imerge `(magit-imerge-overriding-value ((,class :inherit bold :foreground ,red-alt))) @@ -6116,9 +6196,8 @@ ;;;;; make-mode (makefiles) `(makefile-makepp-perl ((,class :background ,cyan-nuanced-bg))) `(makefile-space ((,class :background ,magenta-nuanced-bg))) ;;;;; man - `(Man-overstrike ((,class :inherit bold :foreground ,magenta))) + `(Man-overstrike ((,class :inherit bold :foreground ,fg-special-calm))) `(Man-reverse ((,class :inherit modus-themes-subtle-magenta))) - `(Man-underline ((,class :foreground ,cyan :underline t))) ;;;;; marginalia `(marginalia-archive ((,class :foreground ,cyan-alt-other))) `(marginalia-char ((,class :foreground ,magenta))) @@ -6134,14 +6213,8 @@ ;;;;; marginalia `(marginalia-file-priv-rare ((,class :foreground ,red))) `(marginalia-file-priv-read ((,class :foreground ,fg-main))) `(marginalia-file-priv-write ((,class :foreground ,cyan))) - ;; Here we make an exception of not applying the bespoke - ;; `modus-themes-key-binding' for two reasons: (1) completion - ;; highlights can be fairly intense, so we do not want more - ;; components to compete with them for attention, (2) the - ;; `marginalia-key' may not be used for key bindings specifically, - ;; so we might end up applying styles in places we should not. `(marginalia-function ((,class :foreground ,magenta-alt-faint))) - `(marginalia-key ((,class :foreground ,magenta-alt-other))) + `(marginalia-key ((,class :inherit modus-themes-completion-key-binding))) `(marginalia-lighter ((,class :foreground ,blue-alt))) `(marginalia-list ((,class :foreground ,magenta-alt-other-faint))) `(marginalia-mode ((,class :foreground ,cyan))) @@ -6172,6 +6245,7 @@ ;;;;; markdown-mode `(markdown-header-face-5 ((,class :inherit modus-themes-heading-5))) `(markdown-header-face-6 ((,class :inherit modus-themes-heading-6))) `(markdown-header-rule-face ((,class :inherit bold :foreground ,fg-special-warm))) + `(markdown-highlighting-face ((,class :inherit modus-themes-refine-yellow))) `(markdown-hr-face ((,class :inherit bold :foreground ,fg-special-warm))) `(markdown-html-attr-name-face ((,class :inherit modus-themes-fixed-pitch :foreground ,cyan))) @@ -6237,6 +6311,8 @@ ;;;;; markup-faces (`adoc-mode') `(markup-title-4-face ((,class :inherit modus-themes-heading-5))) `(markup-title-5-face ((,class :inherit modus-themes-heading-6))) `(markup-verbatim-face ((,class :inherit modus-themes-fixed-pitch :background ,bg-alt))) +;;;;; mct + `(mct-highlight-candidate ((,class :inherit modus-themes-completion-standard-selected))) ;;;;; mentor `(mentor-download-message ((,class :foreground ,fg-special-warm))) `(mentor-download-name ((,class :foreground ,fg-special-cold))) @@ -6248,10 +6324,10 @@ ;;;;; mentor `(mentor-highlight-face ((,class :inherit modus-themes-subtle-blue))) `(mentor-tracker-name ((,class :foreground ,magenta-alt))) ;;;;; messages - `(message-cited-text-1 ((,class ,@(modus-themes--mail-cite blue-faint fg-alt)))) - `(message-cited-text-2 ((,class ,@(modus-themes--mail-cite green-faint fg-comment-yellow)))) - `(message-cited-text-3 ((,class ,@(modus-themes--mail-cite red-faint fg-special-cold)))) - `(message-cited-text-4 ((,class ,@(modus-themes--mail-cite yellow-faint fg-special-calm)))) + `(message-cited-text-1 ((,class ,@(modus-themes--mail-cite blue-faint blue fg-special-cold)))) + `(message-cited-text-2 ((,class ,@(modus-themes--mail-cite yellow-faint yellow yellow-alt-faint)))) + `(message-cited-text-3 ((,class ,@(modus-themes--mail-cite magenta-alt-faint magenta-alt fg-special-calm)))) + `(message-cited-text-4 ((,class ,@(modus-themes--mail-cite cyan-alt-other-faint cyan-alt-other fg-special-mild)))) `(message-header-cc ((,class :foreground ,blue-alt-other))) `(message-header-name ((,class :inherit bold :foreground ,cyan))) `(message-header-newsgroups ((,class :inherit message-header-other))) @@ -6283,8 +6359,8 @@ ;;;;; mode-line 'alt-style bg-main)))) `(mode-line-active ((,class :inherit mode-line))) `(mode-line-buffer-id ((,class :inherit bold))) - `(mode-line-emphasis ((,class :inherit bold :foreground ,blue-active))) - `(mode-line-highlight ((,class :inherit modus-themes-active-blue :box (:line-width -1 :style pressed-button)))) + `(mode-line-emphasis ((,class :inherit bold :foreground ,magenta-active))) + `(mode-line-highlight ((,class :inherit highlight))) `(mode-line-inactive ((,class :inherit modus-themes-ui-variable-pitch ,@(modus-themes--mode-line-attrs fg-inactive bg-inactive @@ -6436,19 +6512,19 @@ ;;;;; nxml-mode ;;;;; orderless `(orderless-match-face-0 ((,class :inherit bold ,@(modus-themes--standard-completions - blue-alt-other blue-nuanced-bg + blue-alt-other bg-special-cold fg-special-cold blue-refine-bg blue-refine-fg)))) `(orderless-match-face-1 ((,class :inherit bold ,@(modus-themes--standard-completions - magenta-alt magenta-nuanced-bg + magenta-alt bg-special-calm fg-special-calm magenta-refine-bg magenta-refine-fg)))) `(orderless-match-face-2 ((,class :inherit bold ,@(modus-themes--standard-completions - green green-nuanced-bg + green bg-special-mild fg-special-mild green-refine-bg green-refine-fg)))) `(orderless-match-face-3 ((,class :inherit bold ,@(modus-themes--standard-completions - yellow yellow-nuanced-bg + yellow bg-special-warm fg-special-warm yellow-refine-bg yellow-refine-fg)))) ;;;;; org `(org-agenda-calendar-event ((,class ,@(modus-themes--agenda-event blue-alt)))) @@ -6489,10 +6565,7 @@ ;;;;; org `(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 :inherit modus-themes-fixed-pitch - ,@(modus-themes--markup fg-special-mild green-alt-other - bg-alt green-nuanced-bg) - :extend t))) + `(org-code ((,class :inherit modus-themes-markup-code :extend t))) `(org-column ((,class :inherit (modus-themes-fixed-pitch default) :background ,bg-alt))) `(org-column-title ((,class :inherit (bold modus-themes-fixed-pitch default) @@ -6515,7 +6588,8 @@ ;;;;; org `(org-habit-alert-face ((,class ,@(modus-themes--agenda-habit yellow-graph-0-bg yellow-graph-0-bg - yellow-graph-1-bg)))) + yellow-graph-1-bg) + :foreground "black"))) ; special case `(org-habit-alert-future-face ((,class ,@(modus-themes--agenda-habit yellow-graph-1-bg yellow-graph-0-bg @@ -6524,11 +6598,14 @@ ;;;;; org blue-graph-0-bg green-graph-1-bg blue-graph-1-bg - blue-graph-1-bg)))) + blue-graph-1-bg + blue-graph-1-bg) + :foreground "black"))) ; special case `(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 blue-graph-1-bg)))) `(org-habit-overdue-face ((,class ,@(modus-themes--agenda-habit red-graph-0-bg @@ -6542,12 +6619,17 @@ ;;;;; org green-graph-0-bg green-graph-0-bg green-graph-1-bg - blue-graph-0-bg)))) + cyan-graph-0-bg + blue-graph-0-bg + cyan-graph-1-bg) + :foreground "black"))) ; special case `(org-habit-ready-future-face ((,class ,@(modus-themes--agenda-habit green-graph-1-bg green-graph-0-bg green-graph-1-bg - blue-graph-0-bg)))) + cyan-graph-1-bg + blue-graph-0-bg + cyan-graph-1-bg)))) `(org-headline-done ((,class :inherit (modus-themes-variable-pitch modus-themes-grue-nuanced)))) `(org-headline-todo ((,class :inherit modus-themes-variable-pitch :foreground ,red-nuanced-fg))) `(org-hide ((,class :foreground ,bg-main))) @@ -6564,9 +6646,7 @@ ;;;;; org `(org-level-8 ((,class :inherit modus-themes-heading-8))) `(org-link ((,class :inherit button))) `(org-list-dt ((,class :inherit bold))) - `(org-macro ((,class :inherit modus-themes-fixed-pitch - ,@(modus-themes--markup cyan-nuanced-fg cyan - cyan-nuanced-bg cyan-nuanced-bg)))) + `(org-macro ((,class :inherit modus-themes-markup-macro))) `(org-meta-line ((,class :inherit (shadow modus-themes-fixed-pitch)))) `(org-mode-line-clock ((,class :foreground ,fg-main))) `(org-mode-line-clock-overrun ((,class :inherit bold :foreground ,red-active))) @@ -6734,6 +6814,10 @@ ;;;;; prodigy `(prodigy-yellow-face ((,class :inherit warning))) ;;;;; pulse `(pulse-highlight-start-face ((,class :background ,bg-active-accent :extend t))) +;;;;; pyim + `(pyim-page ((,class :background ,bg-active :foreground ,fg-active))) + `(pyim-page-selection ((,class :inherit bold :background ,bg-active :foreground ,blue-active))) + `(pyim-page-subword ((,class :background ,bg-inactive))) ;;;;; quick-peek `(quick-peek-background-face ((,class :background ,bg-alt))) `(quick-peek-border-face ((,class :background ,fg-window-divider-inner :height 1))) @@ -6834,11 +6918,7 @@ ;;;;; ruler-mode `(ruler-mode-pad ((,class :inherit ruler-mode-default :background ,bg-active :foreground ,fg-inactive))) `(ruler-mode-tab-stop ((,class :inherit ruler-mode-default :foreground ,fg-special-warm))) ;;;;; selectrum - `(selectrum-current-candidate - ((,class :inherit bold :foreground ,fg-main - :background ,@(pcase modus-themes-completions - ('opinionated (list bg-active)) - (_ (list bg-inactive)))))) + `(selectrum-current-candidate ((,class :inherit modus-themes-completion-standard-selected))) `(selectrum-mouse-highlight ((,class :inherit highlight))) `(selectrum-quick-keys-highlight ((,class :inherit modus-themes-refine-red))) @@ -6848,12 +6928,12 @@ ;;;;; selectrum-prescient `(selectrum-prescient-primary-highlight ((,class :inherit bold ,@(modus-themes--standard-completions - magenta-alt magenta-nuanced-bg + magenta-alt bg-special-calm fg-special-calm magenta-refine-bg magenta-refine-fg)))) `(selectrum-prescient-secondary-highlight ((,class :inherit bold ,@(modus-themes--standard-completions - cyan-alt-other cyan-nuanced-bg + cyan-alt-other bg-special-cold fg-special-cold cyan-refine-bg cyan-refine-fg)))) ;;;;; semantic `(semantic-complete-inline-face ((,class :foreground ,fg-special-warm :underline t))) @@ -6903,6 +6983,33 @@ ;;;;; sieve-mode `(sieve-test-commands ((,class :inherit font-lock-function-name-face))) ;;;;; skewer-mode `(skewer-error-face ((,class :foreground ,red :underline t))) +;;;;; slime (sldb) + `(sldb-condition-face ((,class :inherit font-lock-preprocessor-face))) + `(sldb-restart-number-face ((,class :inherit bold))) + `(sldb-restart-type-face ((,class :inherit font-lock-type-face))) + `(sldb-restartable-frame-line-face ((,class :inherit success))) + `(sldb-section-face ((,class :inherit modus-themes-pseudo-header))) + `(slime-error-face ((,class :inherit modus-themes-lang-error))) + `(slime-note-face ((,class :underline t))) + `(slime-repl-input-face ((,class :inherit bold))) + `(slime-repl-inputed-output-face ((,class :inherit font-lock-string-face))) + `(slime-repl-output-mouseover-face ((,class :inherit highlight))) + `(slime-repl-prompt-face ((,class :inherit modus-themes-prompt))) + `(slime-style-warning-face ((,class :inherit modus-themes-lang-note))) + `(slime-warning-face ((,class :inherit modus-themes-lang-warning))) +;;;;; sly + `(sly-action-face ((,class :inherit font-lock-type-face))) + `(sly-db-condition-face ((,class :inherit font-lock-preprocessor-face))) + `(sly-db-restartable-frame-line-face ((,class :inherit success))) + `(sly-error-face ((,class :inherit modus-themes-lang-error))) + `(sly-mode-line ((,class :inherit mode-line-emphasis))) + `(sly-mrepl-output-face ((,class :inherit font-lock-string-face))) + `(sly-mrepl-output-face ((,class :inherit font-lock-string-face))) + `(sly-mrepl-prompt-face ((,class :inherit modus-themes-prompt))) + `(sly-note-face ((,class :inherit modus-themes-lang-note))) + `(sly-stickers-placed-face ((,class :inherit modus-themes-subtle-neutral))) + `(sly-style-warning-face ((,class :inherit modus-themes-lang-note))) + `(sly-warning-face ((,class :inherit modus-themes-lang-warning))) ;;;;; smart-mode-line `(sml/charging ((,class :foreground ,green-active))) `(sml/discharging ((,class :foreground ,red-active))) @@ -7082,6 +7189,7 @@ ;;;;; telega `(telega-entity-type-code ((,class :inherit modus-themes-fixed-pitch))) `(telega-entity-type-mention ((,class :foreground ,cyan))) `(telega-entity-type-pre ((,class :inherit modus-themes-fixed-pitch))) + `(telega-entity-type-spoiler ((,class :background ,fg-main :foreground ,fg-main))) `(telega-msg-heading ((,class :background ,bg-alt))) `(telega-msg-self-title ((,class :inherit bold))) `(telega-root-heading ((,class :inherit modus-themes-subtle-neutral))) @@ -7128,6 +7236,8 @@ ;;;;; term `(term-color-white ((,class :background "gray65" :foreground "gray65"))) `(term-color-yellow ((,class :background ,yellow :foreground ,yellow))) `(term-underline ((,class :underline t))) +;;;;; textsec + `(textsec-suspicious ((,class :inherit modus-themes-refine-red))) ;;;;; tomatinho `(tomatinho-ok-face ((,class :foreground ,blue-intense))) `(tomatinho-pause-face ((,class :foreground ,yellow-intense))) @@ -7135,7 +7245,7 @@ ;;;;; tomatinho ;;;;; transient `(transient-active-infix ((,class :inherit modus-themes-special-mild))) `(transient-amaranth ((,class :inherit bold :foreground ,yellow-alt))) - `(transient-argument ((,class :inherit bold :foreground ,green))) + `(transient-argument ((,class :inherit bold :background ,cyan-nuanced-bg :foreground ,cyan))) `(transient-blue ((,class :inherit bold :foreground ,blue))) `(transient-disabled-suffix ((,class :inherit modus-themes-intense-red))) `(transient-enabled-suffix ((,class :inherit modus-themes-grue-background-subtle))) @@ -7146,11 +7256,12 @@ ;;;;; transient `(transient-mismatched-key ((,class :underline t))) `(transient-nonstandard-key ((,class :underline t))) `(transient-pink ((,class :inherit bold :foreground ,magenta-alt-faint))) + `(transient-purple ((,class :inherit bold :foreground ,magenta-alt-other))) `(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))) - `(transient-value ((,class :inherit bold :foreground ,magenta-alt-other))) + `(transient-unreachable ((,class :inherit shadow))) + `(transient-unreachable-key ((,class :inherit shadow))) + `(transient-value ((,class :inherit bold :background ,yellow-nuanced-bg :foreground ,yellow-alt-other))) ;;;;; trashed `(trashed-deleted ((,class :inherit modus-themes-mark-del))) `(trashed-directory ((,class :foreground ,blue))) @@ -7237,10 +7348,7 @@ ;;;;; vc (vc-dir.el, vc-hooks.el) `(vc-state-base ((,class :foreground ,fg-active))) `(vc-up-to-date-state ((,class :foreground ,fg-special-cold))) ;;;;; vertico - `(vertico-current ((,class :inherit bold :foreground ,fg-main - :background ,@(pcase modus-themes-completions - ('opinionated (list bg-active)) - (_ (list bg-inactive)))))) + `(vertico-current ((,class :inherit modus-themes-completion-standard-selected))) ;;;;; vertico-quick `(vertico-quick1 ((,class :inherit (modus-themes-intense-magenta bold)))) `(vertico-quick2 ((,class :inherit (modus-themes-refine-cyan bold)))) @@ -7365,7 +7473,7 @@ ;;;;; which-key `(which-key-local-map-description-face ((,class :foreground ,fg-main))) `(which-key-note-face ((,class :foreground ,fg-special-warm))) `(which-key-separator-face ((,class :inherit shadow))) - `(which-key-special-key-face ((,class :inherit bold :foreground ,orange-intense))) + `(which-key-special-key-face ((,class :inherit bold :foreground ,red-alt))) ;;;;; whitespace-mode `(whitespace-big-indent ((,class :inherit modus-themes-subtle-red))) `(whitespace-empty ((,class :inherit modus-themes-intense-magenta))) @@ -7390,9 +7498,8 @@ ;;;;; writegood-mode `(writegood-weasels-face ((,class :inherit modus-themes-lang-error))) ;;;;; woman `(woman-addition ((,class :foreground ,magenta-alt-other))) - `(woman-bold ((,class :inherit bold :foreground ,magenta))) - `(woman-italic ((,class :inherit italic :foreground ,cyan))) - `(woman-unknown ((,class :inherit italic :foreground ,yellow))) + `(woman-bold ((,class :inherit bold :foreground ,fg-special-calm))) + `(woman-unknown ((,class :foreground ,cyan))) ;;;;; xah-elisp-mode `(xah-elisp-at-symbol ((,class :inherit font-lock-warning-face))) `(xah-elisp-cap-variable ((,class :inherit font-lock-preprocessor-face))) diff --git a/etc/themes/modus-vivendi-theme.el b/etc/themes/modus-vivendi-theme.el index 738753741c..3e78a6c959 100644 --- a/etc/themes/modus-vivendi-theme.el +++ b/etc/themes/modus-vivendi-theme.el @@ -1,10 +1,10 @@ -;;; modus-vivendi-theme.el --- Accessible dark theme (WCAG AAA) -*- lexical-binding:t -*- +;;; modus-vivendi-theme.el --- Accessible and customizable dark theme (WCAG AAA) -*- lexical-binding:t -*- -;; Copyright (C) 2019-2022 Free Software Foundation, Inc. +;; Copyright (C) 2019-2022 Free Software Foundation, Inc. ;; Author: Protesilaos Stavrou ;; URL: https://gitlab.com/protesilaos/modus-themes -;; Version: 2.0.0 +;; Version: 2.1.0 ;; Package-Requires: ((emacs "27.1")) ;; Keywords: faces, theme, accessibility -- 2.35.1