#+options: ':t toc:nil author:t email:t num:t
#+startup: content
-#+macro: stable-version 2.3.0
-#+macro: release-date 2022-04-01
-#+macro: development-version 2.4.0-dev
+#+macro: stable-version 2.4.0
+#+macro: release-date 2022-06-01
+#+macro: development-version 2.5.0-dev
#+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
#+macro: space @@texinfo:@: @@
#+macro: kbd @@texinfo:@kbd{@@$1@@texinfo:}@@
Current development target is {{{development-version}}}.
++ Homepage: https://protesilaos.com/emacs/modus-themes.
++ Git repository: https://git.sr.ht/~protesilaos/modus-themes.
++ Mailing list: https://lists.sr.ht/~protesilaos/modus-themes.
+
#+toc: headlines 8 insert TOC here, with eight headline levels
* COPYING
The ~modus-themes~ package is available from the GNU ELPA archive, which
is configured by default.
-Prior to querying any package archive, make sure to have updated the
-index, with {{{kbd(M-x package-refresh-contents)}}}. Then all you need to do
+Prior to querying any package archive, make sure to update the index,
+with {{{kbd(M-x package-refresh-contents)}}}. Then all you need to do
is type {{{kbd(M-x package-install)}}} and specify the ~modus-themes~.
-Note that older versions of the themes used to be distributed as
-standalone packages. This practice has been discontinued starting with
-version 1.0.0 of this project.
-
Once installed, the themes are ready to be used: [[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]].
** Install on GNU/Linux
They are now ready to be used: [[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][Enable and load]].
+** Dealing with byte compilation errors
+:properties:
+:custom_id: h:e6268471-e847-4c9d-998f-49a83257b7f1
+:end:
+
+From time to time, we receive bug reports pertaining to errors with byte
+compilation. These seldom have to do with faulty code in the themes: it
+might be a shortcoming of =package.el=, some regression in the current
+development target of Emacs, a misconfiguration in an otherwise exotic
+setup, and the like.
+
+The common solution with a stable version of Emacs is to:
+
+1. Delete the =modus-themes= package.
+2. Close the current Emacs session.
+3. Install the =modus-themes= again.
+
+For those building Emacs directly from source, the solution may involve
+reverting to an earlier commit in emacs.git.
+
+At any rate, if you encounter such an issue please report it: we will
+either fix the bug on our end if it is truly ours, or help forward it to
+the relevant upstream maintainer. Whatever you do, please understand
+that a build failure does not mean we are necessarily doing something
+wrong.
+
+[[#h:6536c8d5-3f98-43ab-a787-b94120e735e8][Issues you can help with]].
+
* Enable and load
:properties:
:custom_id: h:3f3c3728-1b34-437d-9d0c-b110f5b161a9
(set-face-attribute 'font-lock-warning-face nil :inherit 'modus-themes-bold :foreground red-nuanced-fg)))
#+end_src
+** Custom hl-todo colors
+:PROPERTIES:
+:CUSTOM_ID: h:2ef83a21-2f0a-441e-9634-473feb940743
+:END:
+
+The =hl-todo= package provides the user option ~hl-todo-keyword-faces~:
+it specifies a pair of keyword and corresponding color value. The Modus
+themes configure that option in the interest of legibility. While this
+works for our purposes, users may still prefer to apply their custom
+values, in which case the following approach is necessary:
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-hl-todo-faces ()
+ (setq hl-todo-keyword-faces '(("TODO" . "#ff0000")
+ ("HACK" . "#ffff00")
+ ("XXX" . "#00ffff")
+ ("NOTE" . "#ff00ff"))))
+
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-hl-todo-faces)
+#+end_src
+
+Or include a ~let~ form, if needed:
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-hl-todo-faces ()
+ (let ((red "#ff0000")
+ (blue "#0000ff"))
+ (setq hl-todo-keyword-faces `(("TODO" . ,blue)
+ ("HACK" . ,red)
+ ("XXX" . ,red)
+ ("NOTE" . ,blue)))))
+
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-hl-todo-faces)
+#+end_src
+
+Normally, we do not touch user options, though this is an exception:
+otherwise the defaults are not always legible.
+
* Face coverage
:properties:
:custom_id: h:a9c8f29d-7f72-4b54-b74b-ddefe15d6a19
+ breakpoint (provided by the built-in {{{file(gdb-mi.el)}}} library)
+ calendar and diary
+ calfw
++ calibredb
+ centaur-tabs
+ cfrs
+ change-log and log-view (such as ~vc-print-log~, ~vc-print-root-log~)
+ completions
+ consult
+ corfu
++ corfu-quick
+ counsel*
+ counsel-css
+ cov
+ easy-jekyll
+ ebdb
+ ediff
++ ein (Emacs IPython Notebook)
+ eglot
+ el-search
+ eldoc-box
+ tomatinho
+ transient (pop-up windows such as Magit's)
+ trashed
++ tree-sitter
+ treemacs
+ tty-menu
+ tuareg
+ visible-mark
+ visual-regexp
+ vterm
++ vundo
+ wcheck-mode
+ web-mode
+ wgrep
+ dtache
+ easy-kill
+ edit-indirect
++ egerrit
+ elfeed-summary
+ evil-owl
+ flyspell-correct
This section covers information that may be of interest to users of
individual packages.
-** Note on avy hints
-:properties:
-:custom_id: h:2fdce705-6de7-44e6-ab7f-18f59af99e01
-:end:
-
-Hints can appear everywhere, in wildly varying contexts, hence, their
-appearance, by necessity, is a compromise. However, there are various
-options for making them stand out. First is dimming the surroundings:
-
-#+begin_src emacs-lisp
-(setq avy-background t)
-#+end_src
-
-Dimming works well when you find it difficult to spot hints, any hint.
-Second is limiting the number of faces used by hints:
-
-#+begin_src emacs-lisp
-(setq avy-lead-faces
- '(avy-lead-face
- avy-lead-face-1
- avy-lead-face-1
- avy-lead-face-1
- avy-lead-face-1))
-#+end_src
-
-Limiting the number of faces works well with longer hints when you find
-it difficult to identify individual hints, especially with hints
-touching each other. The first character of the hint will have an
-intense color, the remaining ones the same neutral color.
-
-Third is preferring commands that produce fewer candidates. Fewer hints
-is less noise: ~avy-goto-char-timer~ is an excellent alternative to
-~avy-goto-char~.
-
** Note on calendar.el weekday and weekend colors
:properties:
:custom_id: h:b2db46fb-32f4-44fd-8e11-d2b261cf51ae
For changes to take effect, the Calendar buffer needs to be generated
anew.
+** Note on git-gutter in Doom Emacs
+:PROPERTIES:
+:CUSTOM_ID: h:a195e37c-e58c-4148-b254-8ba1ed8a731a
+:END:
+
+The =git-gutter= and =git-gutter-fr= packages default to drawing bitmaps
+for the indicators they display (e.g. bitmap of a plus sign for added
+lines). In Doom Emacs, these bitmaps are replaced with contiguous lines
+which may look nicer, but require a change to the foreground of the
+relevant faces to yield the desired colour combinations.
+
+Since this is Doom-specific, we urge users to apply changes in their
+local setup. Below is some sample code, based on what we cover at
+length elsewhere in this manual:
+
+[[#h:f4651d55-8c07-46aa-b52b-bed1e53463bb][Advanced customization]].
+
+[[#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
+ ;; Replace green with blue if you use `modus-themes-deuteranopia'.
+ `(git-gutter-fr:added ((,class :foreground ,green-fringe-bg)))
+ `(git-gutter-fr:deleted ((,class :foreground ,red-fringe-bg)))
+ `(git-gutter-fr:modified ((,class :foreground ,yellow-fringe-bg))))))
+
+(add-hook 'modus-themes-after-load-theme-hook #'my-modus-themes-custom-faces)
+#+end_src
+
+If the above does not work, try this instead:
+
+#+begin_src emacs-lisp
+(after! modus-themes
+ (modus-themes-with-colors
+ (custom-set-faces
+ ;; Replace green with blue if you use `modus-themes-deuteranopia'.
+ `(git-gutter-fr:added ((,class :foreground ,green-fringe-bg)))
+ `(git-gutter-fr:deleted ((,class :foreground ,red-fringe-bg)))
+ `(git-gutter-fr:modified ((,class :foreground ,yellow-fringe-bg))))))
+#+end_src
+
+Replace ~green-fringe-bg~ with ~blue-fringe-bg~ if you want to optimize
+for red-green color deficiency.
+
+[[#h:3ed03a48-20d8-4ce7-b214-0eb7e4c79abe][Option for red-green color deficiency or deuteranopia]].
+
+** Note on php-mode multiline comments
+:PROPERTIES:
+:CUSTOM_ID: h:d0a3157b-9c04-46e8-8742-5fb2a7ae8798
+:END:
+
+Depending on your build of Emacs and/or the environment it runs in,
+multiline comments in PHP with the =php-mode= package use the
+~font-lock-doc-face~ instead of ~font-lock-comment-face~.
+
+This seems to make all comments use the appropriate face:
+
+#+begin_src emacs-lisp
+(defun my-multine-comments ()
+ (setq-local c-doc-face-name 'font-lock-comment-face))
+
+(add-hook 'php-mode-hook #'my-multine-comments)
+#+end_src
+
** Note on underlines in compilation buffers
:properties:
:custom_id: h:420f5a33-c7a9-4112-9b04-eaf2cbad96bd
[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the themes' palette]].
+To make the line thicker, set the height to be equal to the base font
+size instead of the one pixel we use. This is done by specifying a rate
+instead of an absolute number, as in =:height 1.0= versus =:height 1=.
+For example:
+
+#+begin_src emacs-lisp
+(modus-themes-with-colors
+ (custom-set-faces
+ `(fill-column-indicator ((,class :height 1.0 :background ,bg-inactive :foreground ,bg-inactive)))))
+#+end_src
+
** Note on highlight-parentheses.el
:PROPERTIES:
:CUSTOM_ID: h:24bab397-dcb2-421d-aa6e-ec5bd622b913
Due to the need of maintaining some difference in hueness between
adjacent colors, it is not possible to make red, green, and yellow the
-primary colors, because blue could not be used to control their
-luminance and, thus the relevant space would shrink considerably.
+main colors, because blue cannot be used to control their luminance and,
+thus the relevant space will shrink considerably.
[[#h:5ce7ae2e-9348-4e55-b4cf-9302345b1826][Is the contrast ratio about adjacent colors?]]
The ~modus-operandi~ and ~modus-vivendi~ themes are built into Emacs 28.
-The source code of the themes is [[https://gitlab.com/protesilaos/modus-themes/][available on GitLab]], for the time
-being. A [[https://github.com/protesilaos/modus-themes/][mirror on GitHub]] is also on offer.
+The source code of the themes is [[https://git.sr.ht/~protesilaos/modus-themes][available on SourceHut]]. Or check the
+[[https://gitlab.com/protesilaos/modus-themes/][GitLab mirror (former main source)]] and the [[https://github.com/protesilaos/modus-themes/][GitHub mirror]].
An HTML version of this manual is provided as an extension of the
[[https://protesilaos.com/emacs/modus-themes/][author's personal website]] (does not rely on any non-free code).
:end:
#+cindex: Contributing
-A few tasks you can help with:
+#+findex: modus-themes-report-bug
+A few tasks you can help with by sending an email to the general
+[[https://lists.sr.ht/~protesilaos/modus-themes][modus-themes public mailing list]] (or use the command
+~modus-themes-report-bug~).
+ Suggest refinements to packages that are covered.
+ Report packages not covered thus far.
+ Help expand the documentation of covered-but-not-styled packages.
+ Suggest refinements to the color palette.
+ Help expand this document or any other piece of documentation.
-+ Merge requests for code refinements.
++ Send patches for code refinements (if you need, ask me for help with
+ Git---we all start out as beginners).
[[#h:111773e2-f26f-4b68-8c4f-9794ca6b9633][Patches require copyright assignment to the FSF]].
short videos, as well as further instructions to reproduce a given
setup. Though this is not a requirement.
+#+findex: modus-themes-version
+Also consider mentioning the version of the themes you are using, such
+as by invoking the command ~modus-themes-version~.
+
Whatever you do, bear in mind the overarching objective of the Modus
themes: to keep a contrast ratio that is greater or equal to 7:1 between
background and foreground colors. If a compromise is ever necessary
Please use your full legal name (in ASCII characters) as the subject
line of the message.
-----------------------------------------------------------------------
+
REQUEST: SEND FORM FOR PAST AND FUTURE CHANGES
[What is the name of the program or package you're contributing to?]
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, Pierre Téchoueyres, Rudolf
- Adamkovič, Stephen Gildea, Shreyas Ragavan, Stefan Kangas, Utkarsh
- Singh, Vincent Murphy, Xinglu Chen, Yuanchen Xie.
+ Madhavan Krishnan, Manuel Giraud, Markus Beppler, Matthew Stevenson,
+ Mauro Aranda, Nicolas De Jaeghere, Philip Kaludercic, Pierre
+ Téchoueyres, 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 Koen, Alex Peitsinis, Alexey Shmalko,
- Alok Singh, Anders Johansson, André Alexandre Gomes, Antonio Hernández
- Blas, Arif Rezai, Augusto Stoffel, 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 Alberto
- Monterosso, Farasha Euker, Feng Shu, Gautier Ponsinet, Gerry Agbobada,
- Gianluca Recchia, Guilherme Semente, Gustavo Barros, Hörmetjan Yiltiz,
- Ilja Kocken, Iris Garcia, Jeremy Friesen, Jerry Zhang, Johannes
- Grødem, John Haman, Jorge Morais, Joshua O'Connor, Julio
- C. Villasante, Kenta Usami, Kevin Fleming, Kévin Le Gouguec, Kostadin
- Ninev, Len Trigg, Lennart C. Karssen, Magne Hov, Manuel Uberti, Mark
- Bestley, Mark Burton, Markus Beppler, Mauro Aranda, Michael
+ Alok Singh, Anders Johansson, André Alexandre Gomes, Andrew Tropin,
+ Antonio Hernández Blas, Arif Rezai, Augusto Stoffel, Basil
+ L.{{{space()}}} Contovounesios, Burgess Chang, Christian Tietze,
+ Christopher Dimech, Christopher League, Damien Cassou, Daniel Mendler,
+ Dario Gjorgjevski, David Edmondson, Davor Rotim, Divan Santana, Eliraz
+ Kedmi, Emanuele Michele Alberto Monterosso, Farasha Euker, Feng Shu,
+ Gautier Ponsinet, Gerry Agbobada, Gianluca Recchia, Gonçalo Marrafa,
+ Guilherme Semente, Gustavo Barros, Hörmetjan Yiltiz, Ilja Kocken, Iris
+ Garcia, Ivan Popovych, Jeremy Friesen, Jerry Zhang, Johannes Grødem,
+ John Haman, Jorge Morais, Joshua O'Connor, Julio C. Villasante, Kenta
+ Usami, Kevin Fleming, Kévin Le Gouguec, Kostadin Ninev, Len Trigg,
+ Lennart C. Karssen, Magne Hov, Manuel Uberti, Mark Bestley, Mark
+ Burton, Markus Beppler, Mauro Aranda, Maxime Tréca, Michael
Goldenberg, Morgan Smith, Morgan Willcock, Murilo Pereira, Nicky van
Foreest, Nicolas De Jaeghere, Paul Poloskov, Pengji Zhang, Pete
- Kazmier, Peter Wu, Philip Kaludercic, Pierre Téchoueyres, Robert
- Hepple, Roman Rudakov, Ryan Phillips, Rytis Paškauskas, Rudolf
- Adamkovič, Sam Kleinman, Samuel Culpepper, Saša Janiška, Shreyas
- Ragavan, Simon Pugnet, Tassilo Horn, Thibaut Verron, Thomas Heartman,
- Togan Muftuoglu, Tony Zorman, 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),
- Stefan Monnier (GNU Elpa), André Alexandre Gomes, Dimakakos Dimos,
- Morgan Smith, Nicolas Goaziou (Guix), Dhavan Vaidya (Debian).
+ Kazmier, Peter Wu, Philip Kaludercic, Pierre Téchoueyres, Przemysław
+ Kryger, Robert Hepple, Roman Rudakov, Ryan Phillips, Rytis Paškauskas,
+ Rudolf Adamkovič, Sam Kleinman, Samuel Culpepper, Saša Janiška,
+ Shreyas Ragavan, Simon Pugnet, Tassilo Horn, Thibaut Verron, Thomas
+ Heartman, Togan Muftuoglu, Tony Zorman, 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), Stefan Monnier (GNU Elpa), André Alexandre Gomes, Andrew
+ Tropin, Dimakakos Dimos, Morgan Smith, Nicolas Goaziou (Guix), Dhavan
+ Vaidya (Debian).
+ Inspiration for certain features :: Bozhidar Batsov (zenburn-theme),
Fabrice Niessen (leuven-theme).
and insightful commentary on key aspects of the themes' design and/or
aspects of their functionality.
-* Meta
+* Other notes about the project
:properties:
:custom_id: h:13752581-4378-478c-af17-165b6e76bc1b
:end:
+ [[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)
++ [[https://protesilaos.com/codelog/2022-04-20-modus-themes-case-study-avy/][Modus themes: case study on Avy faces and colour combinations]] (2022-04-20)
++ [[https://protesilaos.com/codelog/2022-04-21-modus-themes-colour-theory/][Emacs: colour theory and techniques used in the Modus themes]] (2022-04-21)
-And here are the canonical sources of this project's documentation:
+And here are the canonical sources of this project:
+ Manual :: <https://protesilaos.com/emacs/modus-themes>
+ Change Log :: <https://protesilaos.com/emacs/modus-themes-changelog>
+ Screenshots :: <https://protesilaos.com/emacs/modus-themes-pictures>
++ Git repository :: https://git.sr.ht/~protesilaos/modus-themes
++ Mailing list :: https://lists.sr.ht/~protesilaos/modus-themes
* GNU Free Documentation License
:properties:
;; Copyright (C) 2019-2022 Free Software Foundation, Inc.
;; Author: Protesilaos Stavrou <info@protesilaos.com>
-;; URL: https://gitlab.com/protesilaos/modus-themes
-;; Version: 2.3.0
-;; Last-Modified: <2022-04-01 12:33:34 +0300>
+;; URL: https://git.sr.ht/~protesilaos/modus-themes
+;; Mailing list: https://lists.sr.ht/~protesilaos/modus-themes
+;; Version: 2.4.1
;; Package-Requires: ((emacs "27.1"))
;; Keywords: faces, theme, accessibility
;; modus-themes-operandi-color-overrides (alist)
;; modus-themes-vivendi-color-overrides (alist)
;;
-;; Below is the list of explicitly supported packages or face groups
-;; (there are implicitly supported packages as well, which inherit from
-;; font-lock or some basic group). You are encouraged to report any
-;; missing package or change you would like to see.
-;;
-;; ace-window
-;; alert
-;; all-the-icons
-;; all-the-icons-dired
-;; all-the-icons-ibuffer
-;; annotate
-;; ansi-color
-;; anzu
-;; apropos
-;; artbollocks-mode
-;; auctex and TeX
-;; auto-dim-other-buffers
-;; avy
-;; awesome-tray
-;; bbdb
-;; binder
-;; bm
-;; bongo
-;; boon
-;; bookmark
-;; breakpoint (provided by built-in gdb-mi.el)
-;; calendar and diary
-;; calfw
-;; centaur-tabs
-;; cfrs
-;; change-log and log-view (`vc-print-log' and `vc-print-root-log')
-;; cider
-;; circe
-;; citar
-;; color-rg
-;; column-enforce-mode
-;; company-mode
-;; company-posframe
-;; compilation-mode
-;; completions
-;; consult
-;; corfu
-;; counsel
-;; counsel-css
-;; cov
-;; cperl-mode
-;; css-mode
-;; csv-mode
-;; ctrlf
-;; cursor-flash
-;; custom (M-x customize)
-;; dap-mode
-;; dashboard (emacs-dashboard)
-;; deadgrep
-;; debbugs
-;; deft
-;; devdocs
-;; dictionary
-;; diff-hl
-;; diff-mode
-;; dim-autoload
-;; dir-treeview
-;; Dired
-;; dired-async
-;; dired-git
-;; dired-git-info
-;; dired-narrow
-;; dired-subtree
-;; diredfl
-;; diredp (dired+)
-;; display-fill-column-indicator-mode
-;; doom-modeline
-;; dynamic-ruler
-;; easy-jekyll
-;; ebdb
-;; ediff
-;; eglot
-;; el-search
-;; eldoc
-;; eldoc-box
-;; elfeed
-;; elfeed-score
-;; elpher
-;; embark
-;; ement (ement.el)
-;; emms
-;; enh-ruby-mode (enhanced-ruby-mode)
-;; epa
-;; equake
-;; erc
-;; eros
-;; ert
-;; eshell
-;; eshell-fringe-status
-;; eshell-git-prompt
-;; eshell-prompt-extras (epe)
-;; eshell-syntax-highlighting
-;; evil (evil-mode)
-;; evil-goggles
-;; evil-snipe
-;; evil-visual-mark-mode
-;; eww
-;; exwm
-;; eyebrowse
-;; fancy-dabbrev
-;; flycheck
-;; flycheck-color-mode-line
-;; flycheck-indicator
-;; flycheck-posframe
-;; flymake
-;; flyspell
-;; flx
-;; freeze-it
-;; frog-menu
-;; focus
-;; fold-this
-;; font-lock (generic syntax highlighting)
-;; forge
-;; fountain (fountain-mode)
-;; geiser
-;; git-commit
-;; git-gutter (and variants)
-;; git-rebase
-;; git-timemachine
-;; gnus
-;; gotest
-;; golden-ratio-scroll-screen
-;; helm
-;; helm-ls-git
-;; helm-switch-shell
-;; helm-xref
-;; helpful
-;; highlight-indentation
-;; highlight-numbers
-;; highlight-thing
-;; hl-defined
-;; hl-fill-column
-;; hl-line-mode
-;; hl-todo
-;; hydra
-;; ibuffer
-;; icomplete
-;; ido-mode
-;; iedit
-;; iflipb
-;; image-dired
-;; imenu-list
-;; indium
-;; info
-;; info-colors
-;; interaction-log
-;; ioccur
-;; isearch, occur, etc.
-;; ivy
-;; ivy-posframe
-;; jira (org-jira)
-;; journalctl-mode
-;; js2-mode
-;; julia
-;; jupyter
-;; kaocha-runner
-;; keycast
-;; ledger-mode
-;; line numbers (`display-line-numbers-mode' and global variant)
-;; lsp-mode
-;; lsp-ui
-;; macrostep
-;; magit
-;; magit-imerge
-;; make-mode
-;; man
-;; marginalia
-;; markdown-mode
-;; markup-faces (`adoc-mode')
-;; mct
-;; mentor
-;; messages
-;; mini-modeline
-;; minimap
-;; mmm-mode
-;; mode-line
-;; mood-line
-;; mpdel
-;; mu4e
-;; multiple-cursors
-;; nano-modeline
-;; neotree
-;; notmuch
-;; num3-mode
-;; nxml-mode
-;; orderless
-;; org
-;; org-journal
-;; org-noter
-;; org-pomodoro
-;; org-recur
-;; org-roam
-;; org-superstar
-;; org-table-sticky-header
-;; org-tree-slide
-;; org-treescope
-;; origami
-;; outline-mode
-;; outline-minor-faces
-;; package (M-x list-packages)
-;; page-break-lines
-;; pandoc-mode
-;; paradox
-;; paren-face
-;; pass
-;; pdf-tools
-;; persp-mode
-;; perspective
-;; phi-grep
-;; pomidor
-;; popup
-;; powerline
-;; powerline-evil
-;; prism (see "Note for prism.el" in the manual)
-;; proced
-;; prodigy
-;; pulse
-;; pyim
-;; quick-peek
-;; racket-mode
-;; rainbow-blocks
-;; rainbow-delimiters
-;; rcirc
-;; recursion-indicator
-;; regexp-builder (also known as `re-builder')
-;; rg
-;; ripgrep
-;; rmail
-;; ruler-mode
-;; selectrum
-;; selectrum-prescient
-;; semantic
-;; sesman
-;; shell-script-mode
-;; shortdoc
-;; show-paren-mode
-;; shr
-;; side-notes
-;; sieve-mode
-;; skewer-mode
-;; slime (sldb)
-;; sly
-;; smart-mode-line
-;; smartparens
-;; smerge
-;; spaceline
-;; speedbar
-;; stripes
-;; suggest
-;; switch-window
-;; swiper
-;; sx
-;; symbol-overlay
-;; syslog-mode
-;; tab-bar-groups
-;; tab-bar-mode
-;; tab-line-mode
-;; table (built-in table.el)
-;; telega
-;; telephone-line
-;; terraform-mode
-;; term
-;; textsec
-;; tomatinho
-;; transient (pop-up windows like Magit's)
-;; trashed
-;; treemacs
-;; tty-menu
-;; tuareg
-;; typescript
-;; undo-tree
-;; vc (vc-dir.el, vc-hooks.el)
-;; vc-annotate (C-x v g)
-;; vertico
-;; vertico-quick
-;; vimish-fold
-;; visible-mark
-;; visual-regexp
-;; vterm
-;; wcheck-mode
-;; web-mode
-;; wgrep
-;; which-function-mode
-;; which-key
-;; whitespace-mode
-;; window-divider-mode
-;; winum
-;; writegood-mode
-;; woman
-;; xah-elisp-mode
-;; xref
-;; xterm-color (and ansi-colors)
-;; yaml-mode
-;; yasnippet
-;; ztree
+;; Check the manual for all supported packages (there are hundreds of
+;; them).
;;
;; For a complete view of the project, also refer to the following files
;; (should be distributed in the same repository/directory as the
(eval-when-compile
(require 'cl-lib)
(require 'subr-x))
-(require 'seq)
(defgroup modus-themes ()
"Options for `modus-operandi', `modus-vivendi'.
:prefix "modus-themes-"
:tag "Modus Themes Faces")
+(defvar modus-themes--version "2.5.0-dev"
+ "Current version of the Modus themes.
+
+The version either is the last tagged release, such as '2.4.0',
+or an in-development version like '2.5.0-dev'. As we use
+semantic versioning, tags of the '2.4.1' sort are not reported:
+those would count as part of '2.5.0-dev'.")
+
+;;;###autoload
+(defun modus-themes-version (&optional insert)
+ "Print `modus-themes--version' in the echo area.
+If optional INSERT argument is provided from Lisp or as a prefix
+argument, insert the `modus-themes--version' at point."
+ (interactive "P")
+ (if-let ((version modus-themes--version)
+ ((or insert current-prefix-arg)))
+ (insert version)
+ (message version)))
+
+;;;###autoload
+(defun modus-themes-report-bug ()
+ "Submit a bug report or issue to the Modus themes developers."
+ (interactive)
+ (reporter-submit-bug-report
+ "~protesilaos/modus-themes@lists.sr.ht"
+ (format "modus-themes (%s)\n" modus-themes--version)
+ ;; I am just getting started with this. Let's first see what people
+ ;; think about it.
+ nil nil nil nil))
+
;;; Variables for each theme variant
;;;; Modus Operandi
;; 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
+ ;; bg-completion-* and bg-char-* 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
(bg-completion . "#b7dbff")
(bg-completion-subtle . "#def3ff")
+ (bg-char-0 . "#7feaff")
+ (bg-char-1 . "#ffaaff")
+ (bg-char-2 . "#dff000")
+
(bg-tab-active . "#f6f6f6")
(bg-tab-inactive . "#b7b7b7")
(bg-tab-inactive-accent . "#a9b4f6")
;; 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
+ ;; bg-completion-* and bg-char-* 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
(bg-completion . "#142f69")
(bg-completion-subtle . "#0e194b")
+ (bg-char-0 . "#0050af")
+ (bg-char-1 . "#7f1f7f")
+ (bg-char-2 . "#625a00")
+
(bg-tab-active . "#0e0e0e")
(bg-tab-inactive . "#424242")
(bg-tab-inactive-accent . "#35398f")
(defface modus-themes-variable-pitch nil
"Generic face for applying a conditional `variable-pitch'.
-This behaves in accordance with `modus-themes-mixed-fonts',
-`modus-themes-variable-pitch-headings' for all heading levels,
-and `modus-themes-variable-pitch-ui'.
+This behaves in accordance with `modus-themes-mixed-fonts' and/or
+`modus-themes-variable-pitch-ui'.
The actual styling of the face is done by `modus-themes-faces'."
:group 'modus-themes-faces)
value
(modus-themes--warn option))))
-(defun modus-themes--alist-or-seq (properties alist-key seq-pred seq-default)
- "Return value from alist or sequence.
+(defun modus-themes--property-lookup (properties alist-key list-pred default)
+ "Return value from property alist or list.
Check PROPERTIES for an alist value that corresponds to
ALIST-KEY. If no alist is present, search the PROPERTIES
-sequence given SEQ-PRED, using SEQ-DEFAULT as a fallback."
+list given LIST-PRED, using DEFAULT as a fallback."
(if-let* ((val (or (alist-get alist-key properties)
- (seq-find seq-pred properties seq-default)))
+ (cl-loop for x in properties
+ if (funcall list-pred x) return x)
+ default))
((listp val)))
(car val)
val))
(defun modus-themes--current-theme ()
"Return current modus theme."
- (car (seq-filter (lambda (arg) (string-match-p "^modus" (symbol-name arg)))
- custom-enabled-themes)))
+ (car
+ (seq-filter
+ (lambda (theme)
+ (string-match-p "^modus" (symbol-name theme)))
+ custom-enabled-themes)))
;; Helper functions that are meant to ease the implementation of the
;; above customization variables.
(cond
((and (memq 'bold properties)
(memq 'italic properties))
- (list 'modus-themes-fixed-pitch 'bold-italic))
+ (list 'bold-italic 'modus-themes-fixed-pitch))
((memq 'italic properties)
- (list 'modus-themes-fixed-pitch 'italic))
+ (list 'italic 'modus-themes-fixed-pitch))
((memq 'bold properties)
- (list 'modus-themes-fixed-pitch 'bold))
+ (list 'bold 'modus-themes-fixed-pitch))
(t 'modus-themes-fixed-pitch))
:background
(cond
(defun modus-themes--paren (normalbg intensebg)
"Conditional use of intense colors for matching parentheses.
-NORMALBG should be the special palette color `bg-paren-match' or
+NORMALBG should be the special palette color 'bg-paren-match' or
something similar. INTENSEBG must be easier to discern next to
other backgrounds, such as the special palette color
-`bg-paren-match-intense'."
+'bg-paren-match-intense'."
(let ((properties (modus-themes--list-or-warn 'modus-themes-paren-match)))
(list :inherit
(if (memq 'bold properties)
fg-alt)
(fg))
:height
- (modus-themes--alist-or-seq properties 'height #'floatp 'unspecified)
+ (modus-themes--property-lookup properties 'height #'floatp 'unspecified)
:weight
(or weight 'unspecified)
:overline
(or weight 'unspecified)
:height
(cond ((memq 'no-scale properties) 'unspecified)
- ((modus-themes--alist-or-seq properties 'height #'floatp 1.15)))
+ ((modus-themes--property-lookup properties 'height #'floatp 1.15)))
:foreground fg)))
(defun modus-themes--agenda-date (defaultfg grayscalefg &optional workaholicfg grayscaleworkaholicfg bg bold ul)
(t
defaultfg))
:height
- (modus-themes--alist-or-seq properties 'height #'floatp 'unspecified)
+ (modus-themes--property-lookup properties 'height #'floatp 'unspecified)
:underline
(if (and ul (memq 'underline-today properties))
t
(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\".
+when the 'traffic-light' style is applied, while SIMPLE
+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
values. It is intended to be used as a distant-foreground
property."
(let* ((properties (modus-themes--list-or-warn 'modus-themes-mode-line))
- (padding (modus-themes--alist-or-seq properties 'padding #'natnump 1))
- (height (modus-themes--alist-or-seq properties 'height #'floatp 'unspecified))
+ (padding (modus-themes--property-lookup properties 'padding #'natnump 1))
+ (height (modus-themes--property-lookup properties 'height #'floatp 'unspecified))
(padded (> padding 1))
(base (cond ((memq 'accented properties)
(cons fg-accent bg-accent))
;; 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)
+ (list :box (list :color color
+ :line-width
+ (or (cl-loop
+ for x in modus-themes-mode-line
+ if (natnump x) return x)
+ 1))))
+
+(defun modus-themes--diff (mainbg mainfg altbg altfg &optional deubg deufg deualtbg deualtfg bg-only-fg)
"Color combinations for `modus-themes-diffs'.
MAINBG must be one of the dedicated backgrounds for diffs while
be combined with ALTFG. Both must be less intense than MAINBG
and MAINFG respectively.
-DEUTERANBG and DEUTERANFG must be combinations of colors that account
-for red-green color defficiency (deuteranopia).
+DEUBG and DEUFG must be combinations of colors that account for
+red-green color defficiency (deuteranopia). They are the
+equivalent of MAINBG and MAINFG.
+
+DEUALTBG and DEUALTFG are the equivalent of ALTBG and ALTFG for
+deuteranopia.
-Optional BG-ONLY-FG applies ALTFG else leaves the foreground
-unspecified."
+Optional non-nil BG-ONLY-FG applies ALTFG else leaves the
+foreground unspecified."
(if modus-themes-deuteranopia
- (list :background (or deuteranbg mainbg) :foreground (or deuteranfg mainfg))
+ (pcase modus-themes-diffs
+ ('desaturated (list :background (or deualtbg altbg) :foreground (or deualtfg altfg)))
+ ('bg-only (list :background (or deualtbg altbg) :foreground (if bg-only-fg (or deualtfg altfg) 'unspecified)))
+ (_ (list :background (or deubg mainbg) :foreground (or deufg mainfg))))
(pcase modus-themes-diffs
('desaturated (list :background altbg :foreground altfg))
('bg-only (list :background altbg :foreground (if bg-only-fg altfg 'unspecified)))
(weight weight)
('unspecified))
:height
- (modus-themes--alist-or-seq properties 'height #'floatp 'unspecified)
+ (modus-themes--property-lookup properties 'height #'floatp 'unspecified)
:underline
(if (memq 'underline properties)
t
((,class ,@(modus-themes--diff
bg-diff-focus-added fg-diff-focus-added
green-nuanced-bg fg-diff-added
- bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran))))
+ bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran
+ blue-nuanced-bg fg-diff-added-deuteran))))
`(modus-themes-diff-changed
((,class ,@(modus-themes--diff
bg-diff-focus-changed fg-diff-focus-changed
((,class ,@(modus-themes--diff
bg-diff-refine-added fg-diff-refine-added
bg-diff-focus-added fg-diff-focus-added
- bg-diff-refine-added-deuteran fg-diff-refine-added-deuteran))))
+ bg-diff-refine-added-deuteran fg-diff-refine-added-deuteran
+ bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran))))
`(modus-themes-diff-refine-changed
((,class ,@(modus-themes--diff
bg-diff-refine-changed fg-diff-refine-changed
((,class ,@(modus-themes--diff
bg-diff-focus-added fg-diff-focus-added
bg-diff-added fg-diff-added
- bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran))))
+ bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran
+ bg-diff-added-deuteran fg-diff-added-deuteran))))
`(modus-themes-diff-focus-changed
((,class ,@(modus-themes--diff
bg-diff-focus-changed fg-diff-focus-changed
bg-diff-heading fg-diff-heading
cyan-nuanced-bg cyan-nuanced-fg
bg-header fg-main
+ bg-header fg-main
t))))
;;;;; deuteranopia-specific
`(modus-themes-grue ((,class :foreground ,@(modus-themes--deuteran blue green))))
bg-region blue-intense-bg
fg-alt blue-intense)
:extend t)))
- `(modus-themes-key-binding ((,class :inherit bold :foreground ,blue-alt-other)))
+ `(modus-themes-key-binding ((,class :inherit (bold modus-themes-fixed-pitch)
+ :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
`(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))))
+ `(file-name-shadow ((,class :inherit shadow)))
`(header-line ((,class :inherit modus-themes-ui-variable-pitch
:background ,bg-header :foreground ,fg-header)))
`(header-line-highlight ((,class :inherit highlight)))
;;;;; avy
`(avy-background-face ((,class :background ,bg-dim :foreground ,fg-dim :extend t)))
`(avy-goto-char-timer-face ((,class :inherit (modus-themes-intense-neutral bold))))
- `(avy-lead-face ((,class :inherit (modus-themes-intense-blue bold modus-themes-reset-soft))))
- `(avy-lead-face-0 ((,class :inherit (modus-themes-refine-magenta bold modus-themes-reset-soft))))
+ `(avy-lead-face ((,class :inherit (bold modus-themes-reset-soft) :background ,bg-char-0)))
+ `(avy-lead-face-0 ((,class :inherit (bold modus-themes-reset-soft) :background ,bg-char-1)))
`(avy-lead-face-1 ((,class :inherit (modus-themes-special-warm modus-themes-reset-soft))))
- `(avy-lead-face-2 ((,class :inherit (modus-themes-refine-green bold modus-themes-reset-soft))))
+ `(avy-lead-face-2 ((,class :inherit (bold modus-themes-reset-soft) :background ,bg-char-2)))
;;;;; aw (ace-window)
`(aw-background-face ((,class :foreground ,fg-unfocused)))
`(aw-key-face ((,class :inherit modus-themes-key-binding)))
`(cfw:face-toolbar-button-off ((,class :inherit shadow)))
`(cfw:face-toolbar-button-on ((,class :inherit bold :background ,blue-nuanced-bg
:foreground ,blue-alt)))
+;;;;; calibredb
+ `(calibredb-archive-face ((,class :foreground ,magenta-alt-faint)))
+ `(calibredb-author-face ((,class :foreground ,blue-faint)))
+ `(calibredb-comment-face ((,class :inherit shadow)))
+ `(calibredb-date-face ((,class :foreground ,cyan)))
+ `(calibredb-edit-annotation-header-title-face ((,class :inherit bold)))
+ `(calibredb-favorite-face ((,class :foreground ,red-alt)))
+ `(calibredb-file-face (( )))
+ `(calibredb-format-face ((,class :foreground ,cyan-faint)))
+ `(calibredb-highlight-face ((,class :inherit success)))
+ `(calibredb-id-face (( )))
+ `(calibredb-ids-face (( )))
+ `(calibredb-search-header-highlight-face ((,class :inherit modus-themes-hl-line)))
+ `(calibredb-search-header-library-name-face ((,class :foreground ,blue-active)))
+ `(calibredb-search-header-library-path-face ((,class :inherit bold)))
+ `(calibredb-search-header-sort-face ((,class :inherit bold :foreground ,magenta-active)))
+ `(calibredb-search-header-total-face ((,class :inherit bold :foreground ,cyan-active)))
+ `(calibredb-search-header-filter-face ((,class :inherit bold)))
+ `(calibredb-mark-face ((,class :inherit modus-themes-mark-sel)))
+ `(calibredb-size-face (( )))
+ `(calibredb-tag-face ((,class :foreground ,magenta-alt-faint)))
;;;;; centaur-tabs
`(centaur-tabs-active-bar-face ((,class :background ,blue-active)))
`(centaur-tabs-close-mouse-face ((,class :inherit bold :foreground ,red-active :underline t)))
`(corfu-bar ((,class :background ,fg-alt)))
`(corfu-border ((,class :background ,bg-active)))
`(corfu-default ((,class :background ,bg-alt)))
+;;;;; corfu-quick
+ `(corfu-quick1 ((,class :inherit bold :background ,bg-char-0)))
+ `(corfu-quick2 ((,class :inherit bold :background ,bg-char-1)))
;;;;; counsel
`(counsel-active-mode ((,class :foreground ,magenta-alt-other)))
`(counsel-application-name ((,class :foreground ,red-alt-other)))
`(ediff-odd-diff-Ancestor ((,class :inherit ediff-even-diff-Ancestor)))
`(ediff-odd-diff-B ((,class :inherit ediff-even-diff-B)))
`(ediff-odd-diff-C ((,class :inherit ediff-even-diff-C)))
+;;;;; ein (Emacs IPython Notebook)
+ `(ein:basecell-input-area-face ((,class :background ,bg-dim :extend t)))
+ `(ein:cell-output-area (( )))
+ `(ein:cell-output-area-error ((,class :background ,red-nuanced-bg :extend t)))
+ `(ein:cell-output-stderr ((,class :background ,red-nuanced-bg :extend t)))
+ `(ein:markdowncell-input-area-face (( )))
+ `(ein:notification-tab-normal ((,class :underline t)))
;;;;; eglot
`(eglot-mode-line ((,class :inherit modus-themes-bold :foreground ,magenta-active)))
;;;;; el-search
`(font-lock-doc-face ((,class :inherit modus-themes-slant
,@(modus-themes--syntax-string
fg-docstring fg-special-cold
- fg-special-mild magenta-nuanced-fg
+ fg-special-mild fg-special-calm
fg-special-mild magenta-nuanced-fg))))
`(font-lock-function-name-face ((,class ,@(modus-themes--syntax-extra
magenta magenta-faint
yellow yellow-faint))))
`(font-lock-preprocessor-face ((,class ,@(modus-themes--syntax-extra
red-alt-other red-alt-other-faint
- blue-alt blue-alt-faint))))
- `(font-lock-regexp-grouping-backslash ((,class :inherit bold
+ cyan-alt-other cyan-alt-faint))))
+ `(font-lock-regexp-grouping-backslash ((,class :inherit modus-themes-bold
,@(modus-themes--syntax-string
fg-escape-char-backslash yellow-alt-faint
yellow-alt magenta-alt
red-faint green-alt-other-faint))))
- `(font-lock-regexp-grouping-construct ((,class :inherit bold
+ `(font-lock-regexp-grouping-construct ((,class :inherit modus-themes-bold
,@(modus-themes--syntax-string
fg-escape-char-construct red-alt-other-faint
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-alt-other red-alt
+ green-alt-other red-alt-other
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))))
+ ,@(modus-themes--syntax-extra
+ cyan-alt-other cyan-alt-faint
+ magenta-alt-other magenta-alt-other-faint))))
`(font-lock-variable-name-face ((,class ,@(modus-themes--syntax-extra
cyan cyan-faint
- blue-alt-other blue-alt-other-faint))))
+ blue-alt blue-alt-faint))))
`(font-lock-warning-face ((,class :inherit modus-themes-bold
- ,@(modus-themes--syntax-comment
- yellow-active red-active red-faint yellow-faint))))
+ ,@(modus-themes--syntax-foreground
+ yellow-active yellow-alt-faint))))
;;;;; forge
`(forge-post-author ((,class :inherit bold :foreground ,fg-main)))
`(forge-post-date ((,class :foreground ,fg-special-cold)))
`(forge-topic-unread ((,class :inherit bold :foreground ,fg-main)))
;;;;; fountain-mode
`(fountain-character ((,class :foreground ,blue-alt-other)))
- `(fountain-comment ((,class :inherit modus-themes-slant :foreground ,fg-alt)))
+ `(fountain-comment ((,class :inherit font-lock-comment-face)))
`(fountain-dialog ((,class :foreground ,blue-alt)))
`(fountain-metadata-key ((,class :foreground ,green-alt-other)))
`(fountain-metadata-value ((,class :foreground ,blue)))
`(geiser-font-lock-xref-link ((,class :inherit button)))
;;;;; git-commit
`(git-commit-comment-action ((,class :inherit font-lock-comment-face)))
- `(git-commit-comment-branch-local ((,class :inherit modus-themes-slant :foreground ,blue-alt)))
- `(git-commit-comment-branch-remote ((,class :inherit modus-themes-slant :foreground ,magenta-alt)))
- `(git-commit-comment-detached ((,class :inherit modus-themes-slant :foreground ,cyan-alt)))
- `(git-commit-comment-file ((,class :inherit modus-themes-slant :foreground ,cyan)))
- `(git-commit-comment-heading ((,class :inherit (bold modus-themes-slant))))
+ `(git-commit-comment-branch-local ((,class :inherit font-lock-comment-face :foreground ,blue-alt)))
+ `(git-commit-comment-branch-remote ((,class :inherit font-lock-comment-face :foreground ,magenta-alt)))
+ `(git-commit-comment-detached ((,class :inherit font-lock-comment-face :foreground ,cyan-alt)))
+ `(git-commit-comment-file ((,class :inherit font-lock-comment-face :foreground ,cyan)))
+ `(git-commit-comment-heading ((,class :inherit (bold font-lock-comment-face))))
`(git-commit-keyword ((,class :foreground ,magenta)))
`(git-commit-known-pseudo-header ((,class :foreground ,cyan-alt-other)))
`(git-commit-nonempty-second-line ((,class :inherit error)))
`(git-gutter-fr:deleted ((,class :inherit modus-themes-fringe-red)))
`(git-gutter-fr:modified ((,class :inherit modus-themes-fringe-yellow)))
;;;;; git-rebase
- `(git-rebase-comment-hash ((,class :inherit modus-themes-slant :foreground ,cyan)))
- `(git-rebase-comment-heading ((,class :inherit (bold modus-themes-slant))))
+ `(git-rebase-comment-hash ((,class :inherit font-lock-comment-face :foreground ,cyan)))
+ `(git-rebase-comment-heading ((,class :inherit (bold font-lock-comment-face))))
`(git-rebase-description ((,class :foreground ,fg-main)))
`(git-rebase-hash ((,class :foreground ,cyan-alt-other)))
;;;;; git-timemachine
`(kaocha-runner-warning-face ((,class :inherit warning)))
;;;;; keycast
`(keycast-command ((,class :inherit bold :foreground ,blue-active)))
- `(keycast-key ((,class ,@(modus-themes--mode-line-padded-box blue-active)
+ ;; FIXME 2022-05-03: The padding breaks `keycast-tab-bar-mode'
+ `(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-payee-uncleared-face ((,class :foreground ,red-alt-other)))
`(ledger-font-xact-highlight-face ((,class :background ,bg-hl-alt)))
;;;;; line numbers (display-line-numbers-mode and global variant)
+ ;; Here we cannot inherit `modus-themes-fixed-pitch'. We need to
+ ;; fall back to `default' otherwise line numbers do not scale when
+ ;; using `text-scale-adjust'.
`(line-number
- ((,class :inherit default
+ ((,class :inherit ,(if modus-themes-mixed-fonts 'fixed-pitch 'default)
,@(modus-themes--line-numbers
fg-alt bg-dim
fg-unfocused))))
`(line-number-current-line
- ((,class :inherit (bold default)
+ ((,class :inherit (bold line-number)
,@(modus-themes--line-numbers
fg-main bg-active
blue-alt-other))))
`(line-number-major-tick
- ((,class :inherit (bold default)
+ ((,class :inherit (bold line-number)
,@(modus-themes--line-numbers
yellow-nuanced-fg yellow-nuanced-bg
red-alt))))
`(line-number-minor-tick
- ((,class :inherit (bold default)
+ ((,class :inherit (bold line-number)
,@(modus-themes--line-numbers
fg-alt bg-inactive
fg-inactive))))
`(magit-diff-added ((,class ,@(modus-themes--diff
bg-diff-added fg-diff-added
green-nuanced-bg fg-diff-added
- bg-diff-added-deuteran fg-diff-added-deuteran))))
+ bg-diff-added-deuteran fg-diff-added-deuteran
+ blue-nuanced-bg fg-diff-added-deuteran))))
`(magit-diff-added-highlight ((,class :inherit modus-themes-diff-focus-added)))
`(magit-diff-base ((,class ,@(modus-themes--diff
bg-diff-changed fg-diff-changed
bg-active fg-inactive
bg-inactive fg-inactive
bg-inactive fg-inactive
+ nil nil
t))))
;; NOTE: we do not follow the pattern of inheriting from
;; modus-themes-grue-* faces, as this is a special case.
:background ,bg-alt)))
`(org-column-title ((,class :inherit (bold modus-themes-fixed-pitch default)
:underline t :background ,bg-alt)))
- `(org-date ((,class :inherit ,(if modus-themes-mixed-fonts
- '(fixed-pitch modus-themes-link-symlink)
- 'modus-themes-link-symlink))))
+ `(org-date ((,class :inherit (modus-themes-link-symlink modus-themes-fixed-pitch))))
`(org-date-selected ((,class :foreground ,blue-alt :inverse-video t)))
`(org-dispatcher-highlight ((,class :inherit (bold modus-themes-mark-alt))))
`(org-document-info ((,class :foreground ,fg-special-cold)))
`(popup-summary-face ((,class :background ,bg-active :foreground ,fg-inactive)))
`(popup-tip-face ((,class :inherit modus-themes-refine-yellow)))
;;;;; powerline
- `(powerline-active0 ((,class :background ,bg-main :foreground ,blue-faint :inverse-video t)))
+ `(powerline-active0 ((,class :background ,blue-faint :foreground ,bg-main)))
`(powerline-active1 ((,class :background ,blue-nuanced-bg :foreground ,blue-nuanced-fg)))
`(powerline-active2 ((,class :background ,bg-active :foreground ,fg-active)))
`(powerline-inactive0 ((,class :background ,bg-special-cold :foreground ,fg-special-cold)))
;;;;; transient
`(transient-active-infix ((,class :inherit modus-themes-special-mild)))
`(transient-amaranth ((,class :inherit bold :foreground ,yellow-alt)))
- `(transient-argument ((,class :inherit bold :background ,cyan-nuanced-bg :foreground ,cyan)))
+ ;; Placate the compiler for what is a spurious warning. We also
+ ;; have to do this with `eldoc-highlight-function-argument'.
+ (list '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)))
`(trashed-marked ((,class :inherit modus-themes-mark-alt)))
`(trashed-restored ((,class :inherit modus-themes-mark-sel)))
`(trashed-symlink ((,class :inherit modus-themes-link-symlink)))
+;;;;; tree-sitter
+ `(tree-sitter-hl-face:attribute ((,class :inherit font-lock-variable-name-face)))
+ `(tree-sitter-hl-face:constant.builtin ((,class :inherit tree-sitter-hl-face:constant)))
+ `(tree-sitter-hl-face:escape ((,class :inherit font-lock-regexp-grouping-backslash)))
+ `(tree-sitter-hl-face:function ((,class :inherit font-lock-function-name-face)))
+ `(tree-sitter-hl-face:function.call ((,class :inherit tree-sitter-hl-face:function)))
+ `(tree-sitter-hl-face:label (( )))
+ `(tree-sitter-hl-face:method.call (( )))
+ `(tree-sitter-hl-face:operator ((,class :inherit modus-themes-bold)))
+ `(tree-sitter-hl-face:property (( )))
+ `(tree-sitter-hl-face:property.definition ((,class :inherit font-lock-variable-name-face)))
+ `(tree-sitter-hl-face:punctuation (( )))
+ `(tree-sitter-hl-face:punctuation.bracket (( )))
+ `(tree-sitter-hl-face:punctuation.delimiter (( )))
+ `(tree-sitter-hl-face:punctuation.special ((,class :inherit font-lock-regexp-grouping-construct)))
+ `(tree-sitter-hl-face:string.special ((,class :inherit tree-sitter-hl-face:string)))
+ `(tree-sitter-hl-face:tag ((,class :inherit font-lock-function-name-face)))
+ `(tree-sitter-hl-face:type.argument (( )))
;;;;; treemacs
`(treemacs-directory-collapsed-face ((,class :foreground ,magenta-alt)))
`(treemacs-directory-face ((,class :inherit dired-directory)))
;;;;; vertico
`(vertico-current ((,class :inherit modus-themes-completion-selected)))
;;;;; vertico-quick
- `(vertico-quick1 ((,class :inherit (modus-themes-intense-blue bold))))
- `(vertico-quick2 ((,class :inherit (modus-themes-refine-magenta bold))))
+ `(vertico-quick1 ((,class :inherit bold :background ,bg-char-0)))
+ `(vertico-quick2 ((,class :inherit bold :background ,bg-char-1)))
;;;;; vimish-fold
`(vimish-fold-fringe ((,class :foreground ,cyan-active)))
`(vimish-fold-mouse-face ((,class :inherit modus-themes-intense-blue)))
`(vterm-color-underline ((,class :foreground ,fg-special-warm :underline t)))
`(vterm-color-white ((,class :background "gray65" :foreground "gray65")))
`(vterm-color-yellow ((,class :background ,yellow :foreground ,yellow)))
+;;;;; vundo
+ `(vundo-highlight ((,class :inherit (bold vundo-node) :foreground ,red-intense)))
;;;;; wcheck-mode
`(wcheck-default-face ((,class :foreground ,red :underline t)))
;;;;; web-mode
`(flymake-error-bitmap '(flymake-double-exclamation-mark modus-themes-fringe-red))
`(flymake-warning-bitmap '(exclamation-mark modus-themes-fringe-yellow))
`(flymake-note-bitmap '(exclamation-mark modus-themes-fringe-cyan))
+;;;; highlight-changes
+ `(highlight-changes-colors nil)
+ `(highlight-changes-face-list '(success warning error bold bold-italic))
;;;; ibuffer
`(ibuffer-deletion-face 'modus-themes-mark-del)
`(ibuffer-filter-group-name-face 'modus-themes-pseudo-header)
(add-to-list 'custom-theme-load-path dir))))
(provide 'modus-themes)
-
-;; Local Variables:
-;; time-stamp-pattern: "Last-Modified: <%Y-%02m-%02d %02H:%02M:%02S %5z>"
-;; End:
-
;;; modus-themes.el ends here