#+language: en
#+options: ':t toc:nil author:t email:t num:t
#+startup: content
-#+macro: stable-version 4.6.0
-#+macro: release-date 2024-10-27
-#+macro: development-version 4.7.0-dev
+#+macro: stable-version 4.7.0
+#+macro: release-date 2025-04-17
+#+macro: development-version 4.8.0-dev
#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
#+macro: space @@texinfo:@: @@
#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
are variants of the two main themes. They slightly tone down the
intensity of the background and provide a bit more color variety.
~modus-operandi-tinted~ has a set of base tones that are shades of
- light ocher (earthly colors), while ~modus-vivendi-tinted~ gives a
+ light ochre (earthly colors), while ~modus-vivendi-tinted~ gives a
night sky impression.
- Deuteranopia themes :: ~modus-operandi-deuteranopia~ and its
#+findex: modus-themes-list-colors
The command ~modus-themes-list-colors~ uses minibuffer completion to
select an item from the Modus themes and then produces a buffer with
-previews of its color palette entries. The buffer has a naming scheme
-that reflects the given choice, like =modus-operandi-list-colors= for
-the ~modus-operandi~ theme.
+previews of all of its color palette entries.
#+findex: modus-themes-list-colors-current
The command ~modus-themes-list-colors-current~ skips the minibuffer
-selection process and just produces a preview for the current Modus
-theme.
+selection process to produce a preview for the current Modus theme.
When called with a prefix argument (=C-u= with the default key
bindings), these commands will show a preview of the palette's
-semantic color mappings instead of the named colors. In this context,
-"named colors" are entries that associate a symbol to a string color
-value, such as =(blue-warmer "#354fcf")=. Whereas "semantic color
-mappings" associate a named color to a symbol, like =(string
-blue-warmer)=, thus making the theme render all string constructs in
-the =blue-warmer= color value ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]).
+semantic color mappings instead of the full palette ([[#h:34c7a691-19bb-4037-8d2f-67a07edab150][Option for palette overrides]]).
#+findex: modus-themes-preview-colors
#+findex: modus-themes-preview-colors-current
-Aliases for those commands are ~modus-themes-preview-colors~ and
+Aliases for these commands are ~modus-themes-preview-colors~ and
~modus-themes-preview-colors-current~.
-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.
+Each row includes a foreground and background rendition of the given
+color value. For example a line with =#a60000= (a shade of red) will
+show a column with a red background combined with a suitable
+foreground followed by another column with a red foreground against
+the current theme's background. The intent is to illustrate which
+values are suitable as a background or foreground.
The name of the buffer describes the given Modus theme and what the
-contents are, such as =*modus-operandi-list-colors*= for named colors
-and ==*modus-operandi-list-mappings*= for the semantic color mappings.
+contents are, such as =*modus-operandi-list-all*= for the entirety of
+the palette (named colors as well as semantic color mappings) and
+==*modus-operandi-list-mappings*= for the mappings only.
* Use colors from the Modus themes palette
:PROPERTIES:
:END:
#+findex: modus-themes-get-color-value
-The function ~modus-themes-get-color-value~ can be called from Lisp to
+The fuction ~modus-themes-get-color-value~ can be called from Lisp to
return the value of a color from the active Modus theme palette. It
takea a =COLOR= argument and an optional =OVERRIDES=. It also accepts
a third =THEME= argument, to get the color from the given theme.
;; was the default in versions of the Modus themes before 4.4.0
(setq modus-themes-common-palette-overrides
'((bg-prose-block-contents unspecified)
- (bg-prose-block-delimiter unspecified)
+ (bg-prose-block-delimiter unspeficied)
(fg-prose-block-delimiter fg-dim)))
#+end_src
:CUSTOM_ID: h:a5140c9c-18b2-45db-8021-38d0b5074116
:END:
-By default, the background of the ~region~ face extends from the
+By the default, the background of the ~region~ face extends from the
end of the line to the edge of the window. To limit it to the end of
the line, we need to override the face's =:extend= attribute. Adding
this to the Emacs configuration file will suffice:
With the exception of ~org-verbatim~ and ~org-code~ faces, everything else
uses the corresponding type of emphasis: a bold typographic weight, or
-italicized, underlined, and struck through text.
+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
(modus-themes-with-colors
(custom-set-faces
;; FIXME: What is a "region cursor" and should it differ from the position highlights below?
- `(meow-region-cursor-1 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-0)))
- `(meow-region-cursor-2 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-1)))
- `(meow-region-cursor-3 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-2)))
+ `(meow-region-cursor-1 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft))))
+ `(meow-region-cursor-2 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft))))
+ `(meow-region-cursor-3 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft))))
- `(meow-position-highlight-number-1 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-0)))
- `(meow-position-highlight-number-2 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-1)))
- `(meow-position-highlight-number-3 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-2))))))
+ `(meow-position-highlight-number-1 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft))))
+ `(meow-position-highlight-number-2 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft))))
+ `(meow-position-highlight-number-3 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft)))))))
(add-hook 'enable-theme-functions #'my-modus-themes-custom-faces)
#+end_src
[[#h:d87673fe-2ce1-4c80-a4b8-be36ca9f2d24][Using a hook at the post-load-theme phase]].
-** DIY Add support for howm
-:PROPERTIES:
-:CUSTOM_ID: h:7ea8fa66-1cd8-47b0-92b4-9998a3068f85
-:END:
-
-The ~howm~ package is a note-taking solution for Emacs. Users can add
-support for its faces with something like the following.
-
-#+begin_src emacs-lisp
-(defun my-modus-themes-custom-faces (&rest _)
- (modus-themes-with-colors
- (custom-set-faces
- `(action-lock-face ((,c :inherit button)))
- `(howm-mode-keyword-face (( )))
- `(howm-mode-ref-face ((,c :inherit link)))
- `(howm-mode-title-face ((,c :inherit modus-themes-heading-0)))
- `(howm-mode-wiki-face ((,c :inherit link)))
- `(howm-reminder-deadline-face ((,c :foreground ,date-deadline)))
- `(howm-reminder-late-deadline-face ((,c :inherit bold :foreground ,date-deadline)))
- `(howm-reminder-defer-face ((,c :foreground ,date-scheduled)))
- `(howm-reminder-scheduled-face ((,c :foreground ,date-scheduled)))
- `(howm-reminder-done-face ((,c :foreground ,prose-done)))
- `(howm-reminder-todo-face ((,c :foreground ,prose-todo)))
- `(howm-reminder-normal-face ((,c :foreground ,date-common)))
- `(howm-reminder-today-face ((,c :inherit bold :foreground ,date-common)))
- `(howm-reminder-tomorrow-face ((,c :inherit bold :foreground ,date-scheduled)))
- `(howm-simulate-todo-mode-line-face ((,c :inherit bold)))
- `(howm-view-empty-face (( )))
- `(howm-view-hilit-face ((,c :inherit match)))
- `(howm-view-name-face ((,c :inherit bold)))
- `(iigrep-counts-face1 ((,c :foreground ,rainbow-1)))
- `(iigrep-counts-face2 ((,c :foreground ,rainbow-2)))
- `(iigrep-counts-face3 ((,c :foreground ,rainbow-3)))
- `(iigrep-counts-face4 ((,c :foreground ,rainbow-4)))
- `(iigrep-counts-face5 ((,c :foreground ,rainbow-5))))))
-
-(add-hook 'enable-theme-functions #'my-modus-themes-custom-faces)
-#+end_src
-
** DIY Use a hook at the post-load-theme phase
:PROPERTIES:
:CUSTOM_ID: h:d87673fe-2ce1-4c80-a4b8-be36ca9f2d24
affected face groups. The items with an appended asterisk =*= tend to
have lots of extensions, so the "full support" may not be 100% true…
++ abbrev
+ ace-window
+ agda2-mode
+ all-the-icons
+ hl-fill-column
+ hl-line-mode
+ hl-todo
++ howm
+ hydra
+ ibuffer
+ icomplete
+ sly
+ smart-mode-line
+ smerge
++ spacious-padding
+ speedbar
+ spell-fu
+ stripes
+ terraform-mode
+ term
+ textsec
++ tldr
+ transient (pop-up windows such as Magit's)
+ trashed
++ treemacs
+ tree-sitter
+ tty-menu
+ tuareg
latter is the least effective in that regard).
When we need to work with several colors, it is always better to have
-sufficient maneuvering space, especially since we cannot pick arbitrary
+sufficient manoeuvring space, especially since we cannot pick arbitrary
colors but only those that satisfy the accessibility objectives of the
themes.
to view its contents and (ii) underlining everything would make the
interface virtually unusable.
-Again, one must exercise judgment in order to avoid discrimination,
+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
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
+requires one to exercize 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.
Contovounesios, Björn Lindström, Carlo Zancanaro, Christian Tietze,
Daniel Mendler, David Edmondson, Eli Zaretskii, Fritz Grabo, Gautier
Ponsinet, Illia Ostapyshyn, Jared Finder, Kévin Le Gouguec, Koen van
- Greevenbroek, Kostadin Ninev, Madhavan Krishnan, Manuel Giraud,
- Markus Beppler, Matthew Stevenson, Mauro Aranda, Nacho Barrientos,
- Niall Dooley, Nicolas De Jaeghere, Paul David, Pavel Novichkov,
- Philip Kaludercic, Pierre Téchoueyres, Rudolf Adamkovič, Sergey
- Nichiporchik, Shreyas Ragavan, Stefan Kangas, Stephen Berman,
- Stephen Gildea, Steve Downey, Thanos Apollo, Tomasz Hołubowicz,
- Utkarsh Singh, Vincent Murphy, Xinglu Chen, Yuanchen Xie, fluentpwn,
- okamsn.
+ Greevenbroek, Kostadin Ninev, Leilei332, Madhavan Krishnan, Manuel
+ Giraud, Markus Beppler, Matthew Stevenson, Mauro Aranda, Nacho
+ Barrientos, Niall Dooley, Nicolas De Jaeghere, Paul David, Pavel
+ Novichkov, Philip Kaludercic, Pierre Téchoueyres, Rahul M.
+ {{{space()}}} Juliato, Rudolf Adamkovič, Sergey Nichiporchik,
+ Shreyas Ragavan, Stefan Kangas, Stephen Berman, Stephen Gildea,
+ Steve Downey, Thanos Apollo, Tomasz Hołubowicz, Utkarsh Singh,
+ Vincent Murphy, Xinglu Chen, Yuanchen Xie, fluentpwn, okamsn.
+ Ideas and user feedback :: Aaron Jensen, Adam Porter, Adam Spiers,
Adrian Manea, Aleksei Pirogov, Alex Griffin, Alex Koen, Alex
Eugene, Fourchaux, Fredrik, Moesasji, Nick, Summer Emacs, TheBlob42,
TitusMu, Trey, ZharMeny, bepolymathe, bit9tream, bangedorrunt,
derek-upham, doolio, fleimgruber, gitrj95, iSeeU, jixiuf, ltmsyvag,
- okamsn, pRot0ta1p, shipmints, soaringbird, tumashu, wakamenod.
+ okamsn, pedro-nonfree, pRot0ta1p, shipmints, soaringbird, tumashu,
+ wakamenod.
+ Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii,
Glenn Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core
Version 1.3, 3 November 2008
- Copyright (C) 2000-2002, 2007-2008, 2025 Free Software Foundation, Inc.
+ Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
<https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
;;; modus-operandi-deuteranopia-theme.el --- Deuteranopia-optimized theme with a white background -*- lexical-binding:t -*-
-;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; Maintainer: Protesilaos Stavrou <info@protesilaos.com>
(bg-completion "#c0deff")
(bg-hover "#b2e4dc")
- (bg-hover-secondary "#f5d0a0")
+ (bg-hover-secondary "#e5d7a0")
(bg-hl-line "#dae5ec")
(bg-region "#bdbdbd")
(fg-region "#000000")
- (bg-char-0 "#7feaff")
- (bg-char-1 "#ffaaff")
- (bg-char-2 "#dff000")
-
(bg-mode-line-active "#d0d6ff")
(fg-mode-line-active "#0f0f0f")
(border-mode-line-active "#4f4f74")
(bg-diff-context "#f3f3f3")
-;;; Paren match
-
- (bg-paren-match "#5fcfff")
- (fg-paren-match fg-main)
- (bg-paren-expression "#efd3f5")
- (underline-paren-match unspecified)
-
;;; Mappings
;;;; General mappings
;;;; Code mappings
(bracket fg-main)
- (builtin magenta-warmer)
+ (builtin yellow)
(comment yellow-cooler)
- (constant blue-cooler)
+ (constant blue-faint)
(delimiter fg-main)
(docmarkup magenta-faint)
(docstring green-faint)
- (fnname magenta)
- (keyword magenta-cooler)
+ (fnname yellow-warmer)
+ (keyword blue-cooler)
(number fg-main)
(operator fg-main)
- (preprocessor red-cooler)
+ (preprocessor magenta-cooler)
(punctuation fg-main)
(rx-backslash blue-cooler)
(rx-construct yellow-cooler)
(type cyan-cooler)
(variable cyan)
+;;;; Paren match
+
+ (bg-paren-match bg-cyan-subtle)
+ (fg-paren-match fg-main)
+ (underline-paren-match unspecified)
+ (bg-paren-expression bg-yellow-nuanced)
+
;;;; Accent mappings
- (accent-0 blue)
+ (accent-0 blue-warmer)
(accent-1 yellow-warmer)
(accent-2 cyan)
- (accent-3 magenta-cooler)
+ (accent-3 yellow-cooler)
;;;; Button mappings
;;;; Completion mappings
- (fg-completion-match-0 blue)
+ (fg-completion-match-0 blue-warmer)
(fg-completion-match-1 yellow-warmer)
(fg-completion-match-2 cyan)
- (fg-completion-match-3 magenta-cooler)
+ (fg-completion-match-3 yellow-cooler)
(bg-completion-match-0 unspecified)
(bg-completion-match-1 unspecified)
(bg-completion-match-2 unspecified)
(date-scheduled yellow-cooler)
(date-scheduled-subtle yellow-faint)
(date-weekday cyan)
- (date-weekend magenta)
+ (date-weekend blue-cooler)
;;;; Line number mappings
(fg-prose-macro magenta-cooler)
(bg-prose-verbatim unspecified)
- (fg-prose-verbatim magenta-warmer)
+ (fg-prose-verbatim yellow)
(prose-done blue)
(prose-todo yellow-warmer)
(prose-table fg-alt)
(prose-table-formula yellow-warmer)
- (prose-tag magenta-faint)
+ (prose-tag fg-alt)
;;;; Rainbow mappings
(bg-search-current bg-yellow-intense)
(bg-search-lazy bg-blue-intense)
- (bg-search-replace bg-magenta-intense)
+ (bg-search-replace bg-yellow-intense)
(bg-search-rx-group-0 bg-cyan-intense)
(bg-search-rx-group-1 bg-magenta-intense)
(fg-heading-0 cyan-cooler)
(fg-heading-1 fg-main)
(fg-heading-2 yellow-faint)
- (fg-heading-3 fg-alt)
- (fg-heading-4 magenta)
- (fg-heading-5 green-faint)
- (fg-heading-6 red-faint)
- (fg-heading-7 cyan-warmer)
+ (fg-heading-3 blue-faint)
+ (fg-heading-4 green-faint)
+ (fg-heading-5 magenta-cooler)
+ (fg-heading-6 yellow-cooler)
+ (fg-heading-7 cyan)
(fg-heading-8 fg-dim)
(bg-heading-0 unspecified)
;;; modus-operandi-theme.el --- Elegant, highly legible theme with a white background -*- lexical-binding:t -*-
-;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; Maintainer: Protesilaos Stavrou <info@protesilaos.com>
(bg-region "#bdbdbd")
(fg-region "#000000")
- (bg-char-0 "#7feaff")
- (bg-char-1 "#ffaaff")
- (bg-char-2 "#dff000")
-
(bg-mode-line-active "#c8c8c8")
(fg-mode-line-active "#000000")
(border-mode-line-active "#5a5a5a")
(bg-diff-context "#f3f3f3")
-;;; Paren match
-
- (bg-paren-match "#5fcfff")
- (fg-paren-match fg-main)
- (bg-paren-expression "#efd3f5")
- (underline-paren-match unspecified)
-
;;; Mappings
;;;; General mappings
(type cyan-cooler)
(variable cyan)
+;;;; Paren match
+
+ (bg-paren-match bg-cyan-subtle)
+ (fg-paren-match fg-main)
+ (underline-paren-match unspecified)
+ (bg-paren-expression bg-yellow-nuanced)
+
;;;; Accent mappings
(accent-0 blue)
-;;; modus-operandi-tinted-theme.el --- Elegant, highly legible theme with a light ocher background -*- lexical-binding:t -*-
+;;; modus-operandi-tinted-theme.el --- Elegant, highly legible theme with a light ochre background -*- lexical-binding:t -*-
-;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; Maintainer: Protesilaos Stavrou <info@protesilaos.com>
;;;###theme-autoload
(deftheme modus-operandi-tinted
- "Elegant, highly legible theme with a light ocher background.
+ "Elegant, highly legible theme with a light ochre background.
Conforms with the highest legibility standard for color contrast
between background and foreground in any given piece of text,
which corresponds to a minimum contrast in relative luminance of
(red-cooler "#a0132f")
(red-faint "#7f0000")
(red-intense "#d00000")
- (green "#006800")
- (green-warmer "#316500")
- (green-cooler "#00663f")
+ (green "#006300")
+ (green-warmer "#306010")
+ (green-cooler "#00603f")
(green-faint "#2a5045")
(green-intense "#008900")
- (yellow "#6f5500")
- (yellow-warmer "#884900")
- (yellow-cooler "#7a4f2f")
- (yellow-faint "#624416")
+ (yellow "#6d5000")
+ (yellow-warmer "#894000")
+ (yellow-cooler "#602938")
+ (yellow-faint "#574316")
(yellow-intense "#808000")
(blue "#0031a9")
- (blue-warmer "#3548cf")
+ (blue-warmer "#3546c2")
(blue-cooler "#0000b0")
(blue-faint "#003497")
(blue-intense "#0000ff")
(magenta-cooler "#531ab6")
(magenta-faint "#7c318f")
(magenta-intense "#dd22dd")
- (cyan "#005e8b")
- (cyan-warmer "#3f578f")
+ (cyan "#00598b")
+ (cyan-warmer "#32548f")
(cyan-cooler "#005f5f")
- (cyan-faint "#005077")
+ (cyan-faint "#304463")
(cyan-intense "#008899")
;;; Uncommon accent foregrounds
(bg-completion "#f0c1cf")
(bg-hover "#b2e4dc")
- (bg-hover-secondary "#f5d0a0")
+ (bg-hover-secondary "#dfe09f")
(bg-hl-line "#f1d5d0")
(bg-region "#c2bcb5")
(fg-region "#000000")
- (bg-char-0 "#7feaff")
- (bg-char-1 "#ffaaff")
- (bg-char-2 "#dff000")
-
(bg-mode-line-active "#cab9b2")
(fg-mode-line-active "#000000")
(border-mode-line-active "#545454")
(bg-diff-context "#efe9df")
-;;; Paren match
-
- (bg-paren-match "#7fdfcf")
- (fg-paren-match fg-main)
- (bg-paren-expression "#efd3f5")
- (underline-paren-match unspecified)
-
;;; Mappings
;;;; General mappings
(keybind red)
(name magenta)
- (identifier yellow-cooler)
+ (identifier yellow-faint)
(err red)
- (warning yellow-warmer)
- (info cyan-cooler)
+ (warning yellow)
+ (info green)
(underline-err red-intense)
(underline-warning yellow-intense)
;;;; Code mappings
(bracket fg-main)
- (builtin magenta-warmer)
+ (builtin magenta)
(comment red-faint)
- (constant blue-cooler)
+ (constant magenta-cooler)
(delimiter fg-main)
(docmarkup magenta-faint)
- (docstring green-faint)
- (fnname magenta)
- (keyword magenta-cooler)
+ (docstring cyan-faint)
+ (fnname yellow-cooler)
+ (keyword blue)
(number fg-main)
(operator fg-main)
- (preprocessor red-cooler)
+ (preprocessor yellow-warmer)
(punctuation fg-main)
- (rx-backslash magenta)
- (rx-construct green-cooler)
- (string blue-warmer)
- (type cyan-cooler)
- (variable cyan)
+ (rx-backslash magenta-warmer)
+ (rx-construct magenta-cooler)
+ (string cyan)
+ (type green-warmer)
+ (variable green-cooler)
+
+;;;; Paren match
+
+ (bg-paren-match bg-cyan-subtle)
+ (fg-paren-match fg-main)
+ (underline-paren-match unspecified)
+ (bg-paren-expression bg-yellow-nuanced)
;;;; Accent mappings
- (accent-0 blue)
- (accent-1 magenta-warmer)
- (accent-2 cyan)
- (accent-3 red)
+ (accent-0 red-cooler)
+ (accent-1 cyan)
+ (accent-2 magenta-cooler)
+ (accent-3 yellow-warmer)
;;;; Button mappings
;;;; Mail mappings
- (mail-cite-0 blue-faint)
- (mail-cite-1 yellow-warmer)
- (mail-cite-2 cyan-cooler)
+ (mail-cite-0 cyan-cooler)
+ (mail-cite-1 yellow)
+ (mail-cite-2 green-warmer)
(mail-cite-3 red-cooler)
- (mail-part cyan)
- (mail-recipient magenta-cooler)
+ (mail-part magenta-cooler)
+ (mail-recipient blue-warmer)
(mail-subject magenta-warmer)
- (mail-other magenta-faint)
+ (mail-other magenta)
;;;; Mark mappings
;;;; Prompt mappings
- (fg-prompt cyan-cooler)
+ (fg-prompt green-cooler)
(bg-prompt unspecified)
;;;; Prose mappings
(bg-prose-block-contents bg-dim)
(bg-prose-code unspecified)
- (fg-prose-code cyan-cooler)
+ (fg-prose-code green-cooler)
(bg-prose-macro unspecified)
- (fg-prose-macro magenta-cooler)
+ (fg-prose-macro blue-cooler)
(bg-prose-verbatim unspecified)
- (fg-prose-verbatim magenta-warmer)
+ (fg-prose-verbatim yellow-warmer)
(prose-done green)
(prose-todo red)
;;;; Heading mappings
- (fg-heading-0 cyan-cooler)
+ (fg-heading-0 green-cooler)
(fg-heading-1 fg-main)
(fg-heading-2 yellow-faint)
(fg-heading-3 fg-alt)
;;; modus-operandi-tritanopia-theme.el --- Tritanopia-optimized theme with a white background -*- lexical-binding:t -*-
-;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; Maintainer: Protesilaos Stavrou <info@protesilaos.com>
(bg-dim "#f2f2f2")
(fg-main "#000000")
(fg-dim "#595959")
- (fg-alt "#193668")
+ (fg-alt "#024960")
(bg-active "#c4c4c4")
(bg-inactive "#e0e0e0")
(border "#9f9f9f")
(bg-completion "#afdfef")
(bg-hover "#ffafbc")
- (bg-hover-secondary "#9fdfff")
+ (bg-hover-secondary "#abdfdd")
(bg-hl-line "#dfeaec")
(bg-region "#bdbdbd")
(fg-region "#000000")
- (bg-char-0 "#ff908f")
- (bg-char-1 "#bfbfff")
- (bg-char-2 "#5fcfdf")
-
(bg-mode-line-active "#afe0f2")
(fg-mode-line-active "#0f0f0f")
(border-mode-line-active "#2f4f44")
(bg-diff-context "#f3f3f3")
-;;; Paren match
-
- (bg-paren-match "#5fcfff")
- (fg-paren-match fg-main)
- (bg-paren-expression "#efd3f5")
- (underline-paren-match unspecified)
-
;;; Mappings
;;;; General mappings
(type blue-warmer)
(variable cyan-cooler)
+;;;; Paren match
+
+ (bg-paren-match bg-cyan-subtle)
+ (fg-paren-match fg-main)
+ (underline-paren-match unspecified)
+ (bg-paren-expression bg-red-nuanced)
+
;;;; Accent mappings
(accent-0 cyan)
(prose-table fg-alt)
(prose-table-formula red-cooler)
- (prose-tag magenta-faint)
+ (prose-tag fg-alt)
;;;; Rainbow mappings
;;; modus-themes.el --- Elegant, highly legible and customizable themes -*- lexical-binding:t -*-
-;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; Maintainer: Protesilaos Stavrou <info@protesilaos.com>
;; URL: https://github.com/protesilaos/modus-themes
-;; Version: 4.6.0
-;; Package-Requires: ((emacs "27.1"))
+;; Version: 4.7.0
+;; Package-Requires: ((emacs "28.1"))
;; Keywords: faces, theme, accessibility
;; This file is part of GNU Emacs.
themes, the command `modus-themes-toggle' reverts to selecting a
theme from the list of available Modus themes. In effect, it is
the same as using the command `modus-themes-select'."
- :type `(choice
- (const :tag "No toggle" nil)
- (list :tag "Pick two themes to toggle between"
- (choice :tag "Theme one of two" ,@(mapcar (lambda (theme) (list 'const theme)) modus-themes-items))
- (choice :tag "Theme two of two" ,@(mapcar (lambda (theme) (list 'const theme)) modus-themes-items))))
+ :type (let ((themes (mapcar (lambda (theme) (list 'const theme)) modus-themes-items)))
+ `(choice
+ (const :tag "No toggle" nil)
+ (list :tag "Pick two themes to toggle between"
+ (choice :tag "Theme one of two" ,@themes)
+ (choice :tag "Theme two of two" ,@themes))))
:package-version '(modus-themes . "4.0.0")
:version "30.1"
:group 'modus-themes)
:version "31.1"
:group 'modus-themes)
-(defvaralias 'modus-themes-post-load-hook 'modus-themes-after-load-theme-hook)
+(defvaralias 'modus-themes-post-load-hook 'modus-themes-after-load-theme-hook
+ "Alias for `modus-themes-after-load-theme-hook'.")
(defcustom modus-themes-after-load-theme-hook nil
"Hook that runs after loading a Modus theme.
(eq value 'unspecified))
value)
((and (symbolp value)
- (memq value (mapcar #'car palette)))
+ value)
(modus-themes--retrieve-palette-value value palette))
(t
'unspecified))))
"Render `modus-themes--list-known-themes' as completion with theme category."
(modus-themes--completion-table 'theme (modus-themes--list-known-themes)))
-(defun modus-themes--select-prompt ()
- "Minibuffer prompt to select a Modus theme."
+(defun modus-themes--select-prompt (&optional prompt)
+ "Minibuffer prompt to select a Modus theme.
+With optional PROMPT string, use it. Else use a generic prompt."
(let ((completion-extra-properties `(:annotation-function ,#'modus-themes--annotate-theme)))
(intern
(completing-read
- "Select Modus theme: "
+ (or prompt "Select Modus theme: ")
(modus-themes--completion-table-candidates)
- nil t nil
- 'modus-themes--select-theme-history))))
+ nil t nil 'modus-themes--select-theme-history))))
;;;###autoload
(defun modus-themes-select (theme)
(defun modus-themes--toggle-theme-p ()
"Return non-nil if `modus-themes-to-toggle' are valid."
- (mapc
- (lambda (theme)
- (if (or (memq theme modus-themes-items)
- (memq theme (modus-themes--list-known-themes)))
- theme
- (user-error "`%s' is not part of `modus-themes-items'" theme)))
- modus-themes-to-toggle))
+ (condition-case nil
+ (dolist (theme modus-themes-to-toggle)
+ (or (memq theme modus-themes-items)
+ (memq theme (modus-themes--list-known-themes))
+ (error "`%s' is not part of `modus-themes-items'" theme)))
+ (error nil)
+ (:success modus-themes-to-toggle)))
;;;###autoload
(defun modus-themes-toggle ()
;;;;; Preview a theme palette
-(defun modus-themes--list-colors-render (buffer theme &optional mappings &rest _)
- "Render colors in BUFFER from THEME for `modus-themes-list-colors'.
-Optional MAPPINGS changes the output to only list the semantic
-color mappings of the palette, instead of its named colors."
+(defun modus-themes--list-colors-get-mappings (palette)
+ "Get the semantic palette entries in PALETTE.
+PALETTE is the value of a variable like `modus-operandi-palette'."
+ (seq-remove
+ (lambda (cell)
+ (stringp (cadr cell)))
+ palette))
+
+(defun modus-themes--list-colors-tabulated (theme &optional mappings)
+ "Return a data structure of THEME palette or MAPPINGS for tabulated list."
(let* ((current-palette (modus-themes--palette-value theme mappings))
(palette (if mappings
- (seq-remove (lambda (cell)
- (stringp (cadr cell)))
- current-palette)
- current-palette))
- (current-buffer buffer)
- (current-theme theme))
- (with-help-window buffer
- (with-current-buffer standard-output
- (erase-buffer)
- (when (<= (display-color-cells) 256)
- (insert (concat "Your display terminal may not render all color previews!\n"
- "It seems to only support <= 256 colors.\n\n"))
- (put-text-property (point-min) (point) 'face 'warning))
- ;; We need this to properly render the first line.
- (insert " ")
- (dolist (cell palette)
- (let* ((name (car cell))
- (color (modus-themes-get-color-value name mappings theme))
- (pad (make-string 10 ?\s))
- (fg (if (eq color 'unspecified)
- (progn
- (readable-foreground-color (modus-themes-get-color-value 'bg-main nil theme))
- (setq pad (make-string 6 ?\s)))
- (readable-foreground-color color))))
- (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 " ")))
- (setq-local revert-buffer-function
- (lambda (_ignore-auto _noconfirm)
- (modus-themes--list-colors-render current-buffer current-theme mappings)))))))
-
-(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)))
- (completion-extra-properties `(:annotation-function ,#'modus-themes--annotate-theme)))
- (completing-read
- (format "Use palette from theme [%s]: " def)
- (modus-themes--completion-table-candidates)
- nil t nil
- 'modus-themes--list-colors-prompt-history def)))
+ (modus-themes--list-colors-get-mappings current-palette)
+ current-palette)))
+ (mapcar (lambda (cell)
+ (pcase-let* ((`(,name ,value) cell)
+ (name-string (format "%s" name))
+ (value-string (format "%s" value))
+ (value-string-padded (string-pad value-string 30))
+ (color (modus-themes-get-color-value name mappings theme))) ; resolve a semantic mapping
+ (list name
+ (vector
+ (if (and (symbolp value)
+ (not (eq value 'unspecified)))
+ "Yes"
+ "")
+ name-string
+ (propertize value-string 'face `( :foreground ,color))
+ (propertize value-string-padded 'face (list :background color
+ :foreground (if (string= color "unspecified")
+ (readable-foreground-color (modus-themes-get-color-value 'bg-main nil theme))
+ (readable-foreground-color color))))))))
+ palette)))
+
+(defvar modus-themes-current-preview nil)
+(defvar modus-themes-current-preview-show-mappings nil)
+
+(defun modus-themes--set-tabulated-entries ()
+ "Set the value of `tabulated-list-entries' with palette entries."
+ (setq-local tabulated-list-entries
+ (modus-themes--list-colors-tabulated modus-themes-current-preview modus-themes-current-preview-show-mappings)))
(defun modus-themes-list-colors (theme &optional mappings)
- "Preview named colors of the Modus THEME of choice.
-With optional prefix argument for MAPPINGS preview the semantic
-color mappings instead of the named colors."
- (interactive (list (intern (modus-themes--list-colors-prompt)) current-prefix-arg))
- (modus-themes--list-colors-render
- (format (if mappings "*%s-list-mappings*" "*%s-list-colors*") theme)
- theme
- mappings))
+ "Preview the palette of the Modus THEME of choice.
+With optional prefix argument for MAPPINGS preview only the semantic
+color mappings instead of the complete palette."
+ (interactive
+ (let ((prompt (if current-prefix-arg
+ "Preview palette mappings of THEME: "
+ "Preview palette of THEME: ")))
+ (list
+ (modus-themes--select-prompt prompt)
+ current-prefix-arg)))
+ (let ((buffer (get-buffer-create (format (if mappings "*%s-list-mappings*" "*%s-list-all*") theme))))
+ (with-current-buffer buffer
+ (let ((modus-themes-current-preview theme)
+ (modus-themes-current-preview-show-mappings mappings))
+ (modus-themes-preview-mode)))
+ (pop-to-buffer buffer)))
(defalias 'modus-themes-preview-colors 'modus-themes-list-colors
- "Alias of `modus-themes-list-colors'.")
+ "Alias for `modus-themes-list-colors'.")
(defun modus-themes-list-colors-current (&optional mappings)
- "Call `modus-themes-list-colors' for the current Modus theme.
-Optional prefix argument MAPPINGS has the same meaning as for
-`modus-themes-list-colors'."
+ "Like `modus-themes-list-colors' with optional MAPPINGS for the current theme."
(interactive "P")
(modus-themes-list-colors (modus-themes--current-theme) mappings))
(defalias 'modus-themes-preview-colors-current 'modus-themes-list-colors-current
- "Alias of `modus-themes-list-colors-current'.")
+ "Alias for `modus-themes-list-colors-current'.")
+
+(define-derived-mode modus-themes-preview-mode tabulated-list-mode "Modus palette"
+ "Major mode to display a Modus themes palette."
+ :interactive nil
+ (setq-local tabulated-list-format
+ [("Mapping?" 10 t)
+ ("Symbol name" 30 t)
+ ("As foreground" 30 t)
+ ("As background" 0 t)])
+ (modus-themes--set-tabulated-entries)
+ (tabulated-list-init-header)
+ (tabulated-list-print))
\f
:foreground fg
:weight
;; If we have `bold' specifically, we inherit the face of
- ;; the same name. This allows the user to customize that
+ ;; the same name. This allows the user to customise that
;; face, such as to change its font family.
(if (and weight (not (eq weight 'bold)))
weight
`(tool-bar ((,c :background ,bg-dim :foreground ,fg-main)))
`(vertical-border ((,c :foreground ,border)))
;;;;; basic and/or ungrouped styles
+ `(abbrev-table-name ((,c :inherit bold)))
`(appt-notification ((,c :inherit bold :foreground ,modeline-err)))
`(blink-matching-paren-offscreen ((,c :background ,bg-paren-match)))
`(bold ((,c :weight bold)))
`(link ((,c :inherit button)))
`(link-visited ((,c :background ,bg-link-visited :foreground ,fg-link-visited :underline ,underline-link-visited)))
`(tooltip ((,c :background ,bg-active :foreground ,fg-main)))
+;;;;; adoc-mode
+ `(adoc-code-face ((,c :inherit font-lock-constant-face)))
+ `(adoc-command-face ((,c :inherit modus-themes-prose-macro)))
+ `(adoc-complex-replacement-face ((,c :background ,bg-magenta-subtle :foreground ,magenta)))
+ `(adoc-emphasis-face ((t (:inherit bold))))
+ `(adoc-gen-face ((,c :foreground ,blue)))
+ `(adoc-meta-face ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-metadata)))
+ `(adoc-meta-hide-face ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-metadata)))
+ `(adoc-replacement-face ((,c :inherit font-lock-escape-face)))
+ `(adoc-secondary-text-face ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-metadata-value)))
+ `(adoc-table-face ((,c :inherit modus-themes-fixed-pitch :foreground ,prose-table)))
+ `(adoc-title-0-face ((,c :inherit modus-themes-heading-0)))
+ `(adoc-title-1-face ((,c :inherit modus-themes-heading-1)))
+ `(adoc-title-2-face ((,c :inherit modus-themes-heading-2)))
+ `(adoc-title-3-face ((,c :inherit modus-themes-heading-3)))
+ `(adoc-title-4-face ((,c :inherit modus-themes-heading-4)))
+ `(adoc-title-5-face ((,c :inherit modus-themes-heading-5)))
+ `(adoc-typewriter-face ((,c :inherit modus-themes-prose-verbatim)))
+ `(adoc-verbatim-face ((,c :inherit modus-themes-prose-verbatim)))
;;;;; agda2-mode
`(agda2-highlight-bound-variable-face ((,c :inherit font-lock-variable-name-face)))
`(agda2-highlight-catchall-clause-face ((,c :background ,bg-inactive)))
`(TeX-error-description-warning ((,c :inherit warning)))
;;;;; auto-dim-other-buffers
`(auto-dim-other-buffers-face ((,c :background ,bg-inactive)))
+ `(auto-dim-other-buffers-hide-face ((,c :foreground ,bg-inactive :background ,bg-inactive)))
;;;;; avy
`(avy-background-face ((,c :background ,bg-dim :foreground ,fg-dim :extend t)))
- `(avy-goto-char-timer-face ((,c :inherit bold :background ,bg-active)))
- `(avy-lead-face ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-0)))
- `(avy-lead-face-0 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-1)))
- `(avy-lead-face-1 ((,c :inherit modus-themes-reset-soft :background ,bg-inactive)))
- `(avy-lead-face-2 ((,c :inherit (bold modus-themes-reset-soft) :background ,bg-char-2)))
+ `(avy-goto-char-timer-face ((,c :inherit (bold modus-themes-search-lazy modus-themes-reset-soft))))
+ `(avy-lead-face ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft))))
+ `(avy-lead-face-0 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft))))
+ `(avy-lead-face-1 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft))))
+ `(avy-lead-face-2 ((,c :inherit (bold modus-themes-search-current modus-themes-reset-soft))))
;;;;; aw (ace-window)
`(aw-background-face ((,c :foreground "gray50")))
`(aw-key-face ((,c :inherit modus-themes-key-binding)))
;;;;; corfu-candidate-overlay
`(corfu-candidate-overlay-face ((t :inherit shadow)))
;;;;; corfu-quick
- `(corfu-quick1 ((,c :inherit bold :background ,bg-char-0)))
- `(corfu-quick2 ((,c :inherit bold :background ,bg-char-1)))
+ `(corfu-quick1 ((,c :inherit (bold modus-themes-search-current))))
+ `(corfu-quick2 ((,c :inherit (bold modus-themes-search-current))))
;;;;; counsel
`(counsel-active-mode ((,c :foreground ,keyword)))
`(counsel-application-name ((,c :foreground ,name)))
`(geiser-font-lock-xref-link ((,c :inherit button)))
;;;;; git-commit
`(git-commit-comment-action ((,c :inherit font-lock-comment-face)))
- `(git-commit-comment-branch-local ((,c :inherit font-lock-comment-face :foreground ,accent-0)))
- `(git-commit-comment-branch-remote ((,c :inherit font-lock-comment-face :foreground ,accent-1)))
+ `(git-commit-comment-branch-local ((,c :inherit (bold font-lock-comment-face) :foreground ,accent-0)))
+ `(git-commit-comment-branch-remote ((,c :inherit (bold font-lock-comment-face) :foreground ,accent-1)))
`(git-commit-comment-heading ((,c :inherit (bold font-lock-comment-face))))
- `(git-commit-comment-file ((,c :inherit font-lock-comment-face :foreground ,name)))
+ `(git-commit-comment-file ((,c :inherit font-lock-comment-face :foreground ,accent-2))) ; like `magit-filename'
`(git-commit-keyword ((,c :foreground ,keyword)))
`(git-commit-nonempty-second-line ((,c :inherit error)))
`(git-commit-overlong-summary ((,c :inherit warning)))
`(hl-fill-column-face ((,c :background ,bg-active)))
;;;;; hl-todo
`(hl-todo ((,c :inherit (bold font-lock-comment-face) :foreground ,err)))
+;;;;; howm
+ `(action-lock-face ((,c :inherit button)))
+ `(howm-mode-keyword-face (( )))
+ `(howm-mode-ref-face ((,c :inherit link)))
+ `(howm-mode-title-face ((,c :inherit modus-themes-heading-0)))
+ `(howm-mode-wiki-face ((,c :inherit link)))
+ `(howm-reminder-deadline-face ((,c :foreground ,date-deadline)))
+ `(howm-reminder-late-deadline-face ((,c :inherit bold :foreground ,date-deadline)))
+ `(howm-reminder-defer-face ((,c :foreground ,date-scheduled)))
+ `(howm-reminder-scheduled-face ((,c :foreground ,date-scheduled)))
+ `(howm-reminder-done-face ((,c :foreground ,prose-done)))
+ `(howm-reminder-todo-face ((,c :foreground ,prose-todo)))
+ `(howm-reminder-normal-face ((,c :foreground ,date-common)))
+ `(howm-reminder-today-face ((,c :inherit bold :foreground ,date-common)))
+ `(howm-reminder-tomorrow-face ((,c :inherit bold :foreground ,date-scheduled)))
+ `(howm-simulate-todo-mode-line-face ((,c :inherit bold)))
+ `(howm-view-empty-face (( )))
+ `(howm-view-hilit-face ((,c :inherit match)))
+ `(howm-view-name-face ((,c :inherit bold)))
+ `(iigrep-counts-face1 ((,c :foreground ,rainbow-1)))
+ `(iigrep-counts-face2 ((,c :foreground ,rainbow-2)))
+ `(iigrep-counts-face3 ((,c :foreground ,rainbow-3)))
+ `(iigrep-counts-face4 ((,c :foreground ,rainbow-4)))
+ `(iigrep-counts-face5 ((,c :foreground ,rainbow-5)))
;;;;; hydra
`(hydra-face-amaranth ((,c :inherit bold :foreground ,yellow-warmer)))
`(hydra-face-blue ((,c :inherit bold :foreground ,blue)))
`(ibut-face ((,c :inherit button :background ,bg-link-symbolic :foreground ,fg-link-symbolic :underline ,underline-link-symbolic)))
;;;;; icomplete
`(icomplete-first-match ((,c :inherit modus-themes-completion-match-0)))
+ `(icomplete-vertical-selected-prefix-indicator-face ((,c :inherit bold :foreground ,keybind)))
+ `(icomplete-vertical-unselected-prefix-indicator-face ((,c :inherit shadow)))
`(icomplete-selected-match ((,c :inherit modus-themes-completion-selected)))
;;;;; ido-mode
`(ido-first-match ((,c :inherit modus-themes-completion-match-0)))
`(ido-incomplete-regexp ((,c :inherit error)))
`(ido-indicator ((,c :inherit bold)))
`(ido-only-match ((,c :inherit ido-first-match)))
- `(ido-subdir ((,c :foreground ,accent-0)))
- `(ido-virtual ((,c :foreground ,accent-1)))
+ `(ido-subdir ((,c :foreground ,keyword)))
+ `(ido-virtual ((,c :foreground ,warning)))
;;;;; iedit
`(iedit-occurrence ((,c :inherit modus-themes-search-lazy)))
`(iedit-read-only-occurrence ((,c :inherit modus-themes-search-current)))
`(ivy-minibuffer-match-face-4 ((,c :inherit modus-themes-completion-match-2)))
`(ivy-remote ((,c :inherit italic)))
`(ivy-separator ((,c :inherit shadow)))
- `(ivy-subdir ((,c :foreground ,accent-0)))
- `(ivy-virtual ((,c :foreground ,accent-1)))
+ `(ivy-subdir ((,c :foreground ,keyword)))
+ `(ivy-virtual ((,c :foreground ,warning)))
;;;;; ivy-posframe
`(ivy-posframe-border ((,c :background ,border)))
`(ivy-posframe-cursor ((,c :background ,fg-main :foreground ,bg-main)))
;;;;; jabber
`(jabber-activity-face ((,c :foreground ,modeline-info)))
`(jabber-roster-user-away ((,c :foreground ,red-faint)))
- `(jabber-roster-user-xa ((,c :foreground ,magenta :slant italic)))
- `(jabber-roster-user-dnd ((,c :foreground ,red :weight bold)))
+ `(jabber-roster-user-xa ((,c :foreground ,magenta :italic t)))
+ `(jabber-roster-user-dnd ((,c :foreground ,red :bold t)))
`(jabber-roster-user-chatty ((,c :foreground ,cyan-intense)))
`(jabber-roster-user-error ((,c :inherit error)))
- `(jabber-roster-user-offline ((,c :foreground ,fg-dim :slant italic)))
+ `(jabber-roster-user-offline ((,c :foreground ,fg-dim :italic t)))
`(jabber-roster-user-online ((,c :foreground ,cyan :weight bold)))
`(jabber-chat-prompt-foreign ((,c :foreground ,red :weight bold)))
`(jabber-chat-prompt-system ((,c :foreground ,green)))
`(org-clock-overlay ((,c :inherit secondary-selection)))
`(org-code ((,c :inherit modus-themes-prose-code)))
`(org-column ((,c :inherit default :background ,bg-dim)))
- `(org-column-title ((,c :inherit (bold default) :underline t :background ,bg-dim)))
+ `(org-column-title ((,c :inherit (modus-themes-fixed-pitch bold default) :underline t :background ,bg-dim)))
`(org-date ((,c :inherit modus-themes-fixed-pitch :foreground ,date-common)))
`(org-date-selected ((,c :foreground ,date-common :inverse-video t)))
;; NOTE 2024-03-17: Normally we do not want to add this padding
`(smerge-refined-changed (()))
`(smerge-refined-removed ((,c :inherit diff-refine-removed)))
`(smerge-upper ((,c :inherit diff-removed)))
+;;;;; spacious-padding
+ `(spacious-padding-subtle-mode-line-active ((,c :foreground ,accent-0)))
+ `(spacious-padding-subtle-mode-line-inactive ((,c :foreground ,border)))
;;;;; speedbar
`(speedbar-button-face ((,c :inherit button)))
`(speedbar-directory-face ((,c :inherit bold :foreground ,accent-0)))
`(term-underline ((,c :underline t)))
;;;;; textsec
`(textsec-suspicious (( )))
+;;;;; tldr
+ `(tldr-code-block (( )))
+ `(tldr-command-argument ((,c :inherit font-lock-string-face)))
+ `(tldr-command-itself ((,c :inherit font-lock-builtin-face)))
+ `(tldr-description ((,c :inherit font-lock-doc-face)))
+ `(tldr-introduction ((,c :inherit font-lock-comment-face)))
+ `(tldr-title ((,c :inherit bold)))
;;;;; transient
`(transient-active-infix ((,c :inherit highlight)))
`(transient-amaranth ((,c :inherit bold :foreground ,yellow-warmer)))
`(transient-key ((,c :inherit modus-themes-key-binding)))
`(transient-key-exit ((,c :inherit modus-themes-key-binding)))
`(transient-key-noop ((,c :inherit (shadow modus-themes-key-binding))))
+ `(transient-key-recurse ((,c :inherit modus-themes-key-binding)))
`(transient-key-return ((,c :inherit modus-themes-key-binding)))
+ `(transient-key-stack ((,c :inherit modus-themes-key-binding)))
`(transient-key-stay ((,c :inherit modus-themes-key-binding)))
`(transient-mismatched-key ((,c :underline t)))
`(transient-nonstandard-key ((,c :underline t)))
`(trashed-mark ((,c :inherit bold)))
`(trashed-marked ((,c :inherit modus-themes-mark-alt)))
`(trashed-restored ((,c :inherit modus-themes-mark-sel)))
+;;;;; treemacs
+ `(treemacs-async-loading-face ((,c :foreground ,fg-main)))
+ `(treemacs-directory-face ((,c :foreground ,accent-0)))
+ `(treemacs-directory-collapsed-face ((,c :foreground ,accent-0)))
+ `(treemacs-file-face ((,c :foreground ,fg-main)))
+ `(treemacs-fringe-indicator-face ((,c :foreground ,fg-main)))
+ `(treemacs-git-added-face ((,c :inherit success)))
+ `(treemacs-git-commit-diff-face ((,c :foreground ,err)))
+ `(treemacs-git-conflict-face ((,c :inherit error)))
+ `(treemacs-git-ignored-face ((,c :inherit shadow)))
+ `(treemacs-git-modified-face ((,c :inherit warning)))
+ `(treemacs-git-renamed-face ((,c :inherit italic)))
+ `(treemacs-git-unmodified-face ((,c :foreground ,fg-main)))
+ `(treemacs-git-untracked-face ((,c :inherit success)))
+ `(treemacs-header-button-face ((,c :foreground ,fg-main)))
+ `(treemacs-help-column-face ((,c :inherit modus-themes-bold :foreground ,keyword)))
+ `(treemacs-help-title-face ((,c :foreground ,fg-main)))
+ `(treemacs-hl-line-face ((,c :background ,bg-hl-line :extend t)))
+ `(treemacs-marked-file-face ((,c :inherit modus-themes-mark-alt)))
+ `(treemacs-nerd-icons-face ((,c :foreground ,accent-0)))
+ `(treemacs-on-failure-pulse-face ((,c :foreground ,fg-main)))
+ `(treemacs-on-success-pulse-face ((,c :foreground ,fg-main)))
+ `(treemacs-peek-mode-indicator-face ((,c :foreground ,fg-main)))
+ `(treemacs-remote-face ((,c :foreground ,fg-main)))
+ `(treemacs-root-face ((,c :foreground ,accent-0)))
+ `(treemacs-root-remote-disconnected-face ((,c :inherit warning)))
+ `(treemacs-root-remote-unreadable-face ((,c :inherit warning)))
+ `(treemacs-root-unreadable-face ((,c :inherit error)))
+ `(treemacs-tags-face ((,c :foreground ,fg-main)))
+ `(treemacs-term-node-face ((,c :inherit modus-themes-bold :foreground ,keyword)))
+ `(treemacs-window-background-face ((,c :background ,bg-main)))
+ `(treemacs-nerd-icons-root-face ((,c :foreground ,accent-0)))
+ `(treemacs-nerd-icons-file-face ((,c :foreground ,accent-0)))
;;;;; tree-sitter
`(tree-sitter-hl-face:attribute ((,c :inherit font-lock-variable-name-face)))
`(tree-sitter-hl-face:constant.builtin ((,c :inherit tree-sitter-hl-face:constant)))
;;;;; vertico
`(vertico-current ((,c :inherit modus-themes-completion-selected)))
;;;;; vertico-quick
- `(vertico-quick1 ((,c :inherit bold :background ,bg-char-0)))
- `(vertico-quick2 ((,c :inherit bold :background ,bg-char-1)))
+ `(vertico-quick1 ((,c :inherit (bold modus-themes-search-current))))
+ `(vertico-quick2 ((,c :inherit (bold modus-themes-search-current))))
;;;;; vimish-fold
`(vimish-fold-fringe ((,c :foreground ,cyan)))
`(vimish-fold-mouse-face ((,c :inherit modus-themes-intense-blue)))
`(vr/match-1 ((,c :inherit modus-themes-search-lazy)))
`(vr/match-separator-face ((,c :inherit bold :background ,bg-active)))
;;;;; vterm
- ;; NOTE 2023-08-10: `vterm-color-black' and `vterm-color-white'
- ;; use the "bright" semantic color mappings to make sure they are
- ;; distinct from `vterm-color-default'.
`(vterm-color-black ((,c :background ,bg-term-black :foreground ,fg-term-black)))
+ `(vterm-color-bright-black ((,c :background ,bg-term-black-bright :foreground ,fg-term-black-bright)))
+ `(vterm-color-red ((,c :background ,bg-term-red :foreground ,fg-term-red)))
+ `(vterm-color-bright-red ((,c :background ,bg-term-red-bright :foreground ,fg-term-red-bright)))
+ `(vterm-color-green ((,c :background ,bg-term-green :foreground ,fg-term-green)))
+ `(vterm-color-bright-green ((,c :background ,bg-term-green-bright :foreground ,fg-term-green-bright)))
+ `(vterm-color-yellow ((,c :background ,bg-term-yellow :foreground ,fg-term-yellow)))
+ `(vterm-color-bright-yellow ((,c :background ,bg-term-yellow-bright :foreground ,fg-term-yellow-bright)))
`(vterm-color-blue ((,c :background ,bg-term-blue :foreground ,fg-term-blue)))
+ `(vterm-color-bright-blue ((,c :background ,bg-term-blue-bright :foreground ,fg-term-blue-bright)))
+ `(vterm-color-magenta ((,c :background ,bg-term-magenta :foreground ,fg-term-magenta)))
+ `(vterm-color-bright-magenta ((,c :background ,bg-term-magenta-bright :foreground ,fg-term-magenta-bright)))
`(vterm-color-cyan ((,c :background ,bg-term-cyan :foreground ,fg-term-cyan)))
- `(vterm-color-default ((,c :background ,bg-main :foreground ,fg-main)))
- `(vterm-color-green ((,c :background ,bg-term-green :foreground ,fg-term-green)))
+ `(vterm-color-bright-cyan ((,c :background ,bg-term-cyan-bright :foreground ,fg-term-cyan-bright)))
+ `(vterm-color-white ((,c :background ,bg-term-white :foreground ,fg-term-white)))
+ `(vterm-color-bright-white ((,c :background ,bg-term-white-bright :foreground ,fg-term-white-bright)))
`(vterm-color-inverse-video ((,c :background ,bg-main :inverse-video t)))
- `(vterm-color-magenta ((,c :background ,bg-term-magenta :foreground ,fg-term-magenta)))
- `(vterm-color-red ((,c :background ,bg-term-red :foreground ,fg-term-red)))
`(vterm-color-underline ((,c :underline t)))
- `(vterm-color-white ((,c :background ,bg-term-white :foreground ,fg-term-white)))
- `(vterm-color-yellow ((,c :background ,bg-term-yellow :foreground ,fg-term-yellow)))
;;;;; vundo
`(vundo-default ((,c :inherit shadow)))
`(vundo-highlight ((,c :inherit (bold vundo-node) :foreground ,red)))
;;; modus-vivendi-deuteranopia-theme.el --- Deuteranopia-optimized theme with a black background -*- lexical-binding:t -*-
-;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; Maintainer: Protesilaos Stavrou <info@protesilaos.com>
(bg-completion "#2f447f")
(bg-hover "#45605e")
- (bg-hover-secondary "#654a39")
+ (bg-hover-secondary "#604c30")
(bg-hl-line "#2f3849")
(bg-region "#5a5a5a")
(fg-region "#ffffff")
- (bg-char-0 "#0050af")
- (bg-char-1 "#7f1f7f")
- (bg-char-2 "#625a00")
-
(bg-mode-line-active "#2a2a6a")
(fg-mode-line-active "#f0f0f0")
(border-mode-line-active "#8080a7")
(bg-diff-context "#1a1a1a")
-;;; Paren match
-
- (bg-paren-match "#2f7f9f")
- (fg-paren-match fg-main)
- (bg-paren-expression "#453040")
- (underline-paren-match unspecified)
-
;;; Mappings
;;;; General mappings
;;;; Code mappings
(bracket fg-main)
- (builtin magenta-warmer)
+ (builtin yellow)
(comment yellow-cooler)
- (constant blue-cooler)
+ (constant blue-faint)
(delimiter fg-main)
(docmarkup magenta-faint)
(docstring cyan-faint)
- (fnname magenta)
- (keyword magenta-cooler)
+ (fnname yellow-warmer)
+ (keyword blue-cooler)
(number fg-main)
(operator fg-main)
- (preprocessor red-cooler)
+ (preprocessor magenta-cooler)
(punctuation fg-main)
(rx-backslash blue-cooler)
(rx-construct yellow-cooler)
(type cyan-cooler)
(variable cyan)
+;;;; Paren match
+
+ (bg-paren-match bg-cyan-subtle)
+ (fg-paren-match fg-main)
+ (underline-paren-match unspecified)
+ (bg-paren-expression bg-yellow-nuanced)
+
;;;; Accent mappings
- (accent-0 blue-cooler)
+ (accent-0 blue-warmer)
(accent-1 yellow)
(accent-2 cyan-cooler)
- (accent-3 magenta-warmer)
+ (accent-3 yellow-cooler)
;;;; Button mappings
(fg-completion-match-0 blue-cooler)
(fg-completion-match-1 yellow)
(fg-completion-match-2 cyan-cooler)
- (fg-completion-match-3 magenta-warmer)
+ (fg-completion-match-3 yellow-cooler)
(bg-completion-match-0 unspecified)
(bg-completion-match-1 unspecified)
(bg-completion-match-2 unspecified)
(date-scheduled yellow-cooler)
(date-scheduled-subtle yellow-faint)
(date-weekday cyan)
- (date-weekend magenta)
+ (date-weekend magenta-cooler)
;;;; Line number mappings
(fg-prose-macro magenta-cooler)
(bg-prose-verbatim unspecified)
- (fg-prose-verbatim magenta-warmer)
+ (fg-prose-verbatim yellow)
(prose-done blue)
(prose-todo yellow-warmer)
(prose-table fg-alt)
(prose-table-formula yellow-warmer)
- (prose-tag magenta-faint)
+ (prose-tag fg-alt)
;;;; Rainbow mappings
(bg-search-current bg-yellow-intense)
(bg-search-lazy bg-blue-intense)
- (bg-search-replace bg-magenta-intense)
+ (bg-search-replace bg-yellow-intense)
(bg-search-rx-group-0 bg-cyan-intense)
(bg-search-rx-group-1 bg-magenta-intense)
(fg-heading-1 fg-main)
(fg-heading-2 yellow-faint)
(fg-heading-3 blue-faint)
- (fg-heading-4 magenta)
- (fg-heading-5 green-faint)
- (fg-heading-6 red-faint)
- (fg-heading-7 cyan-faint)
+ (fg-heading-4 green-faint)
+ (fg-heading-5 magenta-cooler)
+ (fg-heading-6 yellow-cooler)
+ (fg-heading-7 cyan)
(fg-heading-8 fg-dim)
(bg-heading-0 unspecified)
;;; modus-vivendi-theme.el --- Elegant, highly legible theme with a black background -*- lexical-binding:t -*-
-;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; Maintainer: Protesilaos Stavrou <info@protesilaos.com>
(bg-region "#5a5a5a")
(fg-region "#ffffff")
- (bg-char-0 "#0050af")
- (bg-char-1 "#7f1f7f")
- (bg-char-2 "#625a00")
-
(bg-mode-line-active "#505050")
(fg-mode-line-active "#ffffff")
(border-mode-line-active "#959595")
(bg-diff-context "#1a1a1a")
-;;; Paren match
-
- (bg-paren-match "#2f7f9f")
- (fg-paren-match fg-main)
- (bg-paren-expression "#453040")
- (underline-paren-match unspecified)
-
;;; Mappings
;;;; General mappings
(type cyan-cooler)
(variable cyan)
+;;;; Paren match
+
+ (bg-paren-match bg-cyan-subtle)
+ (fg-paren-match fg-main)
+ (underline-paren-match unspecified)
+ (bg-paren-expression bg-yellow-nuanced)
+
;;;; Accent mappings
(accent-0 blue-cooler)
;;; modus-vivendi-tinted-theme.el --- Elegant, highly legible theme with a night sky background -*- lexical-binding:t -*-
-;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; Maintainer: Protesilaos Stavrou <info@protesilaos.com>
(red "#ff5f59")
(red-warmer "#ff6b55")
(red-cooler "#ff7f86")
- (red-faint "#ff9f80")
+ (red-faint "#ef8386")
(red-intense "#ff5f5f")
(green "#44bc44")
- (green-warmer "#70b900")
- (green-cooler "#00c06f")
+ (green-warmer "#75c13e")
+ (green-cooler "#11c777")
(green-faint "#88ca9f")
(green-intense "#44df44")
(yellow "#d0bc00")
(bg-completion "#483d8a")
(bg-hover "#45605e")
- (bg-hover-secondary "#654a39")
+ (bg-hover-secondary "#64404f")
(bg-hl-line "#303a6f")
(bg-region "#555a66")
(fg-region "#ffffff")
- (bg-char-0 "#0050af")
- (bg-char-1 "#7f1f7f")
- (bg-char-2 "#625a00")
-
(bg-mode-line-active "#484d67")
(fg-mode-line-active "#ffffff")
(border-mode-line-active "#979797")
(bg-diff-context "#1a1f30")
-;;; Paren match
-
- (bg-paren-match "#5f789f")
- (fg-paren-match fg-main)
- (bg-paren-expression "#453040")
- (underline-paren-match unspecified)
-
;;; Mappings
;;;; General mappings
(identifier yellow-faint)
(err red)
- (warning yellow-warmer)
- (info cyan-cooler)
+ (warning yellow)
+ (info green-cooler)
(underline-err red-intense)
(underline-warning yellow)
;;;; Code mappings
(bracket fg-main)
- (builtin magenta-warmer)
+ (builtin magenta)
(comment red-faint)
- (constant blue-cooler)
+ (constant magenta-cooler)
(delimiter fg-main)
(docmarkup magenta-faint)
(docstring cyan-faint)
- (fnname magenta)
- (keyword magenta-cooler)
+ (fnname magenta-warmer)
+ (keyword blue-warmer)
(number fg-main)
(operator fg-main)
(preprocessor red-cooler)
(punctuation fg-main)
- (rx-backslash magenta)
- (rx-construct green-cooler)
- (string blue-warmer)
- (type cyan-cooler)
- (variable cyan)
+ (rx-backslash magenta-warmer)
+ (rx-construct magenta-cooler)
+ (string blue)
+ (type green-cooler)
+ (variable cyan-warmer)
+
+;;;; Paren match
+
+ (bg-paren-match bg-cyan-subtle)
+ (fg-paren-match fg-main)
+ (underline-paren-match unspecified)
+ (bg-paren-expression bg-yellow-nuanced)
;;;; Accent mappings
- (accent-0 blue-cooler)
- (accent-1 magenta-warmer)
- (accent-2 cyan-cooler)
- (accent-3 yellow)
+ (accent-0 magenta-cooler)
+ (accent-1 cyan)
+ (accent-2 magenta-warmer)
+ (accent-3 yellow-warmer)
;;;; Button mappings
;;;; Mail mappings
- (mail-cite-0 blue-warmer)
+ (mail-cite-0 blue)
(mail-cite-1 yellow-cooler)
(mail-cite-2 cyan-cooler)
(mail-cite-3 red-cooler)
- (mail-part blue)
- (mail-recipient magenta-cooler)
+ (mail-part magenta-cooler)
+ (mail-recipient blue-warmer)
(mail-subject magenta-warmer)
- (mail-other magenta-faint)
+ (mail-other magenta)
;;;; Mark mappings
;;;; Prompt mappings
- (fg-prompt cyan-cooler)
+ (fg-prompt cyan-warmer)
(bg-prompt unspecified)
;;;; Prose mappings
;;; modus-vivendi-tritanopia-theme.el --- Tritanopia-optimized theme with a black background -*- lexical-binding:t -*-
-;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
+;; Copyright (C) 2019-2025 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
;; Maintainer: Protesilaos Stavrou <info@protesilaos.com>
(bg-dim "#1e1e1e")
(fg-main "#ffffff")
(fg-dim "#989898")
- (fg-alt "#c6daff")
+ (fg-alt "#a0d7f2")
(bg-active "#535353")
(bg-inactive "#303030")
(border "#646464")
(bg-completion "#004253")
(bg-hover "#8e3e3b")
- (bg-hover-secondary "#00405f")
+ (bg-hover-secondary "#204853")
(bg-hl-line "#2f3849")
(bg-region "#5a5a5a")
(fg-region "#ffffff")
- (bg-char-0 "#922a00")
- (bg-char-1 "#00709f")
- (bg-char-2 "#5f3faf")
-
(bg-mode-line-active "#003c52")
(fg-mode-line-active "#f0f0f0")
(border-mode-line-active "#5f8fb4")
(bg-diff-context "#1a1a1a")
-;;; Paren match
-
- (bg-paren-match "#2f7f9f")
- (fg-paren-match fg-main)
- (bg-paren-expression "#453040")
- (underline-paren-match unspecified)
-
;;; Mappings
;;;; General mappings
(type blue-warmer)
(variable cyan-cooler)
+;;;; Paren match
+
+ (bg-paren-match bg-cyan-subtle)
+ (fg-paren-match fg-main)
+ (underline-paren-match unspecified)
+ (bg-paren-expression bg-red-nuanced)
+
;;;; Accent mappings
(accent-0 cyan)
(prose-table fg-alt)
(prose-table-formula red-cooler)
- (prose-tag magenta-faint)
+ (prose-tag fg-alt)
;;;; Rainbow mappings