emacs-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

feature/native-comp b5c7653: Merge remote-tracking branch 'savannah/mast


From: Andrea Corallo
Subject: feature/native-comp b5c7653: Merge remote-tracking branch 'savannah/master' into native-comp
Date: Mon, 19 Apr 2021 12:57:07 -0400 (EDT)

branch: feature/native-comp
commit b5c76530fab4b99e76249bfb9a105b30bef4ce67
Merge: e54066f 0a4dc70
Author: Andrea Corallo <akrl@sdf.org>
Commit: Andrea Corallo <akrl@sdf.org>

    Merge remote-tracking branch 'savannah/master' into native-comp
---
 admin/charsets/eucjp-ms.awk                        |    2 +-
 admin/charsets/mule-charsets.el                    |    2 +-
 admin/unidata/unidata-gen.el                       |    6 +-
 doc/emacs/mini.texi                                |    8 +-
 doc/lispref/control.texi                           |    9 +-
 doc/lispref/display.texi                           |   26 +-
 doc/lispref/keymaps.texi                           |    2 +-
 doc/lispref/objects.texi                           |    2 +-
 doc/lispref/processes.texi                         |    7 +-
 doc/misc/eshell.texi                               |    4 +-
 doc/misc/message.texi                              |  163 +-
 doc/misc/modus-themes.org                          |  499 ++++-
 doc/misc/tramp.texi                                |   24 +-
 etc/NEWS                                           |   18 +
 etc/themes/manoj-dark-theme.el                     |    2 +-
 etc/themes/modus-operandi-theme.el                 |    5 +-
 etc/themes/modus-themes.el                         | 2333 +++++++++++---------
 etc/themes/modus-vivendi-theme.el                  |    5 +-
 leim/leim-ext.el                                   |    2 +-
 lib-src/seccomp-filter.c                           |    6 +-
 lisp/align.el                                      |    2 -
 lisp/allout-widgets.el                             |    5 +-
 lisp/allout.el                                     |    1 -
 lisp/autorevert.el                                 |    1 -
 lisp/bs.el                                         |    1 -
 lisp/calc/calc-menu.el                             |    2 +
 lisp/calc/calc-nlfit.el                            |    2 +
 lisp/cedet/semantic/bovine/el.el                   |    2 +-
 lisp/cedet/semantic/db-ebrowse.el                  |    2 +-
 lisp/cus-edit.el                                   |    2 -
 lisp/cus-face.el                                   |    2 -
 lisp/cus-theme.el                                  |    6 +-
 lisp/custom.el                                     |    2 -
 lisp/dframe.el                                     |    2 +-
 lisp/dos-w32.el                                    |    2 +-
 lisp/emacs-lisp/bindat.el                          |   33 +-
 lisp/emacs-lisp/bytecomp.el                        |   63 +-
 lisp/emacs-lisp/cconv.el                           |    2 +-
 lisp/emacs-lisp/check-declare.el                   |    2 +-
 lisp/emacs-lisp/cl-indent.el                       |    2 +-
 lisp/emacs-lisp/cl-macs.el                         |    4 +-
 lisp/emacs-lisp/debug.el                           |    2 +-
 lisp/emacs-lisp/easy-mmode.el                      |   38 +-
 lisp/emacs-lisp/edebug.el                          |    3 +
 lisp/emacs-lisp/eieio-core.el                      |   12 +-
 lisp/emacs-lisp/eieio-custom.el                    |    2 +-
 lisp/emacs-lisp/eieio-opt.el                       |    2 +-
 lisp/emacs-lisp/eieio-speedbar.el                  |    2 +-
 lisp/emacs-lisp/eieio.el                           |    2 +-
 lisp/emacs-lisp/faceup.el                          |    5 -
 lisp/emacs-lisp/lisp-mnt.el                        |    5 -
 lisp/emacs-lisp/ring.el                            |    2 -
 lisp/emacs-lisp/tcover-ses.el                      |    4 +-
 lisp/emacs-lisp/testcover.el                       |    4 +-
 lisp/emacs-lisp/text-property-search.el            |    2 +
 lisp/emacs-lisp/unsafep.el                         |    2 +-
 lisp/emulation/edt-mapper.el                       |    2 +-
 lisp/erc/erc-button.el                             |    2 +-
 lisp/erc/erc-desktop-notifications.el              |    2 +-
 lisp/erc/erc-goodies.el                            |    2 +-
 lisp/erc/erc-imenu.el                              |    2 +-
 lisp/erc/erc-menu.el                               |    2 +-
 lisp/erc/erc-page.el                               |    2 +-
 lisp/erc/erc-replace.el                            |    2 +-
 lisp/erc/erc-ring.el                               |    2 +-
 lisp/eshell/em-xtra.el                             |   44 +-
 lisp/expand.el                                     |    1 -
 lisp/filecache.el                                  |    4 -
 lisp/filenotify.el                                 |    1 -
 lisp/files.el                                      |    2 +-
 lisp/gnus/gnus-cus.el                              |    2 -
 lisp/gnus/gnus-diary.el                            |    5 -
 lisp/gnus/gnus-group.el                            |    3 +-
 lisp/gnus/gnus-notifications.el                    |    2 +-
 lisp/gnus/gnus-registry.el                         |    2 -
 lisp/gnus/legacy-gnus-agent.el                     |    2 +-
 lisp/gnus/message.el                               |   24 +-
 lisp/gnus/mm-archive.el                            |    2 +-
 lisp/gnus/nnselect.el                              |    1 -
 lisp/gnus/spam-report.el                           |    2 +-
 lisp/icomplete.el                                  |    1 -
 lisp/info.el                                       |    2 +-
 lisp/isearch.el                                    |    4 +-
 lisp/language/burmese.el                           |    2 +
 lisp/language/cham.el                              |    2 +
 lisp/language/khmer.el                             |    2 +-
 lisp/language/sinhala.el                           |    2 +-
 lisp/language/tai-viet.el                          |    2 +
 lisp/language/thai-word.el                         |    4 +-
 lisp/language/tv-util.el                           |    3 +-
 lisp/leim/quail/croatian.el                        |    2 +-
 lisp/leim/quail/hebrew.el                          |    2 +-
 lisp/leim/quail/persian.el                         |    2 +-
 lisp/ls-lisp.el                                    |    2 +-
 lisp/mail/rmail-spam-filter.el                     |    2 +-
 lisp/mail/uudecode.el                              |    2 +-
 lisp/mh-e/mh-acros.el                              |    2 -
 lisp/mh-e/mh-alias.el                              |    2 -
 lisp/mh-e/mh-buffers.el                            |    2 -
 lisp/mh-e/mh-comp.el                               |    2 -
 lisp/mh-e/mh-compat.el                             |    2 -
 lisp/mh-e/mh-folder.el                             |    2 -
 lisp/mh-e/mh-funcs.el                              |    2 -
 lisp/mh-e/mh-gnus.el                               |    2 -
 lisp/mh-e/mh-identity.el                           |    2 -
 lisp/mh-e/mh-inc.el                                |    2 -
 lisp/mh-e/mh-junk.el                               |    2 -
 lisp/mh-e/mh-letter.el                             |    2 -
 lisp/mh-e/mh-limit.el                              |    2 -
 lisp/mh-e/mh-mime.el                               |    2 -
 lisp/mh-e/mh-print.el                              |    2 -
 lisp/mh-e/mh-scan.el                               |    2 -
 lisp/mh-e/mh-search.el                             |    6 +-
 lisp/mh-e/mh-seq.el                                |    2 -
 lisp/mh-e/mh-show.el                               |    4 +-
 lisp/mh-e/mh-speed.el                              |    2 -
 lisp/mh-e/mh-thread.el                             |    2 -
 lisp/mh-e/mh-tool-bar.el                           |    2 -
 lisp/mh-e/mh-utils.el                              |    2 -
 lisp/mh-e/mh-xface.el                              |    2 -
 lisp/misearch.el                                   |    2 +-
 lisp/net/ange-ftp.el                               |    4 -
 lisp/net/newst-ticker.el                           |    2 +-
 lisp/net/rcirc.el                                  |    5 +-
 lisp/net/secrets.el                                |    2 +
 lisp/net/sieve-manage.el                           |    2 +-
 lisp/net/sieve-mode.el                             |    2 +-
 lisp/net/sieve.el                                  |    2 +-
 lisp/net/tramp-cmds.el                             |   42 +
 lisp/net/tramp-sh.el                               |   78 +-
 lisp/net/tramp.el                                  |    3 +-
 lisp/notifications.el                              |    2 +
 lisp/nxml/rng-cmpct.el                             |    2 +-
 lisp/nxml/xmltok.el                                |   45 +-
 lisp/obsolete/fast-lock.el                         |    2 -
 lisp/obsolete/info-edit.el                         |    2 +-
 lisp/obsolete/lazy-lock.el                         |    2 -
 lisp/obsolete/nnir.el                              |    1 -
 lisp/obsolete/old-emacs-lock.el                    |    4 +-
 lisp/obsolete/otodo-mode.el                        |    4 +-
 lisp/obsolete/sb-image.el                          |    2 +-
 lisp/obsolete/sregex.el                            |    4 +-
 lisp/obsolete/tpu-mapper.el                        |    2 +-
 lisp/org/ob-hledger.el                             |    2 +-
 lisp/org/ob-mscgen.el                              |    4 +-
 lisp/org/ol-eshell.el                              |    2 +-
 lisp/org/org-ctags.el                              |    4 +-
 lisp/org/ox-man.el                                 |    2 +-
 lisp/progmodes/bug-reference.el                    |    2 +-
 lisp/progmodes/cc-awk.el                           |    2 +-
 lisp/progmodes/cc-bytecomp.el                      |   13 +
 lisp/progmodes/cc-cmds.el                          |    1 +
 lisp/progmodes/cc-defs.el                          |  199 +-
 lisp/progmodes/cc-engine.el                        |   41 +-
 lisp/progmodes/cc-fonts.el                         |   25 +-
 lisp/progmodes/cc-guess.el                         |    4 +-
 lisp/progmodes/cc-langs.el                         |   17 +-
 lisp/progmodes/cc-mode.el                          |    2 +
 lisp/progmodes/glasses.el                          |    4 -
 lisp/progmodes/gud.el                              |   15 +
 lisp/progmodes/idlw-shell.el                       |    2 +-
 lisp/progmodes/idlwave.el                          |    2 +-
 lisp/progmodes/js.el                               |    7 +-
 lisp/progmodes/meta-mode.el                        |    3 -
 lisp/progmodes/project.el                          |   25 +-
 lisp/progmodes/python.el                           |    2 -
 lisp/progmodes/sql.el                              |    4 +-
 lisp/progmodes/xref.el                             |    3 +-
 lisp/repeat.el                                     |  125 +-
 lisp/ses.el                                        |    2 +-
 lisp/speedbar.el                                   |    5 +-
 lisp/term/konsole.el                               |    2 +-
 lisp/term/linux.el                                 |    4 +-
 lisp/term/lk201.el                                 |    2 +-
 lisp/term/screen.el                                |    2 +-
 lisp/term/st.el                                    |    2 +-
 lisp/term/tmux.el                                  |    2 +-
 lisp/term/w32console.el                            |    2 +-
 lisp/textmodes/artist.el                           |    2 +-
 lisp/textmodes/bibtex-style.el                     |    1 -
 lisp/textmodes/bibtex.el                           |    3 -
 lisp/textmodes/makeinfo.el                         |    1 -
 lisp/textmodes/page.el                             |    2 -
 lisp/textmodes/paragraphs.el                       |    8 +-
 lisp/textmodes/remember.el                         |    2 +-
 lisp/textmodes/table.el                            |    2 +-
 lisp/textmodes/tex-mode.el                         |    1 -
 lisp/textmodes/texinfmt.el                         |    6 +-
 lisp/textmodes/texnfo-upd.el                       |    2 -
 lisp/textmodes/tildify.el                          |    2 -
 lisp/textmodes/two-column.el                       |   11 +-
 lisp/uniquify.el                                   |    2 -
 lisp/url/url-mailto.el                             |    2 +-
 lisp/vc/vc-dispatcher.el                           |    2 +-
 lisp/vc/vc-filewise.el                             |    2 +
 lisp/vc/vc-hg.el                                   |    4 -
 lisp/widget.el                                     |    2 -
 src/alloc.c                                        |    2 +-
 src/character.c                                    |   56 +-
 src/character.h                                    |    4 +-
 src/editfns.c                                      |    9 +-
 src/eval.c                                         |   34 +-
 src/frame.c                                        |   16 +-
 src/image.c                                        |   58 +-
 src/minibuf.c                                      |   38 +-
 src/w32fns.c                                       |    2 +
 src/w32term.c                                      |   20 +-
 src/window.c                                       |   71 +-
 src/window.h                                       |    1 +
 src/xdisp.c                                        |  129 +-
 src/xfns.c                                         |    2 +
 src/xselect.c                                      |   21 +-
 test/lisp/autorevert-tests.el                      |    2 +-
 test/lisp/calendar/icalendar-tests.el              |    2 +-
 test/lisp/calendar/parse-time-tests.el             |    2 +-
 test/lisp/cedet/srecode-utest-template.el          |    2 +-
 test/lisp/custom-resources/custom--test-theme.el   |    2 +-
 test/lisp/descr-text-tests.el                      |    2 +-
 test/lisp/emacs-lisp/bytecomp-tests.el             |  127 ++
 test/lisp/emacs-lisp/cl-macs-tests.el              |    9 +-
 .../eieio-tests/eieio-test-methodinvoke.el         |    2 +-
 test/lisp/emacs-lisp/eieio-tests/eieio-tests.el    |    2 +-
 test/lisp/eshell/em-hist-tests.el                  |    2 +-
 test/lisp/eshell/em-ls-tests.el                    |    2 +-
 test/lisp/eshell/esh-opt-tests.el                  |    2 +-
 test/lisp/eshell/eshell-tests.el                   |    2 +-
 test/lisp/gnus/message-tests.el                    |    2 +-
 test/lisp/info-xref-tests.el                       |    2 +-
 test/lisp/international/ucs-normalize-tests.el     |    2 +-
 test/lisp/net/nsm-tests.el                         |    2 +-
 test/lisp/net/shr-tests.el                         |    2 +-
 test/lisp/net/tramp-tests.el                       |   40 +-
 test/lisp/play/cookie1-tests.el                    |    2 +-
 test/lisp/progmodes/cperl-mode-tests.el            |    2 +-
 test/lisp/progmodes/perl-mode-tests.el             |    2 +-
 test/lisp/progmodes/project-tests.el               |   85 +
 test/lisp/progmodes/xref-tests.el                  |    2 +
 test/lisp/simple-tests.el                          |    2 +-
 test/lisp/textmodes/fill-tests.el                  |    2 +-
 test/lisp/textmodes/tildify-tests.el               |    2 +-
 test/lisp/thingatpt-tests.el                       |    2 +-
 test/lisp/vc/vc-bzr-tests.el                       |    2 +-
 test/lisp/xml-tests.el                             |    2 +-
 test/manual/cedet/semantic-tests.el                |    2 +-
 test/manual/cedet/tests/test.el                    |    3 -
 test/manual/image-size-tests.el                    |    2 +-
 test/manual/image-transforms-tests.el              |    2 +-
 test/manual/scroll-tests.el                        |    2 +-
 test/misc/test-custom-noloads.el                   |    4 +-
 test/src/character-tests.el                        |   45 +
 test/src/editfns-tests.el                          |    2 +-
 test/src/emacs-module-tests.el                     |    2 +-
 test/src/emacs-tests.el                            |   60 +-
 test/src/fileio-tests.el                           |    2 +-
 test/src/thread-tests.el                           |    2 +-
 test/src/timefns-tests.el                          |    2 +-
 256 files changed, 3185 insertions(+), 2088 deletions(-)

diff --git a/admin/charsets/eucjp-ms.awk b/admin/charsets/eucjp-ms.awk
index ca9a317..033b37f 100644
--- a/admin/charsets/eucjp-ms.awk
+++ b/admin/charsets/eucjp-ms.awk
@@ -38,7 +38,7 @@ BEGIN {
   JISX0208_FROM2 = "/xf5/xa1";
   JISX0212_FROM = "/x8f/xf3/xf3";
 
-  print ";;; eucjp-ms.el -- translation table for eucJP-ms  -*- 
lexical-binding:t -*-";
+  print ";;; eucjp-ms.el --- translation table for eucJP-ms  -*- 
lexical-binding:t -*-";
   print ";;; Automatically generated from 
/usr/share/i18n/charmaps/EUC-JP-MS.gz";
   print "(let ((map";
   print "       '(;JISEXT<->UNICODE";
diff --git a/admin/charsets/mule-charsets.el b/admin/charsets/mule-charsets.el
index 99a8c60..7bcceb3 100644
--- a/admin/charsets/mule-charsets.el
+++ b/admin/charsets/mule-charsets.el
@@ -1,4 +1,4 @@
-;; mule-charsets.el -- Generate Mule-original charset maps.  -*- 
lexical-binding: t -*-
+;;; mule-charsets.el --- Generate Mule-original charset maps.  -*- 
lexical-binding: t -*-
 ;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
 ;;   Registration Number H13PRO009
diff --git a/admin/unidata/unidata-gen.el b/admin/unidata/unidata-gen.el
index 221c9b1..abd41e3 100644
--- a/admin/unidata/unidata-gen.el
+++ b/admin/unidata/unidata-gen.el
@@ -1,4 +1,4 @@
-;; unidata-gen.el -- Create files containing character property data  -*- 
lexical-binding:t -*-
+;;; unidata-gen.el --- Create files containing character property data  -*- 
lexical-binding:t -*-
 
 ;; Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
@@ -1446,7 +1446,7 @@ Property value is a symbol `o' (Open), `c' (Close), or 
`n' (None)."
                 ";; no-byte-compile: t\n"
                 ";; no-update-autoloads: t\n"
                 ";; End:\n\n"
-                (format ";; %s ends here\n" basename)))))
+                (format ";;; %s ends here\n" basename)))))
   (or noninteractive (message "Generating %s...done" file)))
 
 (defun unidata-gen-charprop (&optional charprop-file)
@@ -1470,7 +1470,7 @@ Property value is a symbol `o' (Open), `c' (Close), or 
`n' (None)."
            ";; no-byte-compile: t\n"
            ";; no-update-autoloads: t\n"
            ";; End:\n\n"
-           (format ";; %s ends here\n"
+            (format ";;; %s ends here\n"
                    (file-name-nondirectory charprop-file)))))
 
 
diff --git a/doc/emacs/mini.texi b/doc/emacs/mini.texi
index d0865c5..1eba707 100644
--- a/doc/emacs/mini.texi
+++ b/doc/emacs/mini.texi
@@ -64,10 +64,10 @@ minibuffer-electric-default-mode}.
 
   Since the minibuffer appears in the echo area, it can conflict with
 other uses of the echo area.  If an error message or an informative
-message is emitted while the minibuffer is active, the message hides
-the minibuffer for a few seconds, or until you type something; then
-the minibuffer comes back.  While the minibuffer is in use, Emacs does
-not echo keystrokes.
+message is emitted while the minibuffer is active, the message is
+displayed in brackets after the minibuffer text for a few seconds, or
+until you type something; then the message disappears.  While the
+minibuffer is in use, Emacs does not echo keystrokes.
 
 @vindex minibuffer-follows-selected-frame
   While using the minibuffer, you can switch to a different frame,
diff --git a/doc/lispref/control.texi b/doc/lispref/control.texi
index 3388102..22b665b 100644
--- a/doc/lispref/control.texi
+++ b/doc/lispref/control.texi
@@ -2012,7 +2012,8 @@ that can be handled).
 This special form establishes the error handlers @var{handlers} around
 the execution of @var{protected-form}.  If @var{protected-form} executes
 without error, the value it returns becomes the value of the
-@code{condition-case} form; in this case, the @code{condition-case} has
+@code{condition-case} form (in the absence of a success handler; see below).
+In this case, the @code{condition-case} has
 no effect.  The @code{condition-case} form makes a difference when an
 error occurs during @var{protected-form}.
 
@@ -2062,6 +2063,12 @@ error description.
 If @var{var} is @code{nil}, that means no variable is bound.  Then the
 error symbol and associated data are not available to the handler.
 
+@cindex success handler
+As a special case, one of the @var{handlers} can be a list of the
+form @code{(:success @var{body}@dots{})}, where @var{body} is executed
+with @var{var} (if non-@code{nil}) bound to the return value of
+@var{protected-form} when that expression terminates without error.
+
 @cindex rethrow a signal
 Sometimes it is necessary to re-throw a signal caught by
 @code{condition-case}, for some outer-level handler to catch.  Here's
diff --git a/doc/lispref/display.texi b/doc/lispref/display.texi
index 68d7e82..228c940 100644
--- a/doc/lispref/display.texi
+++ b/doc/lispref/display.texi
@@ -1965,9 +1965,18 @@ Tables}).  The width of a tab character is usually 
@code{tab-width}
 (@pxref{Usual Display}).
 @end defun
 
-@defun string-width string
+@defun string-width string &optional from to
 This function returns the width in columns of the string @var{string},
 if it were displayed in the current buffer and the selected window.
+Optional arguments @var{from} and @var{to} specify the substring of
+@var{string} to consider, and are interpreted as in @code{substring}
+(@pxref{Creating Strings}).
+
+The return value is an approximation: it only considers the values
+returned by @code{char-width} for the constituent characters, always
+takes a tab character as taking @code{tab-width} columns, ignores
+display properties and fonts, etc.  For these reasons, we recommend
+using @code{window-text-pixel-size}, described below, instead.
 @end defun
 
 @defun truncate-string-to-width string width &optional start-column padding 
ellipsis ellipsis-text-property
@@ -4752,6 +4761,7 @@ window on a minibuffer-less frame.
 @node Display Property
 @section The @code{display} Property
 @cindex display specification
+@cindex display property
 @kindex display @r{(text property)}
 
   The @code{display} text property (or overlay property) is used to
@@ -5289,6 +5299,16 @@ where @var{props} is a property list of alternating 
keyword symbols
 and values, including at least the pair @code{:type @var{type}} that
 specifies the image type.
 
+  Image descriptors which define image dimensions, @code{:width},
+@code{:height}, @code{:max-width} and @code{:max-height}, may take
+either an integer, which represents the dimension in pixels, or a pair
+@code{(@var{value} . em)}, where @var{value} is the dimension's
+length in @dfn{ems}@footnote{In typography an em is a distance
+equivalent to the height of the type.  For example when using 12 point
+type 1 em is equal to 12 points.  Its use ensures distances and type
+remain proportional.}.  One em is equivalent to the height of the font
+and @var{value} may be an integer or a float.
+
   The following is a list of properties that are meaningful for all
 image types (there are also properties which are meaningful only for
 certain image types, as documented in the following subsections):
@@ -5758,13 +5778,13 @@ properties:
 @item :foreground @var{foreground}
 @var{foreground}, if non-@code{nil}, should be a string specifying a
 color, which is used as the image's foreground color.  If the value is
-@code{nil}, it defaults to the faces's foreground color.
+@code{nil}, it defaults to the current face's foreground color.
 
 @item :background @var{background}
 @var{background}, if non-@code{nil}, should be a string specifying a
 color, which is used as the image's background color if the image
 supports transparency.  If the value is @code{nil}, it defaults to the
-faces's background color.
+current face's background color.
 
 @item :css @var{css}
 @var{css}, if non-@code{nil}, should be a string specifying the CSS to
diff --git a/doc/lispref/keymaps.texi b/doc/lispref/keymaps.texi
index dabf985..cbc94d8 100644
--- a/doc/lispref/keymaps.texi
+++ b/doc/lispref/keymaps.texi
@@ -1686,7 +1686,7 @@ presence of such a binding can still prevent translation 
from taking place.
 For example, let us return to our VT100 example above and add a binding for
 @kbd{C-c @key{ESC}} to the global map; now when the user hits @kbd{C-c
 @key{PF1}} Emacs will fail to decode @kbd{C-c @key{ESC} O P} into @kbd{C-c
-@key{PF1}} because it will stop reading keys right after @kbd{C-x @key{ESC}},
+@key{PF1}} because it will stop reading keys right after @kbd{C-c @key{ESC}},
 leaving @kbd{O P} for later.  This is in case the user really hit @kbd{C-c
 @key{ESC}}, in which case Emacs should not sit there waiting for the next key
 to decide whether the user really pressed @kbd{@key{ESC}} or @kbd{@key{PF1}}.
diff --git a/doc/lispref/objects.texi b/doc/lispref/objects.texi
index 0d0caeb..d8091f1 100644
--- a/doc/lispref/objects.texi
+++ b/doc/lispref/objects.texi
@@ -2411,7 +2411,7 @@ that is evaluated.  For example:
 
 @noindent
 Although the list @code{(0.5)} was mutable when it was created, it should not
-have been changed via @code{setcar} because it given to @code{eval}.  The
+have been changed via @code{setcar} because it was given to @code{eval}.  The
 reverse does not occur: an object that should not be changed never
 becomes mutable afterwards.
 
diff --git a/doc/lispref/processes.texi b/doc/lispref/processes.texi
index b324649..0dfdac7 100644
--- a/doc/lispref/processes.texi
+++ b/doc/lispref/processes.texi
@@ -1325,7 +1325,7 @@ the numeric ID of the foreground process group of 
@var{process}; it
 returns @code{nil} if Emacs can be certain that this is not so.  The
 value is @code{t} if Emacs cannot tell whether this is true.  This
 function signals an error if @var{process} is a network, serial, or
-pipe connection, or is the subprocess is not active.
+pipe connection, or if the subprocess is not active.
 @end defun
 
 @node Signals to Processes
@@ -3410,8 +3410,9 @@ Unsigned integer in little endian order, with 
@var{bitlen} bits.
 @item str @var{len}
 String of bytes of length @var{len}.
 
-@item strz @var{len}
-Zero-terminated string of bytes, in a fixed-size field with length @var{len}.
+@item strz &optional @var{len}
+Zero-terminated string of bytes, can be of arbitrary length or in a fixed-size
+field with length @var{len}.
 
 @item vec @var{len} [@var{type}]
 Vector of @var{len} elements.  The type of the elements is given by
diff --git a/doc/misc/eshell.texi b/doc/misc/eshell.texi
index e106f39..fc2e3f3 100644
--- a/doc/misc/eshell.texi
+++ b/doc/misc/eshell.texi
@@ -515,8 +515,8 @@ below the @code{completion-cycle-threshold}), press 
@kbd{M-?}.
 @subsection pcomplete
 Pcomplete, short for programmable completion, is the completion
 library originally written for Eshell, but usable for command
-completion@footnote{Command completion as opposed to code completion,
-which is a beyond the scope of pcomplete.}  in other modes.
+completion@footnote{Command completion, as opposed to code completion,
+which is beyond the scope of pcomplete.} in other modes.
 
 Completions are defined as functions (with @code{defun}) named
 @code{pcomplete/COMMAND}, where @code{COMMAND} is the name of the
diff --git a/doc/misc/message.texi b/doc/misc/message.texi
index 1497c71..d2353e6 100644
--- a/doc/misc/message.texi
+++ b/doc/misc/message.texi
@@ -1792,8 +1792,89 @@ member list with elements @code{CC} and @code{To}, then
 @code{message-carefully-insert-headers} will not insert a @code{To}
 header when the message is already @code{CC}ed to the recipient.
 
+@item message-syntax-checks
+@vindex message-syntax-checks
+Controls what syntax checks should not be performed on outgoing posts.
+To disable checking of long signatures, for instance, add
+
+@lisp
+(signature . disabled)
+@end lisp
+
+to this list.
+
+Valid checks are:
+
+@table @code
+@item approved
+@cindex approved
+Check whether the article has an @code{Approved} header, which is
+something only moderators should include.
+@item continuation-headers
+Check whether there are continuation header lines that don't begin with
+whitespace.
+@item control-chars
+Check for invalid characters.
+@item empty
+Check whether the article is empty.
+@item existing-newsgroups
+Check whether the newsgroups mentioned in the @code{Newsgroups} and
+@code{Followup-To} headers exist.
+@item from
+Check whether the @code{From} header seems nice.
+@item illegible-text
+Check whether there is any non-printable character in the body.
+@item invisible-text
+Check whether there is any invisible text in the buffer.
+@item long-header-lines
+Check for too long header lines.
+@item long-lines
+@cindex long lines
+Check for too long lines in the body.
+@item message-id
+Check whether the @code{Message-ID} looks syntactically ok.
+@item multiple-headers
+Check for the existence of multiple equal headers.
+@item new-text
+Check whether there is any new text in the messages.
+@item newsgroups
+Check whether the @code{Newsgroups} header exists and is not empty.
+@item quoting-style
+Check whether text follows last quoted portion.
+@item repeated-newsgroups
+Check whether the @code{Newsgroups} and @code{Followup-To} headers
+contains repeated group names.
+@item reply-to
+Check whether the @code{Reply-To} header looks ok.
+@item sender
+@cindex Sender
+Insert a new @code{Sender} header if the @code{From} header looks odd.
+@item sendsys
+@cindex sendsys
+Check for the existence of version and sendsys commands.
+@item shoot
+Check whether the domain part of the @code{Message-ID} header looks ok.
+@item shorten-followup-to
+Check whether to add a @code{Followup-To} header to shorten the number
+of groups to post to.
+@item signature
+Check the length of the signature.
+@item size
+Check for excessive size.
+@item subject
+Check whether the @code{Subject} header exists and is not empty.
+@item subject-cmsg
+Check the subject for commands.
+@item valid-newsgroups
+Check whether the @code{Newsgroups} and @code{Followup-To} headers
+are valid syntactically.
 @end table
 
+All these conditions are checked by default, except for @code{sender}
+for which the check is disabled by default if
+@code{message-insert-canlock} is non-@code{nil} (@pxref{Canceling News}).
+
+@end table
 
 @node Mail Headers
 @section Mail Headers
@@ -2072,88 +2153,6 @@ Other variables for customizing outgoing news articles:
 
 @table @code
 
-@item message-syntax-checks
-@vindex message-syntax-checks
-Controls what syntax checks should not be performed on outgoing posts.
-To disable checking of long signatures, for instance, add
-
-@lisp
-(signature . disabled)
-@end lisp
-
-to this list.
-
-Valid checks are:
-
-@table @code
-@item approved
-@cindex approved
-Check whether the article has an @code{Approved} header, which is
-something only moderators should include.
-@item continuation-headers
-Check whether there are continuation header lines that don't begin with
-whitespace.
-@item control-chars
-Check for invalid characters.
-@item empty
-Check whether the article is empty.
-@item existing-newsgroups
-Check whether the newsgroups mentioned in the @code{Newsgroups} and
-@code{Followup-To} headers exist.
-@item from
-Check whether the @code{From} header seems nice.
-@item illegible-text
-Check whether there is any non-printable character in the body.
-@item invisible-text
-Check whether there is any invisible text in the buffer.
-@item long-header-lines
-Check for too long header lines.
-@item long-lines
-@cindex long lines
-Check for too long lines in the body.
-@item message-id
-Check whether the @code{Message-ID} looks syntactically ok.
-@item multiple-headers
-Check for the existence of multiple equal headers.
-@item new-text
-Check whether there is any new text in the messages.
-@item newsgroups
-Check whether the @code{Newsgroups} header exists and is not empty.
-@item quoting-style
-Check whether text follows last quoted portion.
-@item repeated-newsgroups
-Check whether the @code{Newsgroups} and @code{Followup-To} headers
-contains repeated group names.
-@item reply-to
-Check whether the @code{Reply-To} header looks ok.
-@item sender
-@cindex Sender
-Insert a new @code{Sender} header if the @code{From} header looks odd.
-@item sendsys
-@cindex sendsys
-Check for the existence of version and sendsys commands.
-@item shoot
-Check whether the domain part of the @code{Message-ID} header looks ok.
-@item shorten-followup-to
-Check whether to add a @code{Followup-To} header to shorten the number
-of groups to post to.
-@item signature
-Check the length of the signature.
-@item size
-Check for excessive size.
-@item subject
-Check whether the @code{Subject} header exists and is not empty.
-@item subject-cmsg
-Check the subject for commands.
-@item valid-newsgroups
-Check whether the @code{Newsgroups} and @code{Followup-To} headers
-are valid syntactically.
-@end table
-
-All these conditions are checked by default, except for @code{sender}
-for which the check is disabled by default if
-@code{message-insert-canlock} is non-@code{nil} (@pxref{Canceling News}).
-
 @item message-ignored-news-headers
 @vindex message-ignored-news-headers
 Regexp of headers to be removed before posting.  The default is@*
diff --git a/doc/misc/modus-themes.org b/doc/misc/modus-themes.org
index 9764a34..001ed57 100644
--- a/doc/misc/modus-themes.org
+++ b/doc/misc/modus-themes.org
@@ -4,9 +4,9 @@
 #+language: en
 #+options: ':t toc:nil author:t email:t
 
-#+macro: stable-version 1.2.3
-#+macro: release-date 2021-03-05
-#+macro: development-version 1.3.0-dev
+#+macro: stable-version 1.3.2
+#+macro: release-date 2021-04-18
+#+macro: development-version 1.4.0-dev
 #+macro: export-date (eval (format-time-string "%F %R %z" (current-time)))
 #+macro: file @@texinfo:@file{@@$1@@texinfo:}@@
 #+macro: space @@texinfo:@: @@
@@ -46,11 +46,15 @@ built on {{{export-date}}}.
 Copyright (C) 2020-2021  Free Software Foundation, Inc.
 
 #+begin_quote
-Permission is granted to copy, distribute and/or modify this
-document under the terms of the GNU Free Documentation License,
-Version 1.3 or any later version published by the Free Software
-Foundation; with no Invariant Sections, with no Front-Cover Texts,
-and with no Back-Cover Texts.
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover Texts being “A GNU Manual,” and
+with the Back-Cover Texts as in (a) below.  A copy of the license is
+included in the section entitled “GNU Free Documentation License.”
+
+(a) The FSF’s Back-Cover Text is: “You have the freedom to copy and
+modify this GNU manual.”
 #+end_quote
 
 * Overview
@@ -141,7 +145,7 @@ The themes are now ready to be used: 
[[#h:3f3c3728-1b34-437d-9d0c-b110f5b161a9][
 :custom_id: h:c4b10085-149f-43e2-bd4d-347f33aee054
 :end:
 
-The =modus-themes= package is available from the GNU ELPA archive, which
+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
@@ -287,7 +291,8 @@ package configurations in their setup.  We use this as an 
example:
   :init
   ;; Add all your customizations prior to loading the themes
   (setq modus-themes-slanted-constructs t
-        modus-themes-bold-constructs nil)
+        modus-themes-bold-constructs nil
+        modus-themes-region 'no-extend)
 
   ;; Load the theme files before enabling a theme (else you get an error).
   (modus-themes-load-themes)
@@ -374,13 +379,13 @@ Symbol: ~modus-themes-bold-constructs~
 
 Possible values:
 
-1. =nil= (default)
-2. =t=
+1. ~nil~ (default)
+2. ~t~
 
 The default is to use a bold typographic weight only when it is
 required.
 
-With a non-nil value (=t=) display several syntactic constructs in bold
+With a non-nil value (~t~) display several syntactic constructs in bold
 weight.  This concerns keywords and other important aspects of code
 syntax.  It also affects certain mode line indicators and command-line
 prompts.
@@ -397,13 +402,13 @@ Symbol: ~modus-themes-slanted-constructs~
 
 Possible values:
 
-1. =nil= (default)
-2. =t=
+1. ~nil~ (default)
+2. ~t~
 
 The default is to not use slanted text (italics) unless it is absolutely
 necessary.
 
-With a non-nil value (=t=) choose to render more faces in slanted text.
+With a non-nil value (~t~) choose to render more faces in slanted text.
 This typically affects documentation strings and code comments.
 
 ** Option for syntax highlighting
@@ -418,7 +423,7 @@ Symbol: ~modus-themes-syntax~
 
 Possible values:
 
-1. =nil= (default)
+1. ~nil~ (default)
 2. ~faint~
 3. ~yellow-comments~
 4. ~green-strings~
@@ -467,8 +472,8 @@ Symbol: ~modus-themes-no-mixed-fonts~
 
 Possible values:
 
-1. =nil= (default)
-2. =t=
+1. ~nil~ (default)
+2. ~t~
 
 By default, the themes configure some spacing-sensitive faces like Org
 tables and code blocks to always inherit from the ~fixed-pitch~ face.
@@ -476,14 +481,14 @@ This is to ensure that those constructs remain monospaced 
even when
 users opt for a mode that remaps typeface families, such as the built-in
 {{{kbd(M-x variable-pitch-mode)}}}.  Otherwise the layout would appear
 broken, due to how spacing is done.  To disable this behaviour, set the
-option to =t=.
+option to ~t~.
 
 Users may prefer to use another package for handling mixed typeface
 configurations, rather than letting the theme do it, perhaps because a
 purpose-specific package has extra functionality.  Two possible options
 are ~org-variable-pitch~ and ~mixed-pitch~.
 
-[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org (and 
others)]].
+[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and 
others]].
 
 ** Option for links
 :properties:
@@ -497,7 +502,7 @@ Symbol: ~modus-themes-links~
 
 Possible values:
 
-1. =nil= (default)
+1. ~nil~ (default)
 2. ~faint~
 3. ~neutral-underline~
 4. ~faint-neutral-underline~
@@ -545,7 +550,7 @@ Symbol: ~modus-themes-prompts~
 
 Possible values:
 
-1. =nil= (default)
+1. ~nil~ (default)
 2. ~subtle-accented~ (~subtle~ exists for backward compatibility)
 3. ~intense-accented~ (~intense~ exists for backward compatibility)
 4. ~subtle-gray~
@@ -577,12 +582,15 @@ Symbol: ~modus-themes-mode-line~
 
 Possible values:
 
-1. =nil= (default)
+1. ~nil~ (default)
 2. ~3d~
 3. ~moody~
 4. ~borderless~
 5. ~borderless-3d~
 6. ~borderless-moody~
+7. ~accented~
+8. ~accented-3d~
+9. ~accented-moody~
 
 The default produces a two-dimensional effect both for the active and
 inactive modelines.  The differences between the two are limited to
@@ -612,6 +620,11 @@ that the inactive modelines remain visible, they apply a 
slightly more
 prominent background to them than what their counterparts do (same
 inactive background as with the default).
 
+Similarly, ~accented~, ~accented-3d~, and ~accented-moody~ correspond to the
+default (~nil~), ~3d~, and ~moody~ styles respectively, except that the active
+mode line uses a colored background instead of the standard shade of
+gray.
+
 Note that Moody does not expose any faces that the themes could style
 directly.  Instead it re-purposes existing ones to render its tabs and
 ribbons.  As such, there may be cases where the contrast ratio falls
@@ -624,10 +637,11 @@ is activated when Emacs determines that the background 
and foreground of
 the given construct are too close to each other in terms of color
 distance.  In effect, users would need to experiment with the variable
 ~face-near-same-color-threshold~ to trigger the effect.  We find that a
-value of =45000= will suffice, contrary to the default =30000=.  Do not set
-the value too high, because that would have the adverse effect of always
-overriding the default color (which has been carefully designed to be
-highly accessible).
+value of =45000= will suffice, contrary to the default =30000=.  Though for
+the ~accented-moody~ value mentioned above, that should be raised up to
+=70000=.  Do not set it too high, because it has the adverse effect of
+always overriding the default colors (which have been carefully designed
+to be highly accessible).
 
 Furthermore, because Moody expects an underline and overline instead of
 a box style, it is advised you include this in your setup:
@@ -648,7 +662,7 @@ Symbol: ~modus-themes-completions~
 
 Possible values:
 
-1. =nil= (default)
+1. ~nil~ (default)
 2. ~moderate~
 3. ~opinionated~
 
@@ -661,7 +675,7 @@ The former category encompasses Icomplete, Ido, Selectrum 
as well as
 pattern matching styles like Orderless and Flx.  The latter covers Helm,
 Ivy, and similar.
 
-A value of =nil= will respect the metaphors of each completion framework.
+A value of ~nil~ will respect the metaphors of each completion framework.
 
 Option ~moderate~ applies a combination of background and foreground that
 is fairly subtle.  For Icomplete and friends this constitutes a
@@ -677,7 +691,7 @@ packages will revert to an even more nuanced aesthetic with 
some
 additional changes to the choice of hues.
 
 To appreciate the scope of this customization option, you should spend
-some time with every one of the =nil= (default), ~moderate~, and ~opinionated~
+some time with every one of the ~nil~ (default), ~moderate~, and ~opinionated~
 possibilities.
 
 ** Option for fringe visibility
@@ -692,7 +706,7 @@ Symbol: ~modus-themes-fringes~
 
 Possible values:
 
-1. =nil= (default)
+1. ~nil~ (default)
 2. ~subtle~
 3. ~intense~
 
@@ -716,7 +730,7 @@ Symbol: ~modus-themes-lang-checkers~
 
 Possible values:
 
-1. =nil= (default)
+1. ~nil~ (default)
 2. ~subtle-foreground~
 3. ~intense-foreground~
 4. ~straight-underline~
@@ -755,25 +769,50 @@ refer to their documentation strings.
 ** Option for line highlighting (hl-line-mode)
 :properties:
 :alt_title: Line highlighting
-:description: Toggle intense style for current line highlighting
+:description: Choose style of current line (hl-line-mode)
 :custom_id: h:1dba1cfe-d079-4c13-a810-f768e8789177
 :end:
-#+vindex: modus-themes-intense-hl-line
+#+vindex: modus-themes-hl-line
 
-Symbol: ~modus-themes-intense-hl-line~
+Symbol: ~modus-themes-hl-line~
 
 Possible values:
 
-1. =nil= (default)
-2. =t=
+1. ~nil~ (default)
+2. ~intense-background~
+3. ~accented-background~
+4. ~underline-neutral~
+5. ~underline-accented~
+6. ~underline-only-neutral~
+7. ~underline-only-accented~
+
+The default is to use a subtle gray background for the current line when
+~hl-line-mode~ is enabled.
+
+The ~intense-background~ applies a more prominent gray to the background
+of the current line.
+
+With ~accented-background~ the default's subtle aesthetic is retained, but
+the background has a more colored hint.
+
+The ~underline-neutral~ combines the default subtle neutral background
+with a gray underline.
 
-The default is to use a subtle gray background for ~hl-line-mode~ and its
-global equivalent.
+Similarly, the ~underline-accented~ renders the background of the current
+line in a subtle colored background, while it also draws an accented
+underline.
 
-With a non-nil value (=t=) use a more prominent background color instead.
+Option ~underline-only-neutral~ produces a neutral underline, but does not
+use any background.
 
-This affects several packages that enable ~hl-line-mode~, such as =elfeed=
-and =mu4e=.
+While ~underline-only-accented~ also uses just an underline, only this one
+is colored.
+
+Consider setting the variable ~x-underline-at-descent-line~ to a non-nil
+value for better results with underlines.
+
+This style affects several packages that enable ~hl-line-mode~, such as
+=elfeed= and =mu4e=.
 
 ** Option for line numbers (display-line-numbers-mode)
 :properties:
@@ -787,8 +826,8 @@ Symbol: ~modus-themes-subtle-line-numbers~
 
 Possible value:
 
-1. =nil= (default)
-2. =t=
+1. ~nil~ (default)
+2. ~t~
 
 The default style for ~display-line-numbers-mode~ and its global variant
 is to apply a subtle gray background to the line numbers.  The current
@@ -799,7 +838,7 @@ Similarly, the faces for ~display-line-numbers-major-tick~ 
and its
 counterpart ~display-line-numbers-minor-tick~ use appropriate styles that
 involve a bespoke background and foreground combination.
 
-With a non-nil value (=t=), line numbers have no background of their own.
+With a non-nil value (~t~), line numbers have no background of their own.
 Instead they retain the primary background of the theme, blending with
 the rest of the buffer.  Foreground values for all relevant faces are
 updated to accommodate this aesthetic.
@@ -816,7 +855,7 @@ Symbol: ~modus-themes-paren-match~
 
 Possible values:
 
-1. =nil= (default)
+1. ~nil~ (default)
 2. ~subtle-bold~
 3. ~intense~
 4. ~intense-bold~
@@ -847,10 +886,12 @@ Symbol: ~modus-themes-region~
 
 Possible values:
 
-1. =nil= (default)
+1. ~nil~ (default)
 2. ~no-extend~
 3. ~bg-only~
 4. ~bg-only-no-extend~
+5. ~accent~
+6. ~accent-no-extend~
 
 Nil means to only use a prominent gray background with a neutral
 foreground.  The foreground overrides all syntax highlighting.  The
@@ -866,6 +907,11 @@ colors.  It extends to the edge of the window.
 Option ~bg-only-no-extend~ is a combination of the ~bg-only~ and ~no-extend~
 options.
 
+Option ~accent~ is like the default, though it uses a more colorful
+background, while ~accent-no-extend~ is the same except it draws the
+region only up to the end of each line instead of extending to the edge
+of the window.
+
 ** Option for diff buffer looks
 :properties:
 :alt_title: Diffs
@@ -878,7 +924,7 @@ Symbol: ~modus-themes-diffs~
 
 Possible values:
 
-1. =nil= (default)
+1. ~nil~ (default)
 2. ~desaturated~
 3. ~fg-only~
 4. ~bg-only~
@@ -935,7 +981,7 @@ Symbol: ~modus-themes-org-blocks~
 
 Possible values:
 
-1. =nil= (default)
+1. ~nil~ (default)
 2. ~grayscale~
 3. ~rainbow~
 
@@ -960,6 +1006,9 @@ major-mode so that the colors are applied consistently 
throughout: use
 Or start typing in each code block (inefficient at scale, but it still
 works).
 
+The extent of Org block delimiter lines is controlled by the variable
+~org-fontify-whole-block-delimiter-line~.
+
 ** Option for org-habit graph styles
 :properties:
 :alt_title: Org agenda habits
@@ -972,7 +1021,7 @@ Symbol: ~modus-themes-org-habit~
 
 Possible values:
 
-1. =nil= (default)
+1. ~nil~ (default)
 2. ~simplified~
 3. ~traffic-light~
 
@@ -1014,11 +1063,10 @@ than other customization options documented in this 
manual.
 
 Symbol: ~modus-themes-headings~
 
-Possible values, which can be specified for each heading level (examples
-further below):
+Possible values, which can be specified for each heading level N
+(examples further below):
 
-+ nil (default fallback option---covers all heading levels)
-+ =t= (default style for a single heading, when the fallback differs)
++ ~nil~ (~t~ is also available for backward compatibility)
 + ~no-bold~
 + ~line~
 + ~line-no-bold~
@@ -1058,19 +1106,19 @@ To set a uniform value for all heading levels, use this 
pattern:
       '((t . section)))
 
 ;; Default aesthetic for every heading
-(setq modus-themes-headings
-      '())
+(setq modus-themes-headings nil)
 #+end_src
 
 The default style for headings uses a fairly desaturated foreground
-value in combination with bold typographic weight.  To specify this
+color in combination with bold typographic weight.  To specify this
 style for a given level N, assuming you wish to have another fallback
-option, just specify the value =t= like this:
+option, just assign the value ~nil~ like this:
 
 #+begin_src emacs-lisp
 (setq modus-themes-headings
-      '((1 . t)
+      '((1 . nil)
         (2 . line)
+        (3) ; same as nil
         (t . rainbow-line-no-bold)))
 #+end_src
 
@@ -1122,6 +1170,9 @@ A description of all other possible styles beyond the 
default:
 
 + ~no-color-no-bold~ is like ~no-color~ but without the bold weight.
 
+Remember to also inspect relevant variables that Org provides, such as:
+~org-fontify-whole-heading-line~ and ~org-fontify-done-headline~.
+
 ** Option for scaled headings
 :properties:
 :alt_title: Scaled headings
@@ -1134,12 +1185,12 @@ Symbol: ~modus-themes-scale-headings~
 
 Possible values:
 
-1. =nil= (default)
-2. =t=
+1. ~nil~ (default)
+2. ~t~
 
 The default is to use the same size for headings and paragraph text.
 
-With a non-nil value (=t=) make headings larger in height relative to the
+With a non-nil value (~t~) make headings larger in height relative to the
 main text.  This is noticeable in modes like Org, Markdown, and Info.
 
 *** Control the scale of headings
@@ -1217,8 +1268,8 @@ Symbol: ~modus-themes-variable-pitch-ui~
 
 Possible values:
 
-1. =nil= (default)
-2. =t=
+1. ~nil~ (default)
+2. ~t~
 
 This option concerns User Interface elements that are under the direct
 control of Emacs.  In particular: the mode line, header line, tab bar,
@@ -1227,7 +1278,7 @@ and tab line.
 The default is to use the same font as the rest of Emacs, which usually
 is a monospaced family.
 
-With a non-nil value (=t=) apply a proportionately spaced typeface.  This
+With a non-nil value (~t~) apply a proportionately spaced typeface.  This
 is done by assigning the ~variable-pitch~ face to the relevant items.
 
 [[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and 
others]].
@@ -1244,13 +1295,13 @@ Symbol: ~modus-themes-variable-pitch-headings~
 
 Possible values:
 
-1. =nil= (default)
-2. =t=
+1. ~nil~ (default)
+2. ~t~
 
 The default is to use the main font family, which typically is
 monospaced.
 
-With a non-nil value (=t=) apply a proportionately spaced typeface, else
+With a non-nil value (~t~) apply a proportionately spaced typeface, else
 "variable-pitch", to headings (such as in Org mode).
 
 [[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and 
others]].
@@ -1357,7 +1408,7 @@ With that granted, let us expand the example to actually 
change the
 
 If you evaluate this form, your cursor will become blue.  But if you
 change themes, such as with ~modus-themes-toggle~, your edits will be
-lost, because the newly loaded theme will override the =:background=
+lost, because the newly loaded theme will override the ~:background~
 attribute you had assigned to that face.
 
 For such changes to persist, we need to make them after loading the
@@ -1458,7 +1509,7 @@ Getting a list of colors may have its applications, 
though what you are
 most likely interested in is how to use those variables to configure
 several faces at once.  To do so we can rely on the built-in
 ~custom-set-faces~ function, which sets face specifications for the
-special =user= theme.  That "theme" gets applied on top of regular themes
+special ~user~ theme.  That "theme" gets applied on top of regular themes
 like ~modus-operandi~ and ~modus-vivendi~.
 
 This is how it works:
@@ -1502,7 +1553,7 @@ Thus:
 [[#h:86f6906b-f090-46cc-9816-1fe8aeb38776][A theme-agnostic hook for theme 
loading]].
 
 To discover the faces defined by all loaded libraries, you may do
-{{{kbd(M-x list-faces-display)}}}.  Be warned that when you =:inherit= a face
+{{{kbd(M-x list-faces-display)}}}.  Be warned that when you ~:inherit~ a face
 you are introducing an implicit dependency, so try to avoid doing so for
 libraries other than the built-in {{{file(faces.el)}}} (or at least understand
 that things may break if you inherit from a yet-to-be-loaded face).
@@ -1524,6 +1575,68 @@ the previous section.  Adapt the above example like this:
    ...))
 #+end_src
 
+** Remap face with local value (DIY)
+:properties:
+:custom_id: h:7a93cb6f-4eca-4d56-a85c-9dcd813d6b0f
+:end:
+#+cindex: Remapping faces
+
+There are cases where we need to change the buffer-local attributes of a
+face.  This might be because we have our own minor mode that re-uses a
+face for a particular purpose, such as a line selection tool that
+activates ~hl-line-mode~, but we wish to keep it distinct from other
+buffers.  This is where ~face-remap-add-relative~ can be applied and may
+be combined with ~modus-themes-with-colors~ to deliver consistent results.
+
+[[#h:51ba3547-b8c8-40d6-ba5a-4586477fd4ae][Face specs at scale using the 
themes' palette (DIY)]].
+
+In this example we will write a simple interactive function that adjusts
+the background color of the ~region~ face.  This is the sample code:
+
+#+begin_src emacs-lisp
+(defvar my-rainbow-region-colors
+  (modus-themes-with-colors
+    `((red . ,red-subtle-bg)
+      (green . ,green-subtle-bg)
+      (yellow . ,yellow-subtle-bg)
+      (blue . ,blue-subtle-bg)
+      (magenta . ,magenta-subtle-bg)
+      (cyan . ,cyan-subtle-bg)))
+  "Sample list of color values for `my-rainbow-region'.")
+
+(defun my-rainbow-region (color)
+  "Remap buffer-local attribute of `region' using COLOR."
+  (interactive
+   (list
+    (completing-read "Pick a color: " my-rainbow-region-colors)))
+  (face-remap-add-relative
+   'region
+   `( :background ,(alist-get (intern color) my-rainbow-region-colors)
+      :foreground ,(face-attribute 'default :foreground))))
+#+end_src
+
+When ~my-rainbow-region~ is called interactively, it prompts for a color
+to use.  The list of candidates is drawn from the car of each
+association in ~my-rainbow-region-colors~ (so "red", "green", etc.).
+
+To extend this principle, we may write wrapper functions that pass a
+color directly.  Those can be useful in tandem with hooks.  Consider
+this example:
+
+#+begin_src emacs-lisp
+(defun my-rainbow-region-magenta ()
+  (my-rainbow-region 'magenta))
+
+(add-hook 'diff-mode-hook #'my-rainbow-region-magenta)
+#+end_src
+
+Whenever we enter a ~diff-mode~ buffer, we now get a magenta-colored
+region.
+
+Perhaps you may wish to generalise those findings in to a set of
+functions that also accept an arbitrary face.  We shall leave the
+experimentation up to you.
+
 ** Override colors (DIY)
 :properties:
 :custom_id: h:307d95dd-8dbd-4ece-a543-10ae86f155a6
@@ -1627,16 +1740,89 @@ with {{{kbd(M-x modus-themes-toggle)}}} will also use 
the overrides.
 Given that this is a user-level customisation, one is free to implement
 whatever color values they desire, even if the possible combinations
 fall below the minimum 7:1 contrast ratio that governs the design of the
-themes (the WCAG AAA legibility standard).  Preferences aside, it is
-advised to inspect the source code of ~modus-themes-operandi-colors~ and
-~modus-themes-vivendi-colors~ to read the inline commentary: it explains
-what the intended use of each palette subset is.
+themes (the WCAG AAA legibility standard).  Alternatively, this can also
+be done programmatically ([[#h:4589acdc-2505-41fc-9f5e-699cfc45ab00][Override 
color saturation]]).
+
+For manual interventions it is advised to inspect the source code of
+~modus-themes-operandi-colors~ and ~modus-themes-vivendi-colors~ for the
+inline commentary: it explains what the intended use of each palette
+subset is.
 
 Furthermore, users may benefit from the ~modus-themes-contrast~ function
 that we provide: [[#h:02e25930-e71a-493d-828a-8907fc80f874][test color 
combinations]].  It measures the contrast
 ratio between two color values, so it can help in overriding the palette
 (or a subset thereof) without making the end result inaccessible.
 
+** Override color saturation (DIY)
+:properties:
+:custom_id: h:4589acdc-2505-41fc-9f5e-699cfc45ab00
+:end:
+#+cindex: Change a theme's color saturation
+
+In the previous section we documented how one can override color values
+manually ([[#h:307d95dd-8dbd-4ece-a543-10ae86f155a6][Override colors]]).  Here 
we use a programmatic approach which
+leverages the built-in ~color-saturate-name~ function to adjust the
+saturation of all color values used by the active Modus theme.  Our goal
+is to prepare a counterpart of the active theme's palette that holds
+modified color values, adjusted for a percent change in saturation.  A
+positive number amplifies the effect, while a negative one will move
+towards a grayscale spectrum.
+
+We start with a function that can be either called from Lisp or invoked
+interactively.  In the former scenario, we pass to it the rate of change
+we want.  While in the latter, a minibuffer prompt asks for a number to
+apply the desired effect.  In either case, we intend to assign anew the
+value of ~modus-themes-operandi-color-overrides~ (light theme) and the
+same for ~modus-themes-vivendi-color-overrides~ (dark theme).
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-saturate (percent)
+  "Saturate current Modus theme palette overrides by PERCENT."
+  (interactive
+   (list (read-number "Saturation by percent: ")))
+  (let* ((theme (modus-themes--current-theme))
+         (palette (pcase theme
+                    ('modus-operandi modus-themes-operandi-colors)
+                    ('modus-vivendi modus-themes-vivendi-colors)
+                    (_ (error "No Modus theme is active"))))
+         (overrides (pcase theme
+                      ('modus-operandi 'modus-themes-operandi-color-overrides)
+                      ('modus-vivendi 'modus-themes-vivendi-color-overrides)
+                      (_ (error "No Modus theme is active")))))
+    (let (name cons colors)
+      (dolist (cons palette)
+        (setq name (color-saturate-name (cdr cons) percent))
+        (setq name (format "%s" name))
+        (setq cons `(,(car cons) . ,name))
+        (push cons colors))
+      (set overrides colors))
+    (pcase theme
+      ('modus-operandi (modus-themes-load-operandi))
+      ('modus-vivendi (modus-themes-load-vivendi)))))
+
+;; sample Elisp calls (or call `my-modus-themes-saturate' interactively)
+(my-modus-themes-saturate 50)
+(my-modus-themes-saturate -75)
+#+end_src
+
+Using the above has an immediate effect, as it reloads the active Modus
+theme.
+
+To disable the effect, one must reset the aforementioned variables to
+~nil~.  Or specify a command for it, such as by taking inspiration from
+the ~modus-themes-toggle~ we already provide:
+
+#+begin_src emacs-lisp
+(defun my-modus-themes-revert-overrides ()
+  "Reset palette overrides and reload active Modus theme."
+  (interactive)
+  (setq modus-themes-operandi-color-overrides nil
+        modus-themes-vivendi-color-overrides nil)
+  (pcase (modus-themes--current-theme)
+    ('modus-operandi (modus-themes-load-operandi))
+    ('modus-vivendi (modus-themes-load-vivendi))))
+#+end_src
+
 ** Font configurations for Org and others (DIY)
 :properties:
 :custom_id: h:defcf4fc-8fa8-4c29-b12e-7119582cc929
@@ -1677,9 +1863,9 @@ reading the doc string of ~set-face-attribute~):
 (set-face-attribute 'fixed-pitch nil :family "DejaVu Sans Mono" :height 1.0)
 #+end_src
 
-Note the differences in the =:height= property.  The =default= face must
+Note the differences in the ~:height~ property.  The ~default~ face must
 specify an absolute value, which is the point size × 10.  So if you want
-to use a font at point size =11=, you set the height to =110=.[fn:: =:height=
+to use a font at point size =11=, you set the height to =110=.[fn:: ~:height~
 values do not need to be rounded to multiples of ten: the likes of =115=
 are perfectly valid—some typefaces will change to account for those
 finer increments.]  Whereas every other face must have a value that is
@@ -1689,6 +1875,8 @@ importance: it ensures that all fonts can scale 
gracefully when using
 something like the ~text-scale-adjust~ command which only operates on the
 base font size (i.e. the ~default~ face's absolute height).
 
+[[#h:e6c5451f-6763-4be7-8fdb-b4706a422a4c][Note for EWW and Elfeed fonts (SHR 
fonts)]].
+
 ** Custom Org user faces (DIY)
 :properties:
 :custom_id: h:89f0678d-c5c3-4a57-a526-668b2bb2d7ad
@@ -1871,6 +2059,68 @@ package:
   (circadian-setup))
 #+end_src
 
+** Backdrop for pdf-tools (DIY)
+:properties:
+:custom_id: h:ff69dfe1-29c0-447a-915c-b5ff7c5509cd
+:end:
+#+cindex: Remapping pdf-tools backdrop
+
+Most PDF files use a white background for their page, making it
+impossible to discern the file's boundaries in the buffer while using
+the Modus Operandi theme.  To introduce a distinction between the
+buffer's backdrop and the PDF page's background, the former must be
+rendered as some shade of gray.  Ideally, ~pdf-tools~ would provide a face
+that the themes could support directly, though this does not seem to be
+the case for the time being.  We must thus employ the face remapping
+technique that is documented elsewhere in this document to change the
+buffer-local value of the ~default~ face.
+
+[[#h:7a93cb6f-4eca-4d56-a85c-9dcd813d6b0f][Remap face with local value (DIY)]].
+
+To remap the buffer's backdrop, we start with a function like this one:
+
+#+begin_src emacs-lisp
+(defun my-pdf-tools-backdrop ()
+  (face-remap-add-relative
+   'default
+   `(:background ,(modus-themes-color 'bg-alt))))
+
+(add-hook 'pdf-tools-enabled-hook #'my-pdf-tools-backdrop)
+#+end_src
+
+The idea is to assign that function to a hook that gets called when
+~pdf-tools~ renders the document: ~pdf-tools-enabled-hook~.  This is enough
+when you only use one theme.  However it has the downside of setting the
+background color value only at render time.  In other words, the face
+remapping function does not get evaluated anew whenever the theme
+changes, such as upon invoking {{{kbd(M-x modus-themes-toggle)}}}.
+
+To have our face remapping adapt gracefully while switching between the
+Modus themes, we need to also account for the current theme and control
+the activation of ~pdf-view-midnight-minor-mode~.  To which end we arrive
+at something like the following, which builds on the above example:
+
+#+begin_src emacs-lisp
+(defun my-pdf-tools-backdrop ()
+  (face-remap-add-relative
+   'default
+   `(:background ,(modus-themes-color 'bg-alt))))
+
+(defun my-pdf-tools-midnight-mode-toggle ()
+  (when (derived-mode-p 'pdf-view-mode)
+    (if (eq (car custom-enabled-themes) 'modus-vivendi)
+        (pdf-view-midnight-minor-mode 1)
+      (pdf-view-midnight-minor-mode -1))
+    (my-pdf-tools-backdrop)))
+
+(add-hook 'pdf-tools-enabled-hook #'my-pdf-tools-midnight-mode-toggle)
+(add-hook 'modus-themes-after-load-theme-hook 
#'my-pdf-tools-midnight-mode-toggle)
+#+end_src
+
+With those in place, PDFs have a distinct backdrop for their page, while
+they automatically switch to their dark mode when ~modus-themes-toggle~ is
+called from inside a buffer whose major-mode is ~pdf-view-mode~.
+
 ** A theme-agnostic hook for theme loading (DIY)
 :properties:
 :custom_id: h:86f6906b-f090-46cc-9816-1fe8aeb38776
@@ -1976,6 +2226,7 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + compilation-mode
 + completions
 + consult
++ corfu
 + counsel*
 + counsel-css
 + counsel-notmuch
@@ -2018,8 +2269,9 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + eldoc-box
 + elfeed
 + elfeed-score
++ embark
 + emms
-+ enhanced-ruby-mode
++ enh-ruby-mode (enhanced-ruby-mode)
 + epa
 + equake
 + erc
@@ -2149,6 +2401,7 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + outline-minor-faces
 + package (what you get with {{{kbd(M-x list-packages)}}})
 + page-break-lines
++ pandoc-mode
 + paradox
 + paren-face
 + parrot
@@ -2206,7 +2459,11 @@ have lots of extensions, so the "full support" may not 
be 100% true…
 + 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
@@ -2221,6 +2478,7 @@ have lots of extensions, so the "full support" may not be 
100% true…
 + vc (built-in mode line status for version control)
 + vc-annotate (the out put of {{{kbd(C-x v g)}}})
 + vdiff
++ vertico
 + vimish-fold
 + visible-mark
 + visual-regexp
@@ -2274,6 +2532,42 @@ inherit from some basic faces.  Please confirm.
 This section covers information that may be of interest to users of
 individual packages.
 
+** Note for dimmer.el
+:properties:
+:custom_id: h:8eb4b758-d318-4480-9ead-357a571beb93
+:end:
+
+The {{{file(dimmer.el)}}} library by Neil Okamoto can be configured to
+automatically dim the colors of inactive Emacs windows.  To guarantee
+consistent results with the Modus themes, we suggest some tweaks to the
+default styles, such as in this minimal setup:
+
+#+begin_src emacs-lisp
+(use-package dimmer
+  :config
+  (setq dimmer-fraction 0.3)
+  (setq dimmer-adjustment-mode :foreground)
+  (setq dimmer-use-colorspace :rgb)
+
+  (dimmer-mode 1))
+#+end_src
+
+Of the above, we strongly recommend the RGB color space because it is
+the one that remains faithful to the hueness of the colors used by the
+themes.  Whereas the default CIELAB space has a tendency to distort
+colors in addition to applying the dim effect, which can be somewhat
+disorienting.
+
+The value of the ~dimmer-fraction~ has been selected empirically.  Users
+might prefer to tweak it further (increasing it makes the dim effect
+more pronounced).
+
+Changing the ~dimmer-adjustment-mode~ is a matter of preference.  Though
+because the Modus themes use black and white as their base colors, any
+other value for that variable will turn the main background gray.  This
+inadvertently leads to the opposite of the intended utility of this
+package: it draws too much attention to unfocused windows.
+
 ** Note for display-fill-column-indicator-mode
 :properties:
 :custom_id: h:2a602816-bc1b-45bf-9675-4cbbd7bf6cab
@@ -2521,6 +2815,21 @@ specifications the webpage provides.
 
 Consult {{{kbd(C-h v shr-use-colors)}}}.
 
+
+** Note for EWW and Elfeed fonts (SHR fonts)
+:properties:
+:custom_id: h:e6c5451f-6763-4be7-8fdb-b4706a422a4c
+:end:
+
+EWW and Elfeed rely on the Simple HTML Renderer to display their
+content.  The {{{file(shr.el)}}} library contains the variable ~shr-use-fonts~
+that controls whether the text in the buffer is set to a ~variable-pitch~
+typeface (proportionately spaced) or if just retains whatever the
+default font family is.  Its default value is non-nil, which means that
+~variable-pitch~ is applied.
+
+[[#h:defcf4fc-8fa8-4c29-b12e-7119582cc929][Font configurations for Org and 
others]].
+
 ** Note for Helm grep
 :properties:
 :custom_id: h:d28879a2-8e4b-4525-986e-14c0f873d229
@@ -2748,26 +3057,28 @@ The Modus themes are a collective effort.  Every bit of 
work matters.
 
 + Contributions to code or documentation :: Anders Johansson, Basil
   L.{{{space()}}} Contovounesios, Carlo Zancanaro, Eli Zaretskii, Kostadin
-  Ninev, Madhavan Krishnan, Markus Beppler, Matthew Stevenson, Nicolas
-  De Jaeghere, Shreyas Ragavan, Stefan Kangas, Vincent Murphy, Xinglu
-  Chen.
+  Ninev, Madhavan Krishnan, Markus Beppler, Matthew Stevenson, Mauro
+  Aranda, Nicolas De Jaeghere, Shreyas Ragavan, Stefan Kangas, Vincent
+  Murphy, Xinglu Chen.
 
 + Ideas and user feedback :: Aaron Jensen, Adam Spiers, Adrian Manea,
   Alex Griffin, Alex Peitsinis, Alexey Shmalko, Alok Singh, Anders
   Johansson, André Alexandre Gomes, Arif Rezai, Basil L.{{{space()}}}
   Contovounesios, Burgess Chang, Christian Tietze, Christopher Dimech,
   Damien Cassou, Daniel Mendler, Dario Gjorgjevski, David Edmondson,
-  Davor Rotim, Divan Santana, Gerry Agbobada, Gianluca Recchia, Gustavo
-  Barros, Hörmetjan Yiltiz, Ilja Kocken, Iris Garcia, Jeremy Friesen,
-  John Haman, Joshua O'Connor, Kevin Fleming, Kostadin Ninev, Len Trigg,
-  Manuel Uberti, Mark Burton, Markus Beppler, Michael Goldenberg, Morgan
-  Smith, Murilo Pereira, Nicolas De Jaeghere, Paul Poloskov, Pete
-  Kazmier, Peter Wu, Philip K., Pierre Téchoueyres, Roman Rudakov, Ryan
-  Phillips, Sam Kleinman, Shreyas Ragavan, Simon Pugnet, Tassilo Horn,
-  Thibaut Verron, Trey Merkley, Togan Muftuoglu, Toon Claes, Uri Sharf,
-  Utkarsh Singh, Vincent Foley.  As well as users: Ben, CsBigDataHub1,
-  Emacs Contrib, Eugene, Fourchaux, Fredrik, Moesasji, Nick, TheBlob42,
-  bepolymathe, doolio, fleimgruber, iSeeU, jixiuf, okamsn.
+  Davor Rotim, Divan Santana, Emanuele Michele Alberto Monterosso,
+  Farasha Euker, Gerry Agbobada, Gianluca Recchia, Gustavo Barros,
+  Hörmetjan Yiltiz, Ilja Kocken, Iris Garcia, Jeremy Friesen, John
+  Haman, Joshua O'Connor, Kevin Fleming, Kévin Le Gouguec, Kostadin
+  Ninev, Len Trigg, Manuel Uberti, Mark Burton, Markus Beppler, Mauro
+  Aranda, Michael Goldenberg, Morgan Smith, Murilo Pereira, Nicky van
+  Foreest, Nicolas De Jaeghere, Paul Poloskov, Pete Kazmier, Peter Wu,
+  Philip K., Pierre Téchoueyres, Roman Rudakov, Ryan Phillips, Sam
+  Kleinman, Shreyas Ragavan, Simon Pugnet, Tassilo Horn, Thibaut Verron,
+  Trey Merkley, Togan Muftuoglu, Toon Claes, Uri Sharf, Utkarsh Singh,
+  Vincent Foley.  As well as users: Ben, CsBigDataHub1, Emacs Contrib,
+  Eugene, Fourchaux, Fredrik, Moesasji, Nick, TheBlob42, Trey,
+  bepolymathe, doolio, fleimgruber, iSeeU, jixiuf, okamsn, pRot0ta1p.
 
 + Packaging :: Basil L.{{{space()}}} Contovounesios, Eli Zaretskii, Glenn
   Morris, Mauro Aranda, Richard Stallman, Stefan Kangas (core Emacs),
@@ -2819,6 +3130,7 @@ And here are the canonical sources of this project's 
documentation:
 #+texinfo: @include doclicense.texi
 
 #+begin_export html
+<pre>
 
                 GNU Free Documentation License
                  Version 1.3, 3 November 2008
@@ -3270,6 +3582,7 @@ If your document contains nontrivial examples of program 
code, we
 recommend releasing these examples in parallel under your choice of
 free software license, such as the GNU General Public License,
 to permit their use in free software.
+</pre>
 #+end_export
 
 #+html: <!--
diff --git a/doc/misc/tramp.texi b/doc/misc/tramp.texi
index 40245ac..e0f648f 100644
--- a/doc/misc/tramp.texi
+++ b/doc/misc/tramp.texi
@@ -5095,35 +5095,21 @@ two forms in your @file{~/.emacs} after loading the 
@code{tramp} and
 
 @item
 I get a warning @samp{Tramp has been compiled with Emacs a.b, this is Emacs 
c.d}
+@item
+I get an error @samp{tramp-file-name-handler: Invalid function:
+tramp-compat-with-mutex}
 
 @value{tramp} comes with compatibility code for different Emacs
 versions.  When you see this warning, you don't use the Emacs built-in
 version of @value{tramp}.  In case you have installed @value{tramp}
-from GNU ELPA, you must delete and reinstall it.
+from GNU ELPA, see the package README file for instructions how to
+recompile it.
 @ifset installchapter
 In case you have installed it from its Git repository, @ref{Recompilation}.
 @end ifset
 
 
 @item
-I get an error @samp{tramp-file-name-handler: Invalid function:
-tramp-compat-with-mutex}
-
-Likely, you have a running Emacs session with loaded @value{tramp},
-and you try to upgrade it to another version from GNU ELPA.  Since
-@value{tramp} is not forward compatible, you must unload / reload it.
-Try the following steps:
-
-@example
-@kbd{M-x tramp-unload-tramp @key{RET}}
-@kbd{M-x load-library @key{RET} tramp @key{RET}}
-@end example
-
-If this doesn't work, you must restart Emacs with proper
-@code{load-path} for the new @value{tramp} version.
-
-
-@item
 I get an error @samp{Remote file error: Forbidden reentrant call of Tramp}
 
 @vindex remote-file-error
diff --git a/etc/NEWS b/etc/NEWS
index 01f4a44..fb0ec90 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -1572,6 +1572,13 @@ will match the font size in use where it is embedded.
 
 This feature relies on librsvg 2.48 or above being available.
 
++++
+*** Image properties support 'em' sizes.
+Size image properties, for example ':height', ':max-height', etc., can
+be given a cons of the form '(SIZE . em)', where SIZE is an integer or
+float which is multiplied by the font size to calculate the image
+size, and em is a symbol.
+
 ** EWW
 
 +++
@@ -2678,6 +2685,11 @@ argument ELLIPSIS, will now indicate truncation using 
'…' when
 the selected frame can display it, and using "..." otherwise.
 
 +++
+** 'string-width' now accepts two optional arguments FROM and TO.
+This allows calculating the width of a substring without consing a
+new string.
+
++++
 ** New command 'make-directory-autoloads'.
 This does the same as the old command 'update-directory-autoloads',
 but has different semantics: Instead of passing in the output file via
@@ -2943,6 +2955,12 @@ arrays nor objects.
 The special events 'dbus-event' and 'file-notify' are now ignored in
 'while-no-input' when added to this variable.
 
++++
+** 'condition-case' now allows for a success handler.
+It is written as (:success BODY...) where BODY is executed whenever
+the protected form terminates without error, with the specified
+variable bound to the the value of the protected form.
+
 
 * Changes in Emacs 28.1 on Non-Free Operating Systems
 
diff --git a/etc/themes/manoj-dark-theme.el b/etc/themes/manoj-dark-theme.el
index 1f4891c..5a52711 100644
--- a/etc/themes/manoj-dark-theme.el
+++ b/etc/themes/manoj-dark-theme.el
@@ -1,4 +1,4 @@
-;;; manoj-dark.el --- A dark theme from Manoj  -*- lexical-binding:t -*-
+;;; manoj-dark-theme.el --- A dark theme from Manoj  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
diff --git a/etc/themes/modus-operandi-theme.el 
b/etc/themes/modus-operandi-theme.el
index 64763a1..77c2e11 100644
--- a/etc/themes/modus-operandi-theme.el
+++ b/etc/themes/modus-operandi-theme.el
@@ -4,7 +4,7 @@
 
 ;; Author: Protesilaos Stavrou <info@protesilaos.com>
 ;; URL: https://gitlab.com/protesilaos/modus-themes
-;; Version: 1.2.3
+;; Version: 1.3.2
 ;; Package-Requires: ((emacs "26.1"))
 ;; Keywords: faces, theme, accessibility
 
@@ -52,6 +52,9 @@
 
 (eval-and-compile
   (unless (and (fboundp 'require-theme)
+               load-file-name
+               (equal (file-name-directory load-file-name)
+                      (expand-file-name "themes/" data-directory))
                (require-theme 'modus-themes t))
     (require 'modus-themes)))
 
diff --git a/etc/themes/modus-themes.el b/etc/themes/modus-themes.el
index ad20707..08e634e 100644
--- a/etc/themes/modus-themes.el
+++ b/etc/themes/modus-themes.el
@@ -4,7 +4,8 @@
 
 ;; Author: Protesilaos Stavrou <info@protesilaos.com>
 ;; URL: https://gitlab.com/protesilaos/modus-themes
-;; Version: 1.2.4
+;; Version: 1.3.2
+;; Last-Modified: <2021-04-18 06:25:05 +0300>
 ;; Package-Requires: ((emacs "26.1"))
 ;; Keywords: faces, theme, accessibility
 
@@ -50,7 +51,7 @@
 ;;     modus-themes-mode-line                      (choice)
 ;;     modus-themes-diffs                          (choice)
 ;;     modus-themes-syntax                         (choice)
-;;     modus-themes-intense-hl-line                (boolean)
+;;     modus-themes-hl-line                        (choice)
 ;;     modus-themes-subtle-line-numbers            (boolean)
 ;;     modus-themes-paren-match                    (choice)
 ;;     modus-themes-region                         (choice)
@@ -112,6 +113,7 @@
 ;;     compilation-mode
 ;;     completions
 ;;     consult
+;;     corfu
 ;;     counsel
 ;;     counsel-css
 ;;     counsel-notmuch
@@ -155,8 +157,9 @@
 ;;     eldoc-box
 ;;     elfeed
 ;;     elfeed-score
+;;     embark
 ;;     emms
-;;     enhanced-ruby-mode
+;;     enh-ruby-mode (enhanced-ruby-mode)
 ;;     epa
 ;;     equake
 ;;     erc
@@ -284,6 +287,7 @@
 ;;     outline-minor-faces
 ;;     package (M-x list-packages)
 ;;     page-break-lines
+;;     pandoc-mode
 ;;     paradox
 ;;     paren-face
 ;;     parrot
@@ -339,10 +343,12 @@
 ;;     swoop
 ;;     sx
 ;;     symbol-overlay
+;;     syslog-mode
+;;     tab-bar-groups
 ;;     tab-bar-mode
 ;;     tab-line-mode
-;;     syslog-mode
 ;;     table (built-in table.el)
+;;     telega
 ;;     telephone-line
 ;;     terraform-mode
 ;;     term
@@ -357,6 +363,7 @@
 ;;     vc (built-in mode line status for version control)
 ;;     vc-annotate (C-x v g)
 ;;     vdiff
+;;     vertico
 ;;     vimish-fold
 ;;     visible-mark
 ;;     visual-regexp
@@ -389,7 +396,7 @@
 ;;; News:
 ;;
 ;; Users updating from older versions to >= 1.0.0, are advised to read
-;; the anouncement on the emacs-devel mailing list:
+;; the announcement on the emacs-devel mailing list:
 ;; <https://lists.gnu.org/archive/html/emacs-devel/2021-03/msg00300.html>.
 ;;
 ;; The web page of the change log is also available:
@@ -434,9 +441,11 @@
     (bg-alt . "#f0f0f0") (fg-alt . "#505050")
     ;; specifically for on/off states and must be combined with
     ;; themselves, though the backgrounds are also meant to be used with
-    ;; other "active" values, defined further below
+    ;; other "active" values, defined further below; bg-active-accent
+    ;; can work as a substitute for bg-active
     (bg-active . "#d7d7d7") (fg-active . "#0a0a0a")
     (bg-inactive . "#efefef") (fg-inactive . "#404148")
+    (bg-active-accent . "#d0d6ff")
     ;; these special values are intended as alternatives to the base
     ;; values for cases where we need to avoid confusion between the
     ;; highlighted constructs; they must either be used as pairs based
@@ -496,20 +505,20 @@
     ;; those foregrounds are meant exclusively for bg-active, bg-inactive
     (red-active . "#8a0000")
     (green-active . "#004c2e")
-    (yellow-active . "#702d1f")
+    (yellow-active . "#702f00")
     (blue-active . "#0030b4")
     (magenta-active . "#5c2092")
     (cyan-active . "#003f8a")
     ;; the "subtle" values below be combined with fg-dim, while the
     ;; "intense" should be paired with fg-main
     (red-subtle-bg . "#f2b0a2")
-    (red-intense-bg . "#ff8892")
+    (red-intense-bg . "#ff9f9f")
     (green-subtle-bg . "#aecf90")
     (green-intense-bg . "#5ada88")
     (yellow-subtle-bg . "#e4c340")
     (yellow-intense-bg . "#f5df23")
     (blue-subtle-bg . "#b5d0ff")
-    (blue-intense-bg . "#6aaeff")
+    (blue-intense-bg . "#77baff")
     (magenta-subtle-bg . "#f0d3ff")
     (magenta-intense-bg . "#d5baff")
     (cyan-subtle-bg . "#c0efff")
@@ -544,7 +553,7 @@
     (red-refine-bg . "#ffcccc") (red-refine-fg . "#780000")
     (green-refine-bg . "#aceaac") (green-refine-fg . "#004c00")
     (yellow-refine-bg . "#fff29a") (yellow-refine-fg . "#604000")
-    (blue-refine-bg . "#8ac7ff") (blue-refine-fg . "#002288")
+    (blue-refine-bg . "#8fcfff") (blue-refine-fg . "#002f88")
     (magenta-refine-bg . "#ffccff") (magenta-refine-fg . "#770077")
     (cyan-refine-bg . "#8eecf4") (cyan-refine-fg . "#004850")
     ;; the "nuanced" backgrounds can be combined with all of the above
@@ -563,22 +572,22 @@
     ;; work with all accents that cover those two, plus bg-main
     ;;
     ;; bg-hl-alt and bg-hl-alt-intense should only be used when no
-    ;; other greyscale or fairly neutral background is available to
+    ;; other grayscale or fairly neutral background is available to
     ;; properly draw attention to a given construct
     ;;
     ;; bg-header is between bg-active and bg-inactive, so it
     ;; can be combined with any of the "active" values, plus the
     ;; "special" and base foreground colors
     ;;
-    ;; bg-paren-match, bg-paren-match-intense, bg-region and
-    ;; bg-tab-active must be combined with fg-main, while
-    ;; bg-tab-inactive should be combined with fg-dim, whereas
+    ;; bg-paren-match, bg-paren-match-intense, bg-region,
+    ;; bg-region-accent and bg-tab-active must be combined with fg-main,
+    ;; while bg-tab-inactive should be combined with fg-dim, whereas
     ;; bg-tab-inactive-alt goes together with fg-main
     ;;
     ;; bg-tab-bar is only intended for the bar that holds the tabs and
     ;; can only be combined with fg-main
     ;;
-    ;; fg-tab-active is meant to be combined with bg-tab-active,
+    ;; fg-tab-accent is meant to be combined with bg-tab-active,
     ;; though only for styling special elements, such as underlining
     ;; the current tab
     ;;
@@ -606,12 +615,22 @@
     (bg-paren-match . "#e0af82")
     (bg-paren-match-intense . "#c488ff")
     (bg-region . "#bcbcbc")
+    (bg-region-accent . "#afafef")
 
     (bg-tab-bar . "#d5d5d5")
     (bg-tab-active . "#f6f6f6")
     (bg-tab-inactive . "#bdbdbd")
     (bg-tab-inactive-alt . "#999999")
-    (fg-tab-active . "#30169e")
+    (fg-tab-accent . "#30169e")
+
+    (red-tab . "#680000")
+    (green-tab . "#003900")
+    (yellow-tab . "#393000")
+    (orange-tab . "#502300")
+    (blue-tab . "#000080")
+    (cyan-tab . "#052f60")
+    (magenta-tab . "#5f004d")
+    (purple-tab . "#400487")
 
     (fg-escape-char-construct . "#8b1030")
     (fg-escape-char-backslash . "#654d0f")
@@ -651,10 +670,6 @@
     (bg-diff-focus-changed . "#ecdfbf") (fg-diff-focus-changed . "#392900")
     (bg-diff-focus-removed . "#efcbcf") (fg-diff-focus-removed . "#4a0000")
 
-    (bg-diff-neutral-0 . "#979797") (fg-diff-neutral-0 . "#040404")
-    (bg-diff-neutral-1 . "#b0b0b0") (fg-diff-neutral-1 . "#252525")
-    (bg-diff-neutral-2 . "#cccccc") (fg-diff-neutral-2 . "#3a3a3a")
-
     (bg-mark-sel . "#a0f0cf") (fg-mark-sel . "#005040")
     (bg-mark-del . "#ffccbb") (fg-mark-del . "#840040")
     (bg-mark-alt . "#f5d88f") (fg-mark-alt . "#782900"))
@@ -677,13 +692,15 @@ symbol and the latter as a string.")
 (defconst modus-themes-vivendi-colors
   '(;; base values
     (bg-main . "#000000") (fg-main . "#ffffff")
-    (bg-dim . "#110b11") (fg-dim . "#e0e6f0")
-    (bg-alt . "#181a20") (fg-alt . "#a8a8a8")
+    (bg-dim . "#100f10") (fg-dim . "#e0e6f0")
+    (bg-alt . "#191a1b") (fg-alt . "#a8a8a8")
     ;; specifically for on/off states and must be combined with
     ;; themselves, though the backgrounds are also meant to be used with
-    ;; other "active" values, defined further below
+    ;; other "active" values, defined further below; bg-active-accent
+    ;; can work as a substitute for bg-active
     (bg-active . "#323232") (fg-active . "#f4f4f4")
     (bg-inactive . "#1e1e1e") (fg-inactive . "#bfc0c4")
+    (bg-active-accent . "#2a2a66")
     ;; these special values are intended as alternatives to the base
     ;; values for cases where we need to avoid confusion between the
     ;; highlighted constructs; they must either be used as pairs based
@@ -791,7 +808,7 @@ symbol and the latter as a string.")
     (red-refine-bg . "#77002a") (red-refine-fg . "#ffb9ab")
     (green-refine-bg . "#00422a") (green-refine-fg . "#9ff0cf")
     (yellow-refine-bg . "#693200") (yellow-refine-fg . "#e2d980")
-    (blue-refine-bg . "#242679") (blue-refine-fg . "#8ec6ff")
+    (blue-refine-bg . "#242679") (blue-refine-fg . "#8ecfff")
     (magenta-refine-bg . "#71206a") (magenta-refine-fg . "#ffcaf0")
     (cyan-refine-bg . "#004065") (cyan-refine-fg . "#8ae4f2")
     ;; the "nuanced" backgrounds can be combined with all of the above
@@ -810,22 +827,22 @@ symbol and the latter as a string.")
     ;; work with all accents that cover those two, plus bg-main
     ;;
     ;; bg-hl-alt and bg-hl-alt-intense should only be used when no
-    ;; other greyscale or fairly neutral background is available to
+    ;; other grayscale or fairly neutral background is available to
     ;; properly draw attention to a given construct
     ;;
     ;; bg-header is between bg-active and bg-inactive, so it
     ;; can be combined with any of the "active" values, plus the
     ;; "special" and base foreground colors
     ;;
-    ;; bg-paren-match, bg-paren-match-intense, bg-region and
-    ;; bg-tab-active must be combined with fg-main, while
-    ;; bg-tab-inactive should be combined with fg-dim, whereas
+    ;; bg-paren-match, bg-paren-match-intense, bg-region,
+    ;; bg-region-accent and bg-tab-active must be combined with fg-main,
+    ;; while bg-tab-inactive should be combined with fg-dim, whereas
     ;; bg-tab-inactive-alt goes together with fg-main
     ;;
     ;; bg-tab-bar is only intended for the bar that holds the tabs and
     ;; can only be combined with fg-main
     ;;
-    ;; fg-tab-active is meant to be combined with bg-tab-active,
+    ;; fg-tab-accent is meant to be combined with bg-tab-active,
     ;; though only for styling special elements, such as underlining
     ;; the current tab
     ;;
@@ -853,12 +870,22 @@ symbol and the latter as a string.")
     (bg-paren-match . "#5f362f")
     (bg-paren-match-intense . "#7416b5")
     (bg-region . "#3c3c3c")
+    (bg-region-accent . "#4f3d88")
 
     (bg-tab-bar . "#2c2c2c")
     (bg-tab-active . "#0e0e0e")
     (bg-tab-inactive . "#3d3d3d")
     (bg-tab-inactive-alt . "#595959")
-    (fg-tab-active . "#5ac3cf")
+    (fg-tab-accent . "#5ac3cf")
+
+    (red-tab . "#ffc0bf")
+    (green-tab . "#88ef88")
+    (yellow-tab . "#d2e580")
+    (orange-tab . "#f5ca80")
+    (blue-tab . "#92d9ff")
+    (cyan-tab . "#60e7e0")
+    (magenta-tab . "#ffb8ff")
+    (purple-tab . "#cfcaff")
 
     (fg-escape-char-construct . "#e7a59a")
     (fg-escape-char-backslash . "#abab00")
@@ -898,10 +925,6 @@ symbol and the latter as a string.")
     (bg-diff-focus-changed . "#4a3a10") (fg-diff-focus-changed . "#d0daaf")
     (bg-diff-focus-removed . "#5e2526") (fg-diff-focus-removed . "#eebdba")
 
-    (bg-diff-neutral-0 . "#575757") (fg-diff-neutral-0 . "#fcfcfc")
-    (bg-diff-neutral-1 . "#454545") (fg-diff-neutral-1 . "#dddddd")
-    (bg-diff-neutral-2 . "#313131") (fg-diff-neutral-2 . "#bfbfbf")
-
     (bg-mark-sel . "#002f2f") (fg-mark-sel . "#60cfa2")
     (bg-mark-del . "#5a0000") (fg-mark-del . "#ff99aa")
     (bg-mark-alt . "#3f2210") (fg-mark-alt . "#f0aa20"))
@@ -916,219 +939,219 @@ symbol and the latter as a string.")
 ;; These faces are used internally to ensure consistency between various
 ;; groups and to streamline the evaluation of relevant customization
 ;; options.
-(defface modus-theme-subtle-red nil
+(defface modus-themes-subtle-red nil
   "Subtle red background combined with a dimmed foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-subtle-green nil
+(defface modus-themes-subtle-green nil
   "Subtle green background combined with a dimmed foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-subtle-yellow nil
+(defface modus-themes-subtle-yellow nil
   "Subtle yellow background combined with a dimmed foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-subtle-blue nil
+(defface modus-themes-subtle-blue nil
   "Subtle blue background combined with a dimmed foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-subtle-magenta nil
+(defface modus-themes-subtle-magenta nil
   "Subtle magenta background combined with a dimmed foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-subtle-cyan nil
+(defface modus-themes-subtle-cyan nil
   "Subtle cyan background combined with a dimmed foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-subtle-neutral nil
+(defface modus-themes-subtle-neutral nil
   "Subtle gray background combined with a dimmed foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-intense-red nil
+(defface modus-themes-intense-red nil
   "Intense red background combined with the main foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-intense-green nil
+(defface modus-themes-intense-green nil
   "Intense green background combined with the main foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-intense-yellow nil
+(defface modus-themes-intense-yellow nil
   "Intense yellow background combined with the main foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-intense-blue nil
+(defface modus-themes-intense-blue nil
   "Intense blue background combined with the main foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-intense-magenta nil
+(defface modus-themes-intense-magenta nil
   "Intense magenta background combined with the main foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-intense-cyan nil
+(defface modus-themes-intense-cyan nil
   "Intense cyan background combined with the main foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-intense-neutral nil
+(defface modus-themes-intense-neutral nil
   "Intense gray background combined with the main foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-refine-red nil
+(defface modus-themes-refine-red nil
   "Combination of accented red background and foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-refine-green nil
+(defface modus-themes-refine-green nil
   "Combination of accented green background and foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-refine-yellow nil
+(defface modus-themes-refine-yellow nil
   "Combination of accented yellow background and foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-refine-blue nil
+(defface modus-themes-refine-blue nil
   "Combination of accented blue background and foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-refine-magenta nil
+(defface modus-themes-refine-magenta nil
   "Combination of accented magenta background and foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-refine-cyan nil
+(defface modus-themes-refine-cyan nil
   "Combination of accented cyan background and foreground.
 This is used for general purpose highlighting, mostly in buffers
 or for completion interfaces.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-active-red nil
+(defface modus-themes-active-red nil
   "A red background meant for use on the modeline or similar.
 This is combined with the modelines primary foreground value.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-active-green nil
+(defface modus-themes-active-green nil
   "A green background meant for use on the modeline or similar.
 This is combined with the modelines primary foreground value.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-active-yellow nil
+(defface modus-themes-active-yellow nil
   "A yellow background meant for use on the modeline or similar.
 This is combined with the modelines primary foreground value.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-active-blue nil
+(defface modus-themes-active-blue nil
   "A blue background meant for use on the modeline or similar.
 This is combined with the modelines primary foreground value.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-active-magenta nil
+(defface modus-themes-active-magenta nil
   "A magenta background meant for use on the modeline or similar.
 This is combined with the modelines primary foreground value.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-active-cyan nil
+(defface modus-themes-active-cyan nil
   "A cyan background meant for use on the modeline or similar.
 This is combined with the modelines primary foreground value.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-fringe-red nil
+(defface modus-themes-fringe-red nil
   "A red background meant for use on the fringe or similar.
 This is combined with the main foreground value.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-fringe-green nil
+(defface modus-themes-fringe-green nil
   "A green background meant for use on the fringe or similar.
 This is combined with the main foreground value.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-fringe-yellow nil
+(defface modus-themes-fringe-yellow nil
   "A yellow background meant for use on the fringe or similar.
 This is combined with the main foreground value.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-fringe-blue nil
+(defface modus-themes-fringe-blue nil
   "A blue background meant for use on the fringe or similar.
 This is combined with the main foreground value.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-fringe-magenta nil
+(defface modus-themes-fringe-magenta nil
   "A magenta background meant for use on the fringe or similar.
 This is combined with the main foreground value.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-fringe-cyan nil
+(defface modus-themes-fringe-cyan nil
   "A cyan background meant for use on the fringe or similar.
 This is combined with the main foreground value.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-nuanced-red nil
+(defface modus-themes-nuanced-red nil
   "A nuanced red background.
 This does not specify a foreground of its own.  Instead it is meant to
 serve as the backdrop for elements such as Org blocks, headings, and any
@@ -1136,7 +1159,7 @@ other surface that needs to retain the colors on display.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-nuanced-green nil
+(defface modus-themes-nuanced-green nil
   "A nuanced green background.
 This does not specify a foreground of its own.  Instead it is meant to
 serve as the backdrop for elements such as Org blocks, headings, and any
@@ -1144,7 +1167,7 @@ other surface that needs to retain the colors on display.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-nuanced-yellow nil
+(defface modus-themes-nuanced-yellow nil
   "A nuanced yellow background.
 This does not specify a foreground of its own.  Instead it is meant to
 serve as the backdrop for elements such as Org blocks, headings, and any
@@ -1152,7 +1175,7 @@ other surface that needs to retain the colors on display.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-nuanced-blue nil
+(defface modus-themes-nuanced-blue nil
   "A nuanced blue background.
 This does not specify a foreground of its own.  Instead it is meant to
 serve as the backdrop for elements such as Org blocks, headings, and any
@@ -1160,7 +1183,7 @@ other surface that needs to retain the colors on display.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-nuanced-magenta nil
+(defface modus-themes-nuanced-magenta nil
   "A nuanced magenta background.
 This does not specify a foreground of its own.  Instead it is meant to
 serve as the backdrop for elements such as Org blocks, headings, and any
@@ -1168,7 +1191,7 @@ other surface that needs to retain the colors on display.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-nuanced-cyan nil
+(defface modus-themes-nuanced-cyan nil
   "A nuanced cyan background.
 This does not specify a foreground of its own.  Instead it is meant to
 serve as the backdrop for elements such as Org blocks, headings, and any
@@ -1176,7 +1199,7 @@ other surface that needs to retain the colors on display.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-special-cold nil
+(defface modus-themes-special-cold nil
   "Combines the 'special cold' background and foreground values.
 This is intended for cases when a neutral gray background is not
 suitable and where a combination of more saturated colors would not be
@@ -1184,7 +1207,7 @@ appropriate.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-special-mild nil
+(defface modus-themes-special-mild nil
   "Combines the 'special mild' background and foreground values.
 This is intended for cases when a neutral gray background is not
 suitable and where a combination of more saturated colors would not be
@@ -1192,7 +1215,7 @@ appropriate.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-special-warm nil
+(defface modus-themes-special-warm nil
   "Combines the 'special warm' background and foreground values.
 This is intended for cases when a neutral gray background is not
 suitable and where a combination of more saturated colors would not be
@@ -1200,7 +1223,7 @@ appropriate.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-special-calm nil
+(defface modus-themes-special-calm nil
   "Combines the 'special calm' background and foreground values.
 This is intended for cases when a neutral gray background is not
 suitable and where a combination of more saturated colors would not be
@@ -1208,180 +1231,180 @@ appropriate.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-diff-added nil
+(defface modus-themes-diff-added nil
   "Combines green colors for the 'added' state in diffs.
 The applied colors are contingent on the value assigned to
 `modus-themes-diffs'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-diff-changed nil
+(defface modus-themes-diff-changed nil
   "Combines yellow colors for the 'changed' state in diffs.
 The applied colors are contingent on the value assigned to
 `modus-themes-diffs'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-diff-removed nil
+(defface modus-themes-diff-removed nil
   "Combines red colors for the 'removed' state in diffs.
 The applied colors are contingent on the value assigned to
 `modus-themes-diffs'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-diff-refine-added nil
+(defface modus-themes-diff-refine-added nil
   "Combines green colors for word-wise 'added' state in diffs.
 The applied colors are contingent on the value assigned to
 `modus-themes-diffs'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-diff-refine-changed nil
+(defface modus-themes-diff-refine-changed nil
   "Combines yellow colors for word-wise 'changed' state in diffs.
 The applied colors are contingent on the value assigned to
 `modus-themes-diffs'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-diff-refine-removed nil
+(defface modus-themes-diff-refine-removed nil
   "Combines red colors for word-wise 'removed' state in diffs.
 The applied colors are contingent on the value assigned to
 `modus-themes-diffs'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-diff-focus-added nil
+(defface modus-themes-diff-focus-added nil
   "Combines green colors for the focused 'added' state in diffs.
 The applied colors are contingent on the value assigned to
 `modus-themes-diffs'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-diff-focus-changed nil
+(defface modus-themes-diff-focus-changed nil
   "Combines yellow colors for the focused 'changed' state in.
 The applied colors are contingent on the value assigned to
 `modus-themes-diffs'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-diff-focus-removed nil
+(defface modus-themes-diff-focus-removed nil
   "Combines red colors for the focused 'removed' state in diffs.
 The applied colors are contingent on the value assigned to
 `modus-themes-diffs'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-diff-heading nil
+(defface modus-themes-diff-heading nil
   "Combines blue colors for the diff hunk heading.
 The applied colors are contingent on the value assigned to
 `modus-themes-diffs'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-pseudo-header nil
+(defface modus-themes-pseudo-header nil
   "Generic style for some elements that function like headings.
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-mark-alt nil
-  "Combines yellow colors for marking special lines
+(defface modus-themes-mark-alt nil
+  "Combines yellow colors for marking special lines.
 This is intended for use in modes such as Dired, Ibuffer, Proced.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-mark-del nil
-  "Combines red colors for marking deletable lines
+(defface modus-themes-mark-del nil
+  "Combines red colors for marking deletable lines.
 This is intended for use in modes such as Dired, Ibuffer, Proced.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-mark-sel nil
-  "Combines green colors for marking lines
+(defface modus-themes-mark-sel nil
+  "Combines green colors for marking lines.
 This is intended for use in modes such as Dired, Ibuffer, Proced.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-mark-symbol nil
+(defface modus-themes-mark-symbol nil
   "Applies a blue color and other styles for mark indicators.
 This is intended for use in modes such as Dired, Ibuffer, Proced.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-heading-1 nil
-  "General purpose face for use in headings level 1
+(defface modus-themes-heading-1 nil
+  "General purpose face for use in headings level 1.
 The exact attributes assigned to this face are contingent on the values
 assigned to the `modus-themes-headings' variable.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-heading-2 nil
+(defface modus-themes-heading-2 nil
   "General purpose face for use in headings level 2.
 The exact attributes assigned to this face are contingent on the values
 assigned to the `modus-themes-headings' variable.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-heading-3 nil
+(defface modus-themes-heading-3 nil
   "General purpose face for use in headings level 3.
 The exact attributes assigned to this face are contingent on the values
 assigned to the `modus-themes-headings' variable.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-heading-4 nil
+(defface modus-themes-heading-4 nil
   "General purpose face for use in headings level 4.
 The exact attributes assigned to this face are contingent on the values
 assigned to the `modus-themes-headings' variable.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-heading-5 nil
+(defface modus-themes-heading-5 nil
   "General purpose face for use in headings level 5.
 The exact attributes assigned to this face are contingent on the values
 assigned to the `modus-themes-headings' variable.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-heading-6 nil
+(defface modus-themes-heading-6 nil
   "General purpose face for use in headings level 6.
 The exact attributes assigned to this face are contingent on the values
 assigned to the `modus-themes-headings' variable.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-heading-7 nil
+(defface modus-themes-heading-7 nil
   "General purpose face for use in headings level 7.
 The exact attributes assigned to this face are contingent on the values
 assigned to the `modus-themes-headings' variable.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-heading-8 nil
+(defface modus-themes-heading-8 nil
   "General purpose face for use in headings level 8.
 The exact attributes assigned to this face are contingent on the values
 assigned to the `modus-themes-headings' variable.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-hl-line nil
+(defface modus-themes-hl-line nil
   "General purpose face for the current line.
 The exact attributes assigned to this face are contingent on the values
-assigned to the `modus-themes-intense-hl-line' variable.
+assigned to the `modus-themes-hl-line' variable.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-bold nil
+(defface modus-themes-bold nil
   "Generic face for applying a conditional bold weight.
 This behaves in accordance with `modus-themes-bold-constructs'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-slant nil
+(defface modus-themes-slant nil
   "Generic face for applying a conditional slant (italics).
 This behaves in accordance with `modus-themes-slanted-constructs'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-variable-pitch nil
+(defface modus-themes-variable-pitch nil
   "Generic face for applying a conditional `variable-pitch'.
 This behaves in accordance with `modus-themes-no-mixed-fonts',
 `modus-themes-variable-pitch-headings' for all heading levels, and
@@ -1389,7 +1412,7 @@ This behaves in accordance with 
`modus-themes-no-mixed-fonts',
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-graph-red-0 nil
+(defface modus-themes-graph-red-0 nil
   "Special subdued red face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda habit
 graph where faithfulness to the semantics of a color value is of
@@ -1397,7 +1420,7 @@ paramount importance.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-graph-red-1 nil
+(defface modus-themes-graph-red-1 nil
   "Special prominent red face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda habit
 graph where faithfulness to the semantics of a color value is of
@@ -1405,7 +1428,7 @@ paramount importance.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-graph-green-0 nil
+(defface modus-themes-graph-green-0 nil
   "Special subdued green face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda habit
 graph where faithfulness to the semantics of a color value is of
@@ -1413,7 +1436,7 @@ paramount importance.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-graph-green-1 nil
+(defface modus-themes-graph-green-1 nil
   "Special prominent green face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda habit
 graph where faithfulness to the semantics of a color value is of
@@ -1421,7 +1444,7 @@ paramount importance.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-graph-yellow-0 nil
+(defface modus-themes-graph-yellow-0 nil
   "Special subdued yellow face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda habit
 graph where faithfulness to the semantics of a color value is of
@@ -1429,7 +1452,7 @@ paramount importance.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-graph-yellow-1 nil
+(defface modus-themes-graph-yellow-1 nil
   "Special prominent yellow face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda habit
 graph where faithfulness to the semantics of a color value is of
@@ -1437,7 +1460,7 @@ paramount importance.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-graph-blue-0 nil
+(defface modus-themes-graph-blue-0 nil
   "Special subdued blue face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda habit
 graph where faithfulness to the semantics of a color value is of
@@ -1445,7 +1468,7 @@ paramount importance.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-graph-blue-1 nil
+(defface modus-themes-graph-blue-1 nil
   "Special prominent blue face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda habit
 graph where faithfulness to the semantics of a color value is of
@@ -1453,7 +1476,7 @@ paramount importance.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-graph-magenta-0 nil
+(defface modus-themes-graph-magenta-0 nil
   "Special subdued magenta face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda habit
 graph where faithfulness to the semantics of a color value is of
@@ -1461,7 +1484,7 @@ paramount importance.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-graph-magenta-1 nil
+(defface modus-themes-graph-magenta-1 nil
   "Special prominent magenta face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda habit
 graph where faithfulness to the semantics of a color value is of
@@ -1469,7 +1492,7 @@ paramount importance.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-graph-cyan-0 nil
+(defface modus-themes-graph-cyan-0 nil
   "Special subdued cyan face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda habit
 graph where faithfulness to the semantics of a color value is of
@@ -1477,7 +1500,7 @@ paramount importance.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-graph-cyan-1 nil
+(defface modus-themes-graph-cyan-1 nil
   "Special prominent cyan face for use in graphs.
 This is intended to be applied in contexts such as the Org agenda habit
 graph where faithfulness to the semantics of a color value is of
@@ -1485,27 +1508,51 @@ paramount importance.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-lang-note nil
+(defface modus-themes-lang-note nil
   "Generic face for linter or spell checker notes.
 The exact attributes and color combinations are controlled by
 `modus-themes-lang-checkers'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-lang-warning nil
+(defface modus-themes-lang-warning nil
   "Generic face for linter or spell checker warnings.
 The exact attributes and color combinations are controlled by
 `modus-themes-lang-checkers'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
-(defface modus-theme-lang-error nil
+(defface modus-themes-lang-error nil
   "Generic face for linter or spell checker errors.
 The exact attributes and color combinations are controlled by
 `modus-themes-lang-checkers'.
 
 The actual styling of the face is done by `modus-themes-faces'.")
 
+(defface modus-themes-reset-soft nil
+  "Generic face to set most face properties to nil.
+
+This is intended to be inherited by faces that should not retain
+properties from their context (e.g. an overlay over an underlined
+text should not be underlined as well) yet still blend in.  Also
+see `modus-themes-reset-hard'.
+
+The actual styling of the face is done by `modus-themes-faces'.")
+
+(defface modus-themes-reset-hard nil
+  "Generic face to set all face properties to nil.
+
+This is intended to be inherited by faces that should not retain
+properties from their context (e.g. an overlay over an underlined
+text should not be underlined as well) and not blend in.  Also
+see `modus-themes-reset-soft'.
+
+The actual styling of the face is done by `modus-themes-faces'.")
+
+(defface modus-themes-key-binding nil
+  "Generic face for key bindings.
+The actual styling of the face is done by `modus-themes-faces'.")
+
 
 
 ;;; Customization options
@@ -1592,8 +1639,31 @@ mixing fonts."
   :type 'boolean
   :link '(info-link "(modus-themes) No mixed fonts"))
 
-(defcustom modus-themes-headings
-  '((t . nil))
+(defconst modus-themes--headings-choice
+  '(choice
+    (const :format "[%v] %t\n" :tag "Fairly desaturated foreground with bold 
weight (default)" nil)
+    (const :format "[%v] %t\n" :tag "Same as the default 
(backward-compatible)" t)
+    (const :format "[%v] %t\n" :tag "Like the default without bold weight" 
no-bold)
+    (const :format "[%v] %t\n" :tag "Like the default plus overline" line)
+    (const :format "[%v] %t\n" :tag "Like `line' without bold weight" 
line-no-bold)
+    (const :format "[%v] %t\n" :tag "Like the default but with more colorful 
foreground" rainbow)
+    (const :format "[%v] %t\n" :tag "Like `rainbow' plus overline" 
rainbow-line)
+    (const :format "[%v] %t\n" :tag "Like `rainbow' without bold weight" 
rainbow-no-bold)
+    (const :format "[%v] %t\n" :tag "Like `rainbow-line' without bold weight" 
rainbow-line-no-bold)
+    (const :format "[%v] %t\n" :tag "Like the default plus subtle background" 
highlight)
+    (const :format "[%v] %t\n" :tag "Like `highlight' without bold weight" 
highlight-no-bold)
+    (const :format "[%v] %t\n" :tag "Like `highlight' with more colorful 
foreground" rainbow-highlight)
+    (const :format "[%v] %t\n" :tag "Like `rainbow-highlight' without bold 
weight" rainbow-highlight-no-bold)
+    (const :format "[%v] %t\n" :tag "Like `highlight' plus overline" section)
+    (const :format "[%v] %t\n" :tag "Like `section' without bold weight" 
section-no-bold)
+    (const :format "[%v] %t\n" :tag "Like `section' with more colorful 
foreground" rainbow-section)
+    (const :format "[%v] %t\n" :tag "Like `rainbow-section' without bold 
weight" rainbow-section-no-bold)
+    (const :format "[%v] %t\n" :tag "Do not use any distinct foreground color; 
just bold weight" no-color)
+    (const :format "[%v] %t\n" :tag "Like `no-bold' but without the distinct 
foreground color" no-color-no-bold))
+  "Refer to the doc string of `modus-themes-headings'.
+This is a helper variable intended for internal use.")
+
+(defcustom modus-themes-headings nil
   "Alist of styles for headings, with optional value per level.
 
 To control faces per level from 1-8, use something like this:
@@ -1608,17 +1678,18 @@ To set a uniform value for all heading levels, use this 
pattern:
   (setq modus-themes-headings
         '((t . rainbow-line-no-bold)))
 
-The default uses a fairly desaturated foreground value in
+The default value uses a fairly desaturated foreground color in
 combination with a bold typographic weight.  To specify this
 style for a given level N (assuming you wish to have another
-fallback option), just specify the value t like this:
+fallback option), just specify the value nil like this:
 
   (setq modus-themes-headings
-        '((1 . t)
+        '((1 . nil)
           (2 . line)
+          (3) ; same as nil
           (t . rainbow-line-no-bold)))
 
-A description of all possible values:
+A description of all other possible values:
 
 + `no-bold' retains the default text color while removing the
   typographic weight.
@@ -1669,30 +1740,14 @@ A description of all possible values:
 + `no-color-no-bold' is like `no-color' but without the bold
   weight."
   :group 'modus-themes
-  :package-version '(modus-themes . "1.2.0")
+  :package-version '(modus-themes . "1.3.0")
   :version "28.1"
-  :type
-  '(alist
-    :key-type symbol
-    :value-type
-    (choice (const :tag "Fairly desaturated foreground with bold weight 
(default)" t)
-            (const :tag "Like the default without bold weight" no-bold)
-            (const :tag "Like the default plus overline" line)
-            (const :tag "Like `line' without bold weight" line-no-bold)
-            (const :tag "Like the default but with more colorful foreground" 
rainbow)
-            (const :tag "Like `rainbow' plus overline" rainbow-line)
-            (const :tag "Like `rainbow' without bold weight" rainbow-no-bold)
-            (const :tag "Like `rainbow-line' without bold weight" 
rainbow-line-no-bold)
-            (const :tag "Like the default plus subtle background" highlight)
-            (const :tag "Like `highlight' without bold weight" 
highlight-no-bold)
-            (const :tag "Like `highlight' with more colorful foreground" 
rainbow-highlight)
-            (const :tag "Like `rainbow-highlight' without bold weight" 
rainbow-highlight-no-bold)
-            (const :tag "Like `highlight' plus overline" section)
-            (const :tag "Like `section' without bold weight" section-no-bold)
-            (const :tag "Like `section' with more colorful foreground" 
rainbow-section)
-            (const :tag "Like `rainbow-section' without bold weight" 
rainbow-section-no-bold)
-            (const :tag "Do not use any distinct foreground color; just bold 
weight" no-color)
-            (const :tag "Like `no-bold' but without the distinct foreground 
color" no-color-no-bold)))
+  :type `(alist
+          :options ,(mapcar (lambda (el)
+                              (list el modus-themes--headings-choice))
+                            '(1 2 3 4 5 6 7 8 t))
+          :key-type symbol
+          :value-type ,modus-themes--headings-choice)
   :link '(info-link "(modus-themes) Heading styles"))
 
 (defcustom modus-themes-scale-headings nil
@@ -1830,16 +1885,16 @@ accordance with it in cases where it changes, such as 
while using
   "Define the visibility of fringes.
 
 Nil means the fringes have no background color.  Option `subtle'
-will apply a greyscale value that is visible yet close to the
+will apply a grayscale value that is visible yet close to the
 main buffer background color.  Option `intense' will use a more
-pronounced greyscale value."
+pronounced grayscale value."
   :group 'modus-themes
   :package-version '(modus-themes . "1.0.0")
   :version "28.1"
   :type '(choice
-          (const :tag "No visible fringes (default)" nil)
-          (const :tag "Subtle greyscale background" subtle)
-          (const :tag "Intense greyscale background" intense))
+          (const :format "[%v] %t\n" :tag "No visible fringes (default)" nil)
+          (const :format "[%v] %t\n" :tag "Subtle grayscale background" subtle)
+          (const :format "[%v] %t\n" :tag "Intense grayscale background" 
intense))
   :link '(info-link "(modus-themes) Fringes"))
 
 (defcustom modus-themes-lang-checkers nil
@@ -1867,13 +1922,13 @@ most intense combination of face properties."
   :package-version '(modus-themes . "1.1.0")
   :version "28.1"
   :type '(choice
-          (const :tag "Only color-coded wavy underline (default)" nil)
-          (const :tag "Like the default, but with a straight underline" 
straight-underline)
-          (const :tag "Color-coded wavy underline; subtle foreground" 
subtle-foreground)
-          (const :tag "Combines `straight-underline' and `subtle-foreground'" 
subtle-foreground-straight-underline)
-          (const :tag "Color-coded wavy underline; intense foreground" 
intense-foreground)
-          (const :tag "Combines `straight-underline' and `intense-foreground'" 
intense-foreground-straight-underline)
-          (const :tag "Color-coded background, foreground, straight underline" 
colored-background))
+          (const :format "[%v] %t\n" :tag "Only color-coded wavy underline 
(default)" nil)
+          (const :format "[%v] %t\n" :tag "Like the default, but with a 
straight underline" straight-underline)
+          (const :format "[%v] %t\n" :tag "Color-coded wavy underline; subtle 
foreground" subtle-foreground)
+          (const :format "[%v] %t\n" :tag "Combines `straight-underline' and 
`subtle-foreground'" subtle-foreground-straight-underline)
+          (const :format "[%v] %t\n" :tag "Color-coded wavy underline; intense 
foreground" intense-foreground)
+          (const :format "[%v] %t\n" :tag "Combines `straight-underline' and 
`intense-foreground'" intense-foreground-straight-underline)
+          (const :format "[%v] %t\n" :tag "Color-coded background, foreground, 
straight underline" colored-background))
   :link '(info-link "(modus-themes) Language checkers"))
 
 (defcustom modus-themes-org-blocks nil
@@ -1897,10 +1952,10 @@ association list)."
   :package-version '(modus-themes . "1.0.0")
   :version "28.1"
   :type '(choice
-          (const :tag "No Org block background (default)" nil)
-          (const :tag "Subtle gray block background" grayscale)
-          (const :tag "Subtle gray block background (alt spelling)" greyscale)
-          (const :tag "Color-coded background per programming language" 
rainbow))
+          (const :format "[%v] %t\n" :tag "No Org block background (default)" 
nil)
+          (const :format "[%v] %t\n" :tag "Subtle gray block background" 
grayscale)
+          (const :format "[%v] %t\n" :tag "Subtle gray block background (alt 
spelling)" greyscale)
+          (const :format "[%v] %t\n" :tag "Color-coded background per 
programming language" rainbow))
   :link '(info-link "(modus-themes) Org mode blocks"))
 
 (defcustom modus-themes-org-habit nil
@@ -1936,17 +1991,17 @@ highlights the alert and overdue states."
   :package-version '(modus-themes . "1.1.0")
   :version "28.1"
   :type '(choice
-          (const :tag "Respect the original design of org-habit (default)" nil)
-          (const :tag "Like the default, but do not distinguish between 
present and future variants" simplified)
-          (const :tag "Like `simplified', but only use red, yellow, green" 
traffic-light))
+          (const :format "[%v] %t\n" :tag "Respect the original design of 
org-habit (default)" nil)
+          (const :format "[%v] %t\n" :tag "Like the default, but do not 
distinguish between present and future variants" simplified)
+          (const :format "[%v] %t\n" :tag "Like `simplified', but only use 
red, yellow, green" traffic-light))
   :link '(info-link "(modus-themes) Org agenda habits"))
 
 (defcustom modus-themes-mode-line nil
   "Adjust the overall style of the mode line.
 
-Nil is a two-dimensional rectangle with a border around it.  The
-active and the inactive modelines use different shades of
-greyscale values for the background and foreground.
+The default (nil) is a two-dimensional rectangle with a border
+around it.  The active and the inactive modelines use different
+shades of grayscale values for the background and foreground.
 
 A `3d' value will apply a three-dimensional effect to the active
 modeline.  The inactive modelines remain two-dimensional and are
@@ -1969,17 +2024,25 @@ and `moody' options respectively, while removing the 
borders.
 However, to ensure that the inactive modelines remain visible,
 they apply a slightly more prominent background to them than what
 their counterparts do (same inactive background as with the
-default)."
+default).
+
+Similarly, `accented', `accented-3d', and `accented-moody'
+correspond to the default (nil), `3d', and `moody' styles
+respectively, except that the active mode line uses a colored
+background instead of the standard shade of gray."
   :group 'modus-themes
-  :package-version '(modus-themes . "1.0.0")
+  :package-version '(modus-themes . "1.3.0")
   :version "28.1"
   :type '(choice
-          (const :tag "Two-dimensional box (default)" nil)
-          (const :tag "Three-dimensional style for the active mode line" 3d)
-          (const :tag "No box effects, which are optimal for use with the 
`moody' library" moody)
-          (const :tag "Like the default, but without border effects" 
borderless)
-          (const :tag "Like `3d', but without noticeable border" borderless-3d)
-          (const :tag "Like `moody', but without noticeable border" 
borderless-moody))
+          (const :format "[%v] %t\n" :tag "Two-dimensional box (default)" nil)
+          (const :format "[%v] %t\n" :tag "Three-dimensional style for the 
active mode line" 3d)
+          (const :format "[%v] %t\n" :tag "No box effects, which are optimal 
for use with the `moody' library" moody)
+          (const :format "[%v] %t\n" :tag "Like the default, but without 
border effects" borderless)
+          (const :format "[%v] %t\n" :tag "Like `3d', but without noticeable 
border" borderless-3d)
+          (const :format "[%v] %t\n" :tag "Like `moody', but without 
noticeable border" borderless-moody)
+          (const :format "[%v] %t\n" :tag "Two-dimensional box with a colored 
background" accented)
+          (const :format "[%v] %t\n" :tag "Like `3d', but with a colored 
background" accented-3d)
+          (const :format "[%v] %t\n" :tag "Like `moody', but with a colored 
background" accented-moody))
   :link '(info-link "(modus-themes) Mode line"))
 
 (defcustom modus-themes-diffs nil
@@ -1998,7 +2061,7 @@ Option `fg-only' will remove all accented backgrounds, 
except
 from word-wise changes.  It instead uses color-coded foreground
 values to differentiate between added/removed/changed lines.  If
 a background is necessary, such as with `ediff', then a subtle
-greyscale value is used.
+grayscale value is used.
 
 Option `bg-only' applies a background but does not override the
 text's foreground.  This makes it suitable for a non-nil value
@@ -2014,11 +2077,11 @@ of optimizing for such a use-case."
   :package-version '(modus-themes . "1.2.0")
   :version "28.1"
   :type '(choice
-          (const :tag "Intensely colored backgrounds (default)" nil)
-          (const :tag "Slightly accented backgrounds with tinted text" 
desaturated)
-          (const :tag "No backgrounds, except for refined diffs" fg-only)
-          (const :tag "Apply color-coded backgrounds; keep syntax colors in 
tact" bg-only)
-          (const :tag "Optimized for red-green color defficiency" 
deuteranopia))
+          (const :format "[%v] %t\n" :tag "Intensely colored backgrounds 
(default)" nil)
+          (const :format "[%v] %t\n" :tag "Slightly accented backgrounds with 
tinted text" desaturated)
+          (const :format "[%v] %t\n" :tag "No backgrounds, except for refined 
diffs" fg-only)
+          (const :format "[%v] %t\n" :tag "Apply color-coded backgrounds; keep 
syntax colors in tact" bg-only)
+          (const :format "[%v] %t\n" :tag "Optimized for red-green color 
defficiency" deuteranopia))
   :link '(info-link "(modus-themes) Diffs"))
 
 (defcustom modus-themes-completions nil
@@ -2048,9 +2111,9 @@ revert to an even more nuanced aesthetic."
   :package-version '(modus-themes . "1.0.0")
   :version "28.1"
   :type '(choice
-          (const :tag "Respect the framework's established aesthetic 
(default)" nil)
-          (const :tag "Subtle backgrounds for various elements" moderate)
-          (const :tag "Radical alternative to the framework's looks" 
opinionated))
+          (const :format "[%v] %t\n" :tag "Respect the framework's established 
aesthetic (default)" nil)
+          (const :format "[%v] %t\n" :tag "Subtle backgrounds for various 
elements" moderate)
+          (const :format "[%v] %t\n" :tag "Radical alternative to the 
framework's looks" opinionated))
   :link '(info-link "(modus-themes) Completion UIs"))
 
 (defcustom modus-themes-prompts nil
@@ -2069,18 +2132,18 @@ Options `subtle-gray' and `intense-gray' are like their
 `subtle-accented' and `intense-accented' counterparts, except
 they use grayscale values instead of accented ones."
   :group 'modus-themes
-  :package-version '(modus-themes . "1.0.0")
+  :package-version '(modus-themes . "1.1.0")
   :version "28.1"
   :type '(choice
           ;; `subtle' is the same as `subtle-accented', while `intense' is
           ;; equal to `intense-accented' for backward compatibility
-          (const :tag "No prompt background (default)" nil)
-          (const :tag "Subtle accented background for the prompt" 
subtle-accented)
-          (const :tag "Same as `subtle-accented' for compatibility with older 
versions" subtle)
-          (const :tag "Intense accented background and foreground for the 
prompt" intense-accented)
-          (const :tag "Same as `intense-accented' for compatibility with older 
versions" intense)
-          (const :tag "Like `subtle-accented' but grayscale" subtle-gray)
-          (const :tag "Like `intense-accented' but grayscale" intense-gray))
+          (const :format "[%v] %t\n" :tag "No prompt background (default)" nil)
+          (const :format "[%v] %t\n" :tag "Subtle accented background for the 
prompt" subtle-accented)
+          (const :format "[%v] %t\n" :tag "Same as `subtle-accented' for 
compatibility with older versions" subtle)
+          (const :format "[%v] %t\n" :tag "Intense accented background and 
foreground for the prompt" intense-accented)
+          (const :format "[%v] %t\n" :tag "Same as `intense-accented' for 
compatibility with older versions" intense)
+          (const :format "[%v] %t\n" :tag "Like `subtle-accented' but 
grayscale" subtle-gray)
+          (const :format "[%v] %t\n" :tag "Like `intense-accented' but 
grayscale" intense-gray))
   :link '(info-link "(modus-themes) Command prompts"))
 
 (defcustom modus-themes-intense-hl-line nil
@@ -2091,6 +2154,45 @@ they use grayscale values instead of accented ones."
   :type 'boolean
   :link '(info-link "(modus-themes) Line highlighting"))
 
+(make-obsolete 'modus-themes-intense-hl-line 'modus-themes-hl-line "1.3.0")
+
+(defcustom modus-themes-hl-line nil
+  "Control the current line highlight of HL-line mode.
+
+The default (nil) is to apply a subtle neutral background to the
+current line.
+
+Option `intense-background' uses a prominent neutral background.
+
+Option `accented-background' uses a subtle colored background.
+
+Option `underline-neutral' combines a subtle neutral background
+with a gray underline.
+
+Option `underline-accented' draws an underline while applying a
+subtle colored background.
+
+Option `underline-only-neutral' uses just a neutral underline,
+without any added change to the background.
+
+Option `underline-only-accented' uses just a colored underline,
+without any added change to the background.
+
+Set `x-underline-at-descent-line' to a non-nil value for better
+results with underlines."
+  :group 'modus-themes
+  :package-version '(modus-themes . "1.3.0")
+  :version "28.1"
+  :type '(choice
+          (const :format "[%v] %t\n" :tag "Subtle neutral background 
(default)" nil)
+          (const :format "[%v] %t\n" :tag "Prominent neutral background" 
intense-background)
+          (const :format "[%v] %t\n" :tag "Subtle colored background" 
accented-background)
+          (const :format "[%v] %t\n" :tag "Underline with a subtle neutral 
background" underline-neutral)
+          (const :format "[%v] %t\n" :tag "Underline with a subtle colored 
background" underline-accented)
+          (const :format "[%v] %t\n" :tag "Just a neutral underline, without a 
background" underline-only-neutral)
+          (const :format "[%v] %t\n" :tag "Just an accented underline, without 
a background" underline-only-accented))
+  :link '(info-link "(modus-themes) Line highlighting"))
+
 (defcustom modus-themes-subtle-line-numbers nil
   "Use more subtle style for command `display-line-numbers-mode'."
   :group 'modus-themes
@@ -2115,10 +2217,10 @@ uses a bold weight."
   :package-version '(modus-themes . "1.0.0")
   :version "28.1"
   :type '(choice
-          (const :tag "Sublte tinted background (default)" nil)
-          (const :tag "Like the default, but also use bold typographic weight" 
subtle-bold)
-          (const :tag "Intense saturated background" intense)
-          (const :tag "Like `intense' but with bold weight" intense-bold))
+          (const :format "[%v] %t\n" :tag "Sublte tinted background (default)" 
nil)
+          (const :format "[%v] %t\n" :tag "Like the default, but also use bold 
typographic weight" subtle-bold)
+          (const :format "[%v] %t\n" :tag "Intense saturated background" 
intense)
+          (const :format "[%v] %t\n" :tag "Like `intense' but with bold 
weight" intense-bold))
   :link '(info-link "(modus-themes) Matching parentheses"))
 
 (defcustom modus-themes-syntax nil
@@ -2155,14 +2257,14 @@ Option `faint-yellow-comments' combines the `faint' 
style with
   :package-version '(modus-themes . "1.2.0")
   :version "28.1"
   :type '(choice
-          (const :tag "Balanced use of blue, cyan, magenta, purple variants 
(default)" nil)
-          (const :tag "Like the default, but with desaturated color values" 
faint)
-          (const :tag "Apply yellow tint to comments, keep the default style 
for the rest" yellow-comments)
-          (const :tag "Use green for strings, keep the default style for the 
rest" green-strings)
-          (const :tag "Use green for strings, yellow for comments, keep the 
default style for the rest" yellow-comments-green-strings)
-          (const :tag "Refashion syntax highlighting with more colors, gray 
comments" alt-syntax)
-          (const :tag "Like `alt-syntax' but with yellow comments" 
alt-syntax-yellow-comments)
-          (const :tag "Like `faint' but with yellow comments" 
faint-yellow-comments))
+          (const :format "[%v] %t\n" :tag "Balanced use of blue, cyan, 
magenta, purple variants (default)" nil)
+          (const :format "[%v] %t\n" :tag "Like the default, but with 
desaturated color values" faint)
+          (const :format "[%v] %t\n" :tag "Apply yellow tint to comments, keep 
the default style for the rest" yellow-comments)
+          (const :format "[%v] %t\n" :tag "Use green for strings, keep the 
default style for the rest" green-strings)
+          (const :format "[%v] %t\n" :tag "Use green for strings, yellow for 
comments, keep the default style for the rest" yellow-comments-green-strings)
+          (const :format "[%v] %t\n" :tag "Refashion syntax highlighting with 
more colors, gray comments" alt-syntax)
+          (const :format "[%v] %t\n" :tag "Like `alt-syntax' but with yellow 
comments" alt-syntax-yellow-comments)
+          (const :format "[%v] %t\n" :tag "Like `faint' but with yellow 
comments" faint-yellow-comments))
   :link '(info-link "(modus-themes) Syntax styles"))
 
 (defcustom modus-themes-links nil
@@ -2174,11 +2276,11 @@ foreground.
 Option `faint' applies desaturated colors to the link's text and
 underline.
 
-Option `neutral-underline' applies a subtle grey underline, while
+Option `neutral-underline' applies a subtle gray underline, while
 retaining the link's foreground.
 
 Option `faint-neutral-underline' combines a desaturated text
-color with a subtle grey underline.
+color with a subtle gray underline.
 
 Option `no-underline' removes link underlines altogether, while
 retaining their original fairly vivid color.
@@ -2193,13 +2295,13 @@ using a subtle underline below it."
   :package-version '(modus-themes . "1.2.0")
   :version "28.1"
   :type '(choice
-          (const :tag "Undeline link using the same color as the text 
(default)" nil)
-          (const :tag "Like the default, but apply less intense colors to 
links" faint)
-          (const :tag "Change the color of link underlines to a neutral grey" 
neutral-underline)
-          (const :tag "Desaturated foreground with neutral grey underline" 
faint-neutral-underline)
-          (const :tag "Remove underline property from links, keeping their 
foreground as-is" no-underline)
-          (const :tag "Apply underline only; use default foreground" 
underline-only)
-          (const :tag "Like `underline-only' but with a subtle underline" 
neutral-underline-only))
+          (const :format "[%v] %t\n" :tag "Undeline link using the same color 
as the text (default)" nil)
+          (const :format "[%v] %t\n" :tag "Like the default, but apply less 
intense colors to links" faint)
+          (const :format "[%v] %t\n" :tag "Change the color of link underlines 
to a neutral gray" neutral-underline)
+          (const :format "[%v] %t\n" :tag "Desaturated foreground with neutral 
gray underline" faint-neutral-underline)
+          (const :format "[%v] %t\n" :tag "Remove underline property from 
links, keeping their foreground as-is" no-underline)
+          (const :format "[%v] %t\n" :tag "Apply underline only; use default 
foreground" underline-only)
+          (const :format "[%v] %t\n" :tag "Like `underline-only' but with a 
subtle underline" neutral-underline-only))
   :link '(info-link "(modus-themes) Link styles"))
 
 (defcustom modus-themes-region nil
@@ -2218,15 +2320,24 @@ override any existing colors.  It extends to the edge 
of the
 window.
 
 Option `bg-only-no-extend' is a combination of the `bg-only' and
-`no-extend' options."
+`no-extend' options.
+
+Option `accent' uses a more colorful background with a neutral
+foreground.  It overrides all syntax highlighting and extends to
+the edge of the window.
+
+Option `accent-no-extend' is like the above, but stretches only
+to the end of each line within the region."
   :group 'modus-themes
-  :package-version '(modus-themes . "1.0.0")
+  :package-version '(modus-themes . "1.3.0")
   :version "28.1"
   :type '(choice
-          (const :tag "Intense background; overrides colors; extends to edge 
of window (default)" nil)
-          (const :tag "As with the default, but does not extend" no-extend)
-          (const :tag "Subtle background; preserves colors; extends to edge of 
window" bg-only)
-          (const :tag "As with the `subtle' option, but does not extend" 
bg-only-no-extend))
+          (const :format "[%v] %t\n" :tag "Intense background; overrides 
colors; extends to edge of window (default)" nil)
+          (const :format "[%v] %t\n" :tag "As with the default, but does not 
extend" no-extend)
+          (const :format "[%v] %t\n" :tag "Subtle background; preserves 
colors; extends to edge of window" bg-only)
+          (const :format "[%v] %t\n" :tag "As with the `subtle' option, but 
does not extend" bg-only-no-extend)
+          (const :format "[%v] %t\n" :tag "Like the default, but with an 
accented background" accent)
+          (const :format "[%v] %t\n" :tag "As with the `accent' option, but 
does not extend" accent-no-extend))
   :link '(info-link "(modus-themes) Active region"))
 
 
@@ -2382,8 +2493,8 @@ Those are stored in `modus-themes-faces' and
 
 (defun modus-themes--fringe (mainbg subtlebg intensebg)
   "Conditional use of background colors for fringes.
-MAINBG is the default.  SUBTLEBG should be a subtle greyscale
-value.  INTENSEBG must be a more pronounced greyscale color."
+MAINBG is the default.  SUBTLEBG should be a subtle grayscale
+value.  INTENSEBG must be a more pronounced grayscale color."
   (pcase modus-themes-fringes
     ('intense (list :background intensebg))
     ('subtle (list :background subtlebg))
@@ -2431,9 +2542,9 @@ combinable with INTENSEFG."
     ('intense (list :background intensebg :foreground intensefg))
     ('subtle-accented (list :background subtlebg :foreground subtlefg))
     ('subtle (list :background subtlebg :foreground subtlefg))
-    ('subtle-gray (list :inherit 'modus-theme-subtle-neutral))
-    ('intense-gray (list :inherit 'modus-theme-intense-neutral))
-    (_ (list :background nil :foreground mainfg))))
+    ('subtle-gray (list :inherit 'modus-themes-subtle-neutral))
+    ('intense-gray (list :inherit 'modus-themes-intense-neutral))
+    (_ (list :background 'unspecified :foreground mainfg))))
 
 (defun modus-themes--paren (normalbg intensebg)
   "Conditional use of intense colors for matching parentheses.
@@ -2582,10 +2693,10 @@ theme's source code)."
 BG, FG, BGACCENT, FGACCENT apply a background and foreground
 color respectively.
 
-The former pair is a greyscale combination that should be more
+The former pair is a grayscale combination that should be more
 distinct than the background of the block.  It is applied to the
 default styles or when `modus-themes-org-blocks' is set
-to `greyscale'.
+to `grayscale' (or `greyscale').
 
 The latter pair should be more subtle than the background of the
 block, as it is used when `modus-themes-org-blocks' is
@@ -2606,13 +2717,14 @@ instead.  Same for SIMPLE."
     (_ (list :background default))))
 
 (defun modus-themes--mode-line-attrs
-    (fg bg fg-alt bg-alt border border-3d &optional alt-style border-width 
fg-distant)
+    (fg bg fg-alt bg-alt fg-accent bg-accent border border-3d &optional 
alt-style border-width fg-distant)
   "Color combinations for `modus-themes-mode-line'.
 
 FG and BG are the default colors.  FG-ALT and BG-ALT are meant to
 accommodate the options for a 3D modeline or a `moody' compliant
-one.  BORDER applies to all permutations of the modeline, except
-the three-dimensional effect, where BORDER-3D is used instead.
+one.  FG-ACCENT and BG-ACCENT are used for all variants.  BORDER
+applies to all permutations of the modeline, except the
+three-dimensional effect, where BORDER-3D is used instead.
 
 Optional ALT-STYLE applies an appropriate style to the mode
 line's box property.
@@ -2644,6 +2756,17 @@ property."
      `(:background ,bg :foreground ,fg
        :underline ,bg :overline ,bg
        :distant-foreground ,fg-distant))
+    ('accented
+     `(:foreground ,fg-accent :background ,bg-accent :box ,border))
+    ('accented-3d
+     `(:background ,bg-accent :foreground ,fg-accent
+       :box (:line-width ,(or border-width 1)
+             :color ,border-3d
+             :style ,(and alt-style 'released-button))))
+    ('accented-moody
+     `(:background ,bg-accent :foreground ,fg-accent
+       :underline ,border :overline ,border
+       :distant-foreground ,fg-distant))
     (_
      `(:foreground ,fg :background ,bg :box ,border))))
 
@@ -2730,7 +2853,7 @@ These are intended for Helm, Ivy, etc."
   "Conditional application of link styles.
 FG is the link's default color for its text and underline
 property.  FGFAINT is a desaturated color for the text and
-underline.  UNDERLINE is a grey color only for the undeline."
+underline.  UNDERLINE is a gray color only for the undeline."
   (pcase modus-themes-links
     ('faint (list :foreground fgfaint :underline t))
     ('neutral-underline (list :foreground fg :underline underline))
@@ -2757,18 +2880,39 @@ AMOUNT is a customization option."
   (when modus-themes-scale-headings
     (list :height amount)))
 
-(defun modus-themes--region (bg fg bgsubtle)
+(defun modus-themes--region (bg fg bgsubtle bgaccent)
   "Apply `modus-themes-region' styles.
 
 BG and FG are the main values that are used by default.  BGSUBTLE
 is a subtle background value that can be combined with all colors
-used to fontify text and code syntax."
+used to fontify text and code syntax.  BGACCENT is a colored
+background that combines well with FG."
   (pcase modus-themes-region
     ('bg-only (list :background bgsubtle))
     ('bg-only-no-extend (list :background bgsubtle :extend nil))
     ('no-extend (list :background bg :foreground fg :extend nil))
+    ('accent (list :background bgaccent :foreground fg))
+    ('accent-no-extend (list :background bgaccent :foreground fg :extend nil))
     (_ (list :background bg :foreground fg))))
 
+(defun modus-themes--hl-line (bgdefault bgintense bgaccent lineneutral 
lineaccent)
+  "Apply `modus-themes-hl-line' styles.
+
+BGDEFAULT is a subtle neutral background.  BGINTENSE is like the
+default, but more prominent.  BGACCENT is a subtle accented
+background.  LINENEUTRAL and LINEACCENT are a color values that
+can remain distinct against the buffer's possible backgrounds:
+the former is neutral, the latter is accented.  LINEONLY must be
+a prominent neutral color."
+  (pcase modus-themes-hl-line
+    ('intense-background (list :background bgintense))
+    ('accented-background (list :background bgaccent))
+    ('underline-neutral (list :background bgdefault :underline lineneutral))
+    ('underline-accented (list :background bgaccent :underline lineaccent))
+    ('underline-only-neutral (list :background 'unspecified :underline 
lineneutral))
+    ('underline-only-accented (list :background 'unspecified :underline 
lineaccent))
+    (_ (list :background bgdefault))))
+
 
 
 ;;;; Utilities for DIY users
@@ -2929,112 +3073,112 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;; custom faces
     ;; these bespoke faces are inherited by other constructs below
 ;;;;; subtle colored backgrounds
-    `(modus-theme-subtle-red ((,class :background ,red-subtle-bg :foreground 
,fg-dim)))
-    `(modus-theme-subtle-green ((,class :background ,green-subtle-bg 
:foreground ,fg-dim)))
-    `(modus-theme-subtle-yellow ((,class :background ,yellow-subtle-bg 
:foreground ,fg-dim)))
-    `(modus-theme-subtle-blue ((,class :background ,blue-subtle-bg :foreground 
,fg-dim)))
-    `(modus-theme-subtle-magenta ((,class :background ,magenta-subtle-bg 
:foreground ,fg-dim)))
-    `(modus-theme-subtle-cyan ((,class :background ,cyan-subtle-bg :foreground 
,fg-dim)))
-    `(modus-theme-subtle-neutral ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
+    `(modus-themes-subtle-red ((,class :background ,red-subtle-bg :foreground 
,fg-dim)))
+    `(modus-themes-subtle-green ((,class :background ,green-subtle-bg 
:foreground ,fg-dim)))
+    `(modus-themes-subtle-yellow ((,class :background ,yellow-subtle-bg 
:foreground ,fg-dim)))
+    `(modus-themes-subtle-blue ((,class :background ,blue-subtle-bg 
:foreground ,fg-dim)))
+    `(modus-themes-subtle-magenta ((,class :background ,magenta-subtle-bg 
:foreground ,fg-dim)))
+    `(modus-themes-subtle-cyan ((,class :background ,cyan-subtle-bg 
:foreground ,fg-dim)))
+    `(modus-themes-subtle-neutral ((,class :background ,bg-inactive 
:foreground ,fg-inactive)))
 ;;;;; intense colored backgrounds
-    `(modus-theme-intense-red ((,class :background ,red-intense-bg :foreground 
,fg-main)))
-    `(modus-theme-intense-green ((,class :background ,green-intense-bg 
:foreground ,fg-main)))
-    `(modus-theme-intense-yellow ((,class :background ,yellow-intense-bg 
:foreground ,fg-main)))
-    `(modus-theme-intense-blue ((,class :background ,blue-intense-bg 
:foreground ,fg-main)))
-    `(modus-theme-intense-magenta ((,class :background ,magenta-intense-bg 
:foreground ,fg-main)))
-    `(modus-theme-intense-cyan ((,class :background ,cyan-intense-bg 
:foreground ,fg-main)))
-    `(modus-theme-intense-neutral ((,class :background ,bg-active :foreground 
,fg-main)))
+    `(modus-themes-intense-red ((,class :background ,red-intense-bg 
:foreground ,fg-main)))
+    `(modus-themes-intense-green ((,class :background ,green-intense-bg 
:foreground ,fg-main)))
+    `(modus-themes-intense-yellow ((,class :background ,yellow-intense-bg 
:foreground ,fg-main)))
+    `(modus-themes-intense-blue ((,class :background ,blue-intense-bg 
:foreground ,fg-main)))
+    `(modus-themes-intense-magenta ((,class :background ,magenta-intense-bg 
:foreground ,fg-main)))
+    `(modus-themes-intense-cyan ((,class :background ,cyan-intense-bg 
:foreground ,fg-main)))
+    `(modus-themes-intense-neutral ((,class :background ,bg-active :foreground 
,fg-main)))
 ;;;;; refined background and foreground combinations
     ;; general purpose styles that use an accented foreground against an
     ;; accented background
-    `(modus-theme-refine-red ((,class :background ,red-refine-bg :foreground 
,red-refine-fg)))
-    `(modus-theme-refine-green ((,class :background ,green-refine-bg 
:foreground ,green-refine-fg)))
-    `(modus-theme-refine-yellow ((,class :background ,yellow-refine-bg 
:foreground ,yellow-refine-fg)))
-    `(modus-theme-refine-blue ((,class :background ,blue-refine-bg :foreground 
,blue-refine-fg)))
-    `(modus-theme-refine-magenta ((,class :background ,magenta-refine-bg 
:foreground ,magenta-refine-fg)))
-    `(modus-theme-refine-cyan ((,class :background ,cyan-refine-bg :foreground 
,cyan-refine-fg)))
+    `(modus-themes-refine-red ((,class :background ,red-refine-bg :foreground 
,red-refine-fg)))
+    `(modus-themes-refine-green ((,class :background ,green-refine-bg 
:foreground ,green-refine-fg)))
+    `(modus-themes-refine-yellow ((,class :background ,yellow-refine-bg 
:foreground ,yellow-refine-fg)))
+    `(modus-themes-refine-blue ((,class :background ,blue-refine-bg 
:foreground ,blue-refine-fg)))
+    `(modus-themes-refine-magenta ((,class :background ,magenta-refine-bg 
:foreground ,magenta-refine-fg)))
+    `(modus-themes-refine-cyan ((,class :background ,cyan-refine-bg 
:foreground ,cyan-refine-fg)))
 ;;;;; "active" combinations, mostly for use on the mode line
-    `(modus-theme-active-red ((,class :background ,red-active :foreground 
,bg-active)))
-    `(modus-theme-active-green ((,class :background ,green-active :foreground 
,bg-active)))
-    `(modus-theme-active-yellow ((,class :background ,yellow-active 
:foreground ,bg-active)))
-    `(modus-theme-active-blue ((,class :background ,blue-active :foreground 
,bg-active)))
-    `(modus-theme-active-magenta ((,class :background ,magenta-active 
:foreground ,bg-active)))
-    `(modus-theme-active-cyan ((,class :background ,cyan-active :foreground 
,bg-active)))
+    `(modus-themes-active-red ((,class :background ,red-active :foreground 
,bg-active)))
+    `(modus-themes-active-green ((,class :background ,green-active :foreground 
,bg-active)))
+    `(modus-themes-active-yellow ((,class :background ,yellow-active 
:foreground ,bg-active)))
+    `(modus-themes-active-blue ((,class :background ,blue-active :foreground 
,bg-active)))
+    `(modus-themes-active-magenta ((,class :background ,magenta-active 
:foreground ,bg-active)))
+    `(modus-themes-active-cyan ((,class :background ,cyan-active :foreground 
,bg-active)))
 ;;;;; nuanced backgrounds
     ;; useful for adding an accented background that is suitable for all
     ;; main foreground colors (intended for use in Org source blocks)
-    `(modus-theme-nuanced-red ((,class :background ,red-nuanced-bg :extend t)))
-    `(modus-theme-nuanced-green ((,class :background ,green-nuanced-bg :extend 
t)))
-    `(modus-theme-nuanced-yellow ((,class :background ,yellow-nuanced-bg 
:extend t)))
-    `(modus-theme-nuanced-blue ((,class :background ,blue-nuanced-bg :extend 
t)))
-    `(modus-theme-nuanced-magenta ((,class :background ,magenta-nuanced-bg 
:extend t)))
-    `(modus-theme-nuanced-cyan ((,class :background ,cyan-nuanced-bg :extend 
t)))
+    `(modus-themes-nuanced-red ((,class :background ,red-nuanced-bg :extend 
t)))
+    `(modus-themes-nuanced-green ((,class :background ,green-nuanced-bg 
:extend t)))
+    `(modus-themes-nuanced-yellow ((,class :background ,yellow-nuanced-bg 
:extend t)))
+    `(modus-themes-nuanced-blue ((,class :background ,blue-nuanced-bg :extend 
t)))
+    `(modus-themes-nuanced-magenta ((,class :background ,magenta-nuanced-bg 
:extend t)))
+    `(modus-themes-nuanced-cyan ((,class :background ,cyan-nuanced-bg :extend 
t)))
 ;;;;; fringe-specific combinations
-    `(modus-theme-fringe-red ((,class :background ,red-fringe-bg :foreground 
,fg-main)))
-    `(modus-theme-fringe-green ((,class :background ,green-fringe-bg 
:foreground ,fg-main)))
-    `(modus-theme-fringe-yellow ((,class :background ,yellow-fringe-bg 
:foreground ,fg-main)))
-    `(modus-theme-fringe-blue ((,class :background ,blue-fringe-bg :foreground 
,fg-main)))
-    `(modus-theme-fringe-magenta ((,class :background ,magenta-fringe-bg 
:foreground ,fg-main)))
-    `(modus-theme-fringe-cyan ((,class :background ,cyan-fringe-bg :foreground 
,fg-main)))
+    `(modus-themes-fringe-red ((,class :background ,red-fringe-bg :foreground 
,fg-main)))
+    `(modus-themes-fringe-green ((,class :background ,green-fringe-bg 
:foreground ,fg-main)))
+    `(modus-themes-fringe-yellow ((,class :background ,yellow-fringe-bg 
:foreground ,fg-main)))
+    `(modus-themes-fringe-blue ((,class :background ,blue-fringe-bg 
:foreground ,fg-main)))
+    `(modus-themes-fringe-magenta ((,class :background ,magenta-fringe-bg 
:foreground ,fg-main)))
+    `(modus-themes-fringe-cyan ((,class :background ,cyan-fringe-bg 
:foreground ,fg-main)))
 ;;;;; special base values
     ;; these are closer to the grayscale than the accents defined above
     ;; and should only be used when the next closest alternative would be
-    ;; a greyscale value than an accented one
-    `(modus-theme-special-cold ((,class :background ,bg-special-cold 
:foreground ,fg-special-cold)))
-    `(modus-theme-special-mild ((,class :background ,bg-special-mild 
:foreground ,fg-special-mild)))
-    `(modus-theme-special-warm ((,class :background ,bg-special-warm 
:foreground ,fg-special-warm)))
-    `(modus-theme-special-calm ((,class :background ,bg-special-calm 
:foreground ,fg-special-calm)))
+    ;; a grayscale value than an accented one
+    `(modus-themes-special-cold ((,class :background ,bg-special-cold 
:foreground ,fg-special-cold)))
+    `(modus-themes-special-mild ((,class :background ,bg-special-mild 
:foreground ,fg-special-mild)))
+    `(modus-themes-special-warm ((,class :background ,bg-special-warm 
:foreground ,fg-special-warm)))
+    `(modus-themes-special-calm ((,class :background ,bg-special-calm 
:foreground ,fg-special-calm)))
 ;;;;; diff-specific combinations
     ;; intended for `diff-mode' or equivalent
-    `(modus-theme-diff-added
+    `(modus-themes-diff-added
       ((,class ,@(modus-themes--diff
                   bg-main green
                   bg-diff-focus-added fg-diff-focus-added
                   green-nuanced-bg fg-diff-added
                   bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran))))
-    `(modus-theme-diff-changed
+    `(modus-themes-diff-changed
       ((,class ,@(modus-themes--diff
                   bg-main yellow
                   bg-diff-focus-changed fg-diff-focus-changed
                   yellow-nuanced-bg fg-diff-changed))))
-    `(modus-theme-diff-removed
+    `(modus-themes-diff-removed
       ((,class ,@(modus-themes--diff
                   bg-main red
                   bg-diff-focus-removed fg-diff-focus-removed
                   red-nuanced-bg fg-diff-removed))))
-    `(modus-theme-diff-refine-added
+    `(modus-themes-diff-refine-added
       ((,class ,@(modus-themes--diff
                   bg-diff-added fg-diff-added
                   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))))
-    `(modus-theme-diff-refine-changed
+    `(modus-themes-diff-refine-changed
       ((,class ,@(modus-themes--diff
                   bg-diff-changed fg-diff-changed
                   bg-diff-refine-changed fg-diff-refine-changed
                   bg-diff-focus-changed fg-diff-focus-changed))))
-    `(modus-theme-diff-refine-removed
+    `(modus-themes-diff-refine-removed
       ((,class ,@(modus-themes--diff
                   bg-diff-removed fg-diff-removed
                   bg-diff-refine-removed fg-diff-refine-removed
                   bg-diff-focus-removed fg-diff-focus-removed))))
-    `(modus-theme-diff-focus-added
+    `(modus-themes-diff-focus-added
       ((,class ,@(modus-themes--diff
                   bg-dim green
                   bg-diff-focus-added fg-diff-focus-added
                   bg-diff-added fg-diff-added
                   bg-diff-focus-added-deuteran fg-diff-focus-added-deuteran))))
-    `(modus-theme-diff-focus-changed
+    `(modus-themes-diff-focus-changed
       ((,class ,@(modus-themes--diff
                   bg-dim yellow
                   bg-diff-focus-changed fg-diff-focus-changed
                   bg-diff-changed fg-diff-changed))))
-    `(modus-theme-diff-focus-removed
+    `(modus-themes-diff-focus-removed
       ((,class ,@(modus-themes--diff
                   bg-dim red
                   bg-diff-focus-removed fg-diff-focus-removed
                   bg-diff-removed fg-diff-removed))))
-    `(modus-theme-diff-heading
+    `(modus-themes-diff-heading
       ((,class ,@(modus-themes--diff
                   bg-main blue
                   bg-diff-heading fg-diff-heading
@@ -3043,65 +3187,70 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                   t))))
 ;;;;; mark indicators
     ;; color combinations intended for Dired, Ibuffer, or equivalent
-    `(modus-theme-pseudo-header ((,class :inherit bold :foreground ,fg-main)))
-    `(modus-theme-mark-alt ((,class :inherit bold :background ,bg-mark-alt 
:foreground ,fg-mark-alt)))
-    `(modus-theme-mark-del ((,class :inherit bold :background ,bg-mark-del 
:foreground ,fg-mark-del)))
-    `(modus-theme-mark-sel ((,class :inherit bold :background ,bg-mark-sel 
:foreground ,fg-mark-sel)))
-    `(modus-theme-mark-symbol ((,class :inherit bold :foreground ,blue-alt)))
+    `(modus-themes-pseudo-header ((,class :inherit bold :foreground ,fg-main)))
+    `(modus-themes-mark-alt ((,class :inherit bold :background ,bg-mark-alt 
:foreground ,fg-mark-alt)))
+    `(modus-themes-mark-del ((,class :inherit bold :background ,bg-mark-del 
:foreground ,fg-mark-del)))
+    `(modus-themes-mark-sel ((,class :inherit bold :background ,bg-mark-sel 
:foreground ,fg-mark-sel)))
+    `(modus-themes-mark-symbol ((,class :inherit bold :foreground ,blue-alt)))
 ;;;;; heading levels
     ;; styles for regular headings used in Org, Markdown, Info, etc.
-    `(modus-theme-heading-1
+    `(modus-themes-heading-1
       ((,class ,@(modus-themes--heading
                   1 fg-main magenta-alt-other magenta-nuanced-bg bg-region)
                ,@(modus-themes--scale modus-themes-scale-4))))
-    `(modus-theme-heading-2
+    `(modus-themes-heading-2
       ((,class ,@(modus-themes--heading
                   2 fg-special-warm magenta-alt red-nuanced-bg bg-region)
                ,@(modus-themes--scale modus-themes-scale-3))))
-    `(modus-theme-heading-3
+    `(modus-themes-heading-3
       ((,class ,@(modus-themes--heading
                   3 fg-special-cold blue blue-nuanced-bg bg-region)
                ,@(modus-themes--scale modus-themes-scale-2))))
-    `(modus-theme-heading-4
+    `(modus-themes-heading-4
       ((,class ,@(modus-themes--heading
                   4 fg-special-mild cyan cyan-nuanced-bg bg-region)
                ,@(modus-themes--scale modus-themes-scale-1))))
-    `(modus-theme-heading-5
+    `(modus-themes-heading-5
       ((,class ,@(modus-themes--heading
                   5 fg-special-calm green-alt-other green-nuanced-bg 
bg-region))))
-    `(modus-theme-heading-6
+    `(modus-themes-heading-6
       ((,class ,@(modus-themes--heading
                   6 yellow-nuanced-fg yellow-alt-other yellow-nuanced-bg 
bg-region))))
-    `(modus-theme-heading-7
+    `(modus-themes-heading-7
       ((,class ,@(modus-themes--heading
                   7 red-nuanced-fg red-alt red-nuanced-bg bg-region))))
-    `(modus-theme-heading-8
+    `(modus-themes-heading-8
       ((,class ,@(modus-themes--heading
                   8 fg-dim magenta bg-alt bg-region))))
 ;;;;; graph-specific faces
-    `(modus-theme-graph-red-0 ((,class :background ,red-graph-0-bg)))
-    `(modus-theme-graph-red-1 ((,class :background ,red-graph-1-bg)))
-    `(modus-theme-graph-green-0 ((,class :background ,green-graph-0-bg)))
-    `(modus-theme-graph-green-1 ((,class :background ,green-graph-1-bg)))
-    `(modus-theme-graph-yellow-0 ((,class :background ,yellow-graph-0-bg)))
-    `(modus-theme-graph-yellow-1 ((,class :background ,yellow-graph-1-bg)))
-    `(modus-theme-graph-blue-0 ((,class :background ,blue-graph-0-bg)))
-    `(modus-theme-graph-blue-1 ((,class :background ,blue-graph-1-bg)))
-    `(modus-theme-graph-magenta-0 ((,class :background ,magenta-graph-0-bg)))
-    `(modus-theme-graph-magenta-1 ((,class :background ,magenta-graph-1-bg)))
-    `(modus-theme-graph-cyan-0 ((,class :background ,cyan-graph-0-bg)))
-    `(modus-theme-graph-cyan-1 ((,class :background ,cyan-graph-1-bg)))
+    `(modus-themes-graph-red-0 ((,class :background ,red-graph-0-bg)))
+    `(modus-themes-graph-red-1 ((,class :background ,red-graph-1-bg)))
+    `(modus-themes-graph-green-0 ((,class :background ,green-graph-0-bg)))
+    `(modus-themes-graph-green-1 ((,class :background ,green-graph-1-bg)))
+    `(modus-themes-graph-yellow-0 ((,class :background ,yellow-graph-0-bg)))
+    `(modus-themes-graph-yellow-1 ((,class :background ,yellow-graph-1-bg)))
+    `(modus-themes-graph-blue-0 ((,class :background ,blue-graph-0-bg)))
+    `(modus-themes-graph-blue-1 ((,class :background ,blue-graph-1-bg)))
+    `(modus-themes-graph-magenta-0 ((,class :background ,magenta-graph-0-bg)))
+    `(modus-themes-graph-magenta-1 ((,class :background ,magenta-graph-1-bg)))
+    `(modus-themes-graph-cyan-0 ((,class :background ,cyan-graph-0-bg)))
+    `(modus-themes-graph-cyan-1 ((,class :background ,cyan-graph-1-bg)))
 ;;;;; language checkers
-    `(modus-theme-lang-error ((,class ,@(modus-themes--lang-check 
fg-lang-underline-error fg-lang-error red red-nuanced-bg))))
-    `(modus-theme-lang-note ((,class ,@(modus-themes--lang-check 
fg-lang-underline-note fg-lang-note blue-alt blue-nuanced-bg))))
-    `(modus-theme-lang-warning ((,class ,@(modus-themes--lang-check 
fg-lang-underline-warning fg-lang-warning yellow yellow-nuanced-bg))))
+    `(modus-themes-lang-error ((,class ,@(modus-themes--lang-check 
fg-lang-underline-error fg-lang-error red red-nuanced-bg))))
+    `(modus-themes-lang-note ((,class ,@(modus-themes--lang-check 
fg-lang-underline-note fg-lang-note blue-alt blue-nuanced-bg))))
+    `(modus-themes-lang-warning ((,class ,@(modus-themes--lang-check 
fg-lang-underline-warning fg-lang-warning yellow yellow-nuanced-bg))))
 ;;;;; other custom faces
-    `(modus-theme-bold ((,class ,@(modus-themes--bold-weight))))
-    `(modus-theme-hl-line ((,class :background ,(if 
modus-themes-intense-hl-line
-                                                    bg-hl-line-intense 
bg-hl-line)
-                                   :extend t)))
-    `(modus-theme-slant ((,class :inherit italic :slant 
,@(modus-themes--slant))))
-    `(modus-theme-variable-pitch ((,class ,@(modus-themes--variable-pitch))))
+    `(modus-themes-bold ((,class ,@(modus-themes--bold-weight))))
+    `(modus-themes-hl-line ((,class ,@(modus-themes--hl-line bg-hl-line 
bg-hl-line-intense blue-nuanced-bg
+                                                             bg-region 
blue-intense-bg)
+                                    :extend t)))
+    `(modus-themes-key-binding ((,class :inherit bold :foreground 
,blue-alt-other)))
+    `(modus-themes-slant ((,class :inherit italic :slant 
,@(modus-themes--slant))))
+    `(modus-themes-variable-pitch ((,class ,@(modus-themes--variable-pitch))))
+    `(modus-themes-reset-soft ((,class :background ,bg-main :foreground 
,fg-main
+                                       :weight normal :slant normal 
:strike-through nil
+                                       :box nil :underline nil :overline nil 
:extend nil)))
+    `(modus-themes-reset-hard ((,class :inherit (fixed-pitch 
modus-themes-reset-soft))))
 ;;;; standard faces
 ;;;;; absolute essentials
     `(default ((,class :background ,bg-main :foreground ,fg-main)))
@@ -3114,7 +3263,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(bold-italic ((,class :inherit (bold italic))))
     `(buffer-menu-buffer ((,class :inherit bold)))
     `(comint-highlight-input ((,class :inherit bold)))
-    `(comint-highlight-prompt ((,class :inherit modus-theme-bold
+    `(comint-highlight-prompt ((,class :inherit modus-themes-bold
                                        ,@(modus-themes--prompt
                                           cyan
                                           blue-nuanced-bg blue-alt
@@ -3124,8 +3273,10 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(file-name-shadow ((,class :foreground ,fg-unfocused)))
     `(header-line ((,class ,@(modus-themes--variable-pitch-ui)
                            :background ,bg-header :foreground ,fg-header)))
-    `(header-line-highlight ((,class :inherit modus-theme-active-blue)))
-    `(help-argument-name ((,class :inherit modus-theme-slant :foreground 
,cyan)))
+    `(header-line-highlight ((,class :inherit modus-themes-active-blue)))
+    `(help-argument-name ((,class :inherit modus-themes-slant :foreground 
,cyan)))
+    `(help-key-binding ((,class :box (:line-width (1 . -1) :color ,bg-region) 
; NOTE: box syntax is for Emacs28
+                                :background ,bg-inactive)))
     `(homoglyph ((,class :foreground ,red-alt-faint)))
     `(ibuffer-locked-buffer ((,class :foreground ,yellow-alt-other-faint)))
     `(italic ((,class :slant italic)))
@@ -3137,10 +3288,10 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                     cyan-refine-bg fg-main))))
     `(mm-command-output ((,class :foreground ,red-alt-other)))
     `(mm-uu-extract ((,class :background ,bg-dim :foreground 
,fg-special-mild)))
-    `(next-error ((,class :inherit modus-theme-subtle-red)))
-    `(rectangle-preview ((,class :inherit modus-theme-special-mild)))
-    `(region ((,class ,@(modus-themes--region bg-region fg-main 
bg-hl-alt-intense))))
-    `(secondary-selection ((,class :inherit modus-theme-special-cold)))
+    `(next-error ((,class :inherit modus-themes-subtle-red)))
+    `(rectangle-preview ((,class :inherit modus-themes-special-mild)))
+    `(region ((,class ,@(modus-themes--region bg-region fg-main 
bg-hl-alt-intense bg-region-accent))))
+    `(secondary-selection ((,class :inherit modus-themes-special-cold)))
     `(shadow ((,class :foreground ,fg-alt)))
     `(success ((,class :inherit bold :foreground ,green)))
     `(trailing-whitespace ((,class :background ,red-intense-bg)))
@@ -3163,7 +3314,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(widget-single-line-field ((,class :inherit widget-field)))
 ;;;;; ag
     `(ag-hit-face ((,class :foreground ,fg-special-cold)))
-    `(ag-match-face ((,class :inherit modus-theme-special-calm)))
+    `(ag-match-face ((,class :inherit modus-themes-special-calm)))
 ;;;;; alert
     `(alert-high-face ((,class :inherit bold :foreground ,red-alt)))
     `(alert-low-face ((,class :foreground ,fg-special-mild)))
@@ -3207,28 +3358,28 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(all-the-icons-silver ((,class :foreground ,fg-special-cold)))
     `(all-the-icons-yellow ((,class :foreground ,yellow)))
 ;;;;; annotate
-    `(annotate-annotation ((,class :inherit modus-theme-subtle-blue)))
-    `(annotate-annotation-secondary ((,class :inherit 
modus-theme-subtle-green)))
+    `(annotate-annotation ((,class :inherit modus-themes-subtle-blue)))
+    `(annotate-annotation-secondary ((,class :inherit 
modus-themes-subtle-green)))
     `(annotate-highlight ((,class :background ,blue-nuanced-bg :underline 
,blue-intense)))
     `(annotate-highlight-secondary ((,class :background ,green-nuanced-bg 
:underline ,green-intense)))
 ;;;;; anzu
-    `(anzu-match-1 ((,class :inherit modus-theme-subtle-cyan)))
-    `(anzu-match-2 ((,class :inherit modus-theme-subtle-green)))
-    `(anzu-match-3 ((,class :inherit modus-theme-subtle-yellow)))
+    `(anzu-match-1 ((,class :inherit modus-themes-subtle-cyan)))
+    `(anzu-match-2 ((,class :inherit modus-themes-subtle-green)))
+    `(anzu-match-3 ((,class :inherit modus-themes-subtle-yellow)))
     `(anzu-mode-line ((,class :inherit bold :foreground ,green-active)))
     `(anzu-mode-line-no-match ((,class :inherit bold :foreground ,red-active)))
-    `(anzu-replace-highlight ((,class :inherit modus-theme-refine-yellow 
:underline t)))
-    `(anzu-replace-to ((,class :inherit (modus-theme-intense-green bold))))
+    `(anzu-replace-highlight ((,class :inherit modus-themes-refine-yellow 
:underline t)))
+    `(anzu-replace-to ((,class :inherit (modus-themes-intense-green bold))))
 ;;;;; apropos
     `(apropos-function-button ((,class :inherit button
                                        ,@(modus-themes--link-color
                                           magenta-alt-other 
magenta-alt-other-faint))))
-    `(apropos-keybinding ((,class :inherit bold :foreground ,cyan)))
+    `(apropos-keybinding ((,class :inherit modus-themes-key-binding)))
     `(apropos-misc-button ((,class :inherit button
                                    ,@(modus-themes--link-color
                                       cyan-alt-other cyan-alt-other-faint))))
-    `(apropos-property ((,class :inherit modus-theme-bold :foreground 
,magenta-alt)))
-    `(apropos-symbol ((,class :inherit modus-theme-bold :foreground 
,blue-alt-other)))
+    `(apropos-property ((,class :inherit modus-themes-bold :foreground 
,magenta-alt)))
+    `(apropos-symbol ((,class :inherit modus-themes-bold :foreground 
,magenta)))
     `(apropos-user-option-button ((,class :inherit button
                                           ,@(modus-themes--link-color
                                              green-alt-other 
green-alt-other-faint))))
@@ -3242,25 +3393,25 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(apt-sources-list-type ((,class :foreground ,magenta)))
     `(apt-sources-list-uri ((,class :foreground ,blue)))
 ;;;;; artbollocks-mode
-    `(artbollocks-face ((,class :inherit modus-theme-lang-note)))
+    `(artbollocks-face ((,class :inherit modus-themes-lang-note)))
     `(artbollocks-lexical-illusions-face ((,class :background ,bg-alt 
:foreground ,red-alt :underline t)))
-    `(artbollocks-passive-voice-face ((,class :inherit 
modus-theme-lang-warning)))
-    `(artbollocks-weasel-words-face ((,class :inherit modus-theme-lang-error)))
+    `(artbollocks-passive-voice-face ((,class :inherit 
modus-themes-lang-warning)))
+    `(artbollocks-weasel-words-face ((,class :inherit 
modus-themes-lang-error)))
 ;;;;; auctex and Tex
     `(font-latex-bold-face ((,class :inherit bold :foreground 
,fg-special-calm)))
-    `(font-latex-doctex-documentation-face ((,class :inherit modus-theme-slant 
:foreground ,fg-special-cold)))
-    `(font-latex-doctex-preprocessor-face ((,class :inherit modus-theme-bold 
:foreground ,red-alt-other)))
+    `(font-latex-doctex-documentation-face ((,class :inherit 
modus-themes-slant :foreground ,fg-special-cold)))
+    `(font-latex-doctex-preprocessor-face ((,class :inherit modus-themes-bold 
:foreground ,red-alt-other)))
     `(font-latex-italic-face ((,class :inherit italic :foreground 
,fg-special-calm)))
     `(font-latex-math-face ((,class :foreground ,cyan-alt-other)))
     `(font-latex-script-char-face ((,class :foreground ,cyan-alt-other)))
-    `(font-latex-sectioning-0-face ((,class :inherit 
modus-theme-variable-pitch :foreground ,blue-nuanced-fg)))
-    `(font-latex-sectioning-1-face ((,class :inherit (bold 
modus-theme-variable-pitch) :foreground ,blue-nuanced-fg)))
-    `(font-latex-sectioning-2-face ((,class :inherit (bold 
modus-theme-variable-pitch) :foreground ,blue-nuanced-fg)))
-    `(font-latex-sectioning-3-face ((,class :inherit (bold 
modus-theme-variable-pitch) :foreground ,blue-nuanced-fg)))
-    `(font-latex-sectioning-4-face ((,class :inherit (bold 
modus-theme-variable-pitch) :foreground ,blue-nuanced-fg)))
-    `(font-latex-sectioning-5-face ((,class :inherit 
modus-theme-variable-pitch :foreground ,blue-nuanced-fg)))
-    `(font-latex-sedate-face ((,class :inherit modus-theme-bold :foreground 
,magenta-alt-other)))
-    `(font-latex-slide-title-face ((,class :inherit (bold 
modus-theme-variable-pitch) :foreground ,cyan-nuanced-fg
+    `(font-latex-sectioning-0-face ((,class :inherit 
modus-themes-variable-pitch :foreground ,blue-nuanced-fg)))
+    `(font-latex-sectioning-1-face ((,class :inherit (bold 
modus-themes-variable-pitch) :foreground ,blue-nuanced-fg)))
+    `(font-latex-sectioning-2-face ((,class :inherit (bold 
modus-themes-variable-pitch) :foreground ,blue-nuanced-fg)))
+    `(font-latex-sectioning-3-face ((,class :inherit (bold 
modus-themes-variable-pitch) :foreground ,blue-nuanced-fg)))
+    `(font-latex-sectioning-4-face ((,class :inherit (bold 
modus-themes-variable-pitch) :foreground ,blue-nuanced-fg)))
+    `(font-latex-sectioning-5-face ((,class :inherit 
modus-themes-variable-pitch :foreground ,blue-nuanced-fg)))
+    `(font-latex-sedate-face ((,class :inherit modus-themes-bold :foreground 
,magenta-alt-other)))
+    `(font-latex-slide-title-face ((,class :inherit (bold 
modus-themes-variable-pitch) :foreground ,cyan-nuanced-fg
                                            ,@(modus-themes--scale 
modus-themes-scale-4))))
     `(font-latex-string-face ((,class :inherit font-lock-string-face)))
     `(font-latex-subscript-face ((,class :height 0.95)))
@@ -3277,17 +3428,18 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; auto-dim-other-buffers
     `(auto-dim-other-buffers-face ((,class :background ,bg-alt)))
 ;;;;; avy
-    `(avy-background-face ((,class :background ,bg-dim :foreground ,fg-dim)))
-    `(avy-goto-char-timer-face ((,class :inherit (modus-theme-intense-yellow 
bold))))
-    `(avy-lead-face ((,class :inherit (modus-theme-intense-magenta bold))))
-    `(avy-lead-face-0 ((,class :inherit (modus-theme-intense-blue bold))))
-    `(avy-lead-face-1 ((,class :inherit (modus-theme-intense-red bold))))
-    `(avy-lead-face-2 ((,class :inherit (modus-theme-intense-green bold))))
+    `(avy-background-face ((,class :background ,bg-dim :foreground ,fg-dim 
:extend t)))
+    `(avy-goto-char-timer-face ((,class :inherit (modus-themes-intense-yellow 
bold))))
+    `(avy-lead-face ((,class :inherit (modus-themes-intense-magenta bold 
modus-themes-reset-soft))))
+    `(avy-lead-face-0 ((,class :inherit (modus-themes-refine-cyan bold 
modus-themes-reset-soft))))
+    `(avy-lead-face-1 ((,class :inherit (modus-themes-intense-neutral bold 
modus-themes-reset-soft))))
+    `(avy-lead-face-2 ((,class :inherit (modus-themes-refine-red bold 
modus-themes-reset-soft))))
 ;;;;; aw (ace-window)
-    `(aw-background-face ((,class :background ,bg-dim :foreground ,fg-dim)))
-    `(aw-key-face ((,class :inherit bold :foreground ,blue-intense)))
-    `(aw-leading-char-face ((,class :inherit bold :height 1.5 :slant normal 
:background ,bg-main :foreground ,red-intense)))
-    `(aw-minibuffer-leading-char-face ((,class :foreground ,magenta-active)))
+    `(aw-background-face ((,class :foreground ,fg-unfocused)))
+    `(aw-key-face ((,class :inherit modus-themes-key-binding)))
+    `(aw-leading-char-face ((,class :inherit (bold modus-themes-reset-soft) 
:height 1.5
+                                    :foreground ,red-intense)))
+    `(aw-minibuffer-leading-char-face ((,class :inherit 
(modus-themes-intense-red bold))))
     `(aw-mode-line-face ((,class :inherit bold)))
 ;;;;; awesome-tray
     `(awesome-tray-module-awesome-tab-face ((,class :inherit bold :foreground 
,red-alt-other)))
@@ -3307,47 +3459,47 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(bbdb-organization ((,class :foreground ,red-alt-other)))
     `(bbdb-field-name ((,class :foreground ,cyan-alt-other)))
 ;;;;; binder
-    `(binder-sidebar-highlight ((,class :inherit modus-theme-subtle-cyan)))
-    `(binder-sidebar-marked ((,class :inherit modus-theme-mark-sel)))
-    `(binder-sidebar-missing ((,class :inherit modus-theme-subtle-red)))
+    `(binder-sidebar-highlight ((,class :inherit modus-themes-subtle-cyan)))
+    `(binder-sidebar-marked ((,class :inherit modus-themes-mark-sel)))
+    `(binder-sidebar-missing ((,class :inherit modus-themes-subtle-red)))
     `(binder-sidebar-tags ((,class :foreground ,cyan)))
 ;;;;; bm
-    `(bm-face ((,class :inherit modus-theme-subtle-yellow :extend t)))
-    `(bm-fringe-face ((,class :inherit modus-theme-fringe-yellow)))
-    `(bm-fringe-persistent-face ((,class :inherit modus-theme-fringe-blue)))
-    `(bm-persistent-face ((,class :inherit modus-theme-intense-blue :extend 
t)))
+    `(bm-face ((,class :inherit modus-themes-subtle-yellow :extend t)))
+    `(bm-fringe-face ((,class :inherit modus-themes-fringe-yellow)))
+    `(bm-fringe-persistent-face ((,class :inherit modus-themes-fringe-blue)))
+    `(bm-persistent-face ((,class :inherit modus-themes-intense-blue :extend 
t)))
 ;;;;; bongo
-    `(bongo-album-title ((,class :foreground ,yellow-active)))
+    `(bongo-album-title ((,class :foreground ,fg-active)))
     `(bongo-artist ((,class :foreground ,magenta-active)))
     `(bongo-currently-playing-track ((,class :inherit bold)))
-    `(bongo-elapsed-track-part ((,class :inherit modus-theme-subtle-magenta 
:underline t)))
+    `(bongo-elapsed-track-part ((,class :inherit modus-themes-subtle-magenta 
:underline t)))
     `(bongo-filled-seek-bar ((,class :background ,blue-intense-bg :foreground 
,fg-main)))
     `(bongo-marked-track ((,class :foreground ,fg-mark-alt)))
     `(bongo-marked-track-line ((,class :background ,bg-mark-alt)))
     `(bongo-played-track ((,class :foreground ,fg-unfocused :strike-through 
t)))
-    `(bongo-track-length ((,class :foreground ,fg-active)))
-    `(bongo-track-title ((,class :foreground ,cyan-active)))
+    `(bongo-track-length ((,class :foreground ,fg-alt)))
+    `(bongo-track-title ((,class :foreground ,blue-active)))
     `(bongo-unfilled-seek-bar ((,class :background ,bg-special-cold 
:foreground ,fg-main)))
 ;;;;; boon
-    `(boon-modeline-cmd ((,class :inherit modus-theme-active-blue)))
-    `(boon-modeline-ins ((,class :inherit modus-theme-active-red)))
-    `(boon-modeline-off ((,class :inherit modus-theme-active-yellow)))
-    `(boon-modeline-spc ((,class :inherit modus-theme-active-green)))
+    `(boon-modeline-cmd ((,class :inherit modus-themes-active-blue)))
+    `(boon-modeline-ins ((,class :inherit modus-themes-active-red)))
+    `(boon-modeline-off ((,class :inherit modus-themes-active-yellow)))
+    `(boon-modeline-spc ((,class :inherit modus-themes-active-green)))
 ;;;;; breakpoint (built-in gdb-mi.el)
     `(breakpoint-disabled ((,class :inherit shadow)))
     `(breakpoint-enabled ((,class :inherit bold :foreground ,red)))
 ;;;;; buffer-expose
     `(buffer-expose-ace-char-face ((,class :inherit bold :foreground 
,red-active)))
     `(buffer-expose-mode-line-face ((,class :foreground ,cyan-active)))
-    `(buffer-expose-selected-face ((,class :inherit modus-theme-special-mild)))
+    `(buffer-expose-selected-face ((,class :inherit 
modus-themes-special-mild)))
 ;;;;; calendar and diary
-    `(calendar-month-header ((,class :inherit modus-theme-pseudo-header)))
+    `(calendar-month-header ((,class :inherit modus-themes-pseudo-header)))
     `(calendar-today ((,class :inherit bold :underline t)))
-    `(calendar-weekday-header ((,class :inherit shadow)))
-    `(calendar-weekend-header ((,class :inherit shadow)))
-    `(diary ((,class :background ,green-nuanced-bg :foreground 
,green-alt-other)))
+    `(calendar-weekday-header ((,class :foreground ,fg-unfocused)))
+    `(calendar-weekend-header ((,class :foreground ,fg-unfocused)))
+    `(diary ((,class :background ,blue-nuanced-bg :foreground 
,blue-alt-other)))
     `(diary-anniversary ((,class :foreground ,red-alt-other)))
-    `(diary-time ((,class :foreground ,blue-alt)))
+    `(diary-time ((,class :foreground ,cyan)))
     `(holiday ((,class :background ,magenta-nuanced-bg :foreground 
,magenta-alt)))
 ;;;;; calfw
     `(cfw:face-annotation ((,class :foreground ,fg-special-warm)))
@@ -3360,9 +3512,9 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(cfw:face-holiday ((,class :foreground ,magenta-alt-other)))
     `(cfw:face-periods ((,class :foreground ,cyan-alt-other)))
     `(cfw:face-saturday ((,class :inherit bold :foreground ,cyan-alt-other)))
-    `(cfw:face-select ((,class :inherit modus-theme-intense-blue)))
+    `(cfw:face-select ((,class :inherit modus-themes-intense-blue)))
     `(cfw:face-sunday ((,class :inherit bold :foreground ,cyan-alt-other)))
-    `(cfw:face-title ((,class :inherit modus-theme-variable-pitch
+    `(cfw:face-title ((,class :inherit modus-themes-variable-pitch
                               :foreground ,fg-special-cold
                               ,@(modus-themes--scale modus-themes-scale-5))))
     `(cfw:face-today ((,class :background ,bg-inactive)))
@@ -3372,7 +3524,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(cfw:face-toolbar-button-on ((,class :inherit bold :background 
,blue-nuanced-bg
                                           :foreground ,blue-alt)))
 ;;;;; centaur-tabs
-    `(centaur-tabs-active-bar-face ((,class :background ,fg-tab-active)))
+    `(centaur-tabs-active-bar-face ((,class :background ,fg-tab-accent)))
     `(centaur-tabs-close-mouse-face ((,class :inherit bold :foreground 
,red-active :underline t)))
     `(centaur-tabs-close-selected ((,class :inherit centaur-tabs-selected)))
     `(centaur-tabs-close-unselected ((,class :inherit 
centaur-tabs-unselected)))
@@ -3403,7 +3555,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; cider
     `(cider-debug-code-overlay-face ((,class :background ,bg-alt)))
     `(cider-debug-prompt-face ((,class :foreground ,magenta-alt :underline t)))
-    `(cider-deprecated-face ((,class :inherit modus-theme-refine-yellow)))
+    `(cider-deprecated-face ((,class :inherit modus-themes-refine-yellow)))
     `(cider-docview-emphasis-face ((,class :inherit italic :foreground 
,fg-special-cold)))
     `(cider-docview-literal-face ((,class :foreground ,blue-alt)))
     `(cider-docview-strong-face ((,class :inherit bold :foreground 
,fg-special-cold)))
@@ -3416,7 +3568,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(cider-instrumented-face ((,class :box (:line-width -1 :color ,red :style 
nil) :background ,bg-dim)))
     `(cider-reader-conditional-face ((,class :inherit italic :foreground 
,fg-special-warm)))
     `(cider-repl-input-face ((,class :inherit bold)))
-    `(cider-repl-prompt-face ((,class :foreground ,cyan-alt-other)))
+    `(cider-repl-prompt-face ((,class :inherit comint-highlight-prompt)))
     `(cider-repl-stderr-face ((,class :inherit bold :foreground ,red)))
     `(cider-repl-stdout-face ((,class :foreground ,blue)))
     `(cider-result-overlay-face ((,class :box (:line-width -1 :color ,blue 
:style nil) :background ,bg-dim)))
@@ -3430,15 +3582,15 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(cider-stacktrace-promoted-button-face ((,class :box (:line-width 3 
:color ,fg-alt :style released-button) :foreground ,red)))
     `(cider-stacktrace-suppressed-button-face ((,class :box (:line-width 3 
:color ,fg-alt :style pressed-button)
                                                        :background ,bg-alt 
:foreground ,fg-alt)))
-    `(cider-test-error-face ((,class :inherit modus-theme-subtle-red)))
-    `(cider-test-failure-face ((,class :inherit (modus-theme-intense-red 
bold))))
-    `(cider-test-success-face ((,class :inherit modus-theme-intense-green)))
+    `(cider-test-error-face ((,class :inherit modus-themes-subtle-red)))
+    `(cider-test-failure-face ((,class :inherit (modus-themes-intense-red 
bold))))
+    `(cider-test-success-face ((,class :inherit modus-themes-intense-green)))
     `(cider-traced-face ((,class :box (:line-width -1 :color ,cyan :style nil) 
:background ,bg-dim)))
     `(cider-warning-highlight-face ((,class :foreground ,yellow :underline t)))
 ;;;;; circe (and lui)
     `(circe-fool-face ((,class :inherit shadow)))
     `(circe-highlight-nick-face ((,class :inherit bold :foreground ,blue)))
-    `(circe-prompt-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+    `(circe-prompt-face ((,class :inherit comint-highlight-prompt)))
     `(circe-server-face ((,class :foreground ,fg-unfocused)))
     `(lui-button-face ((,class :inherit button)))
     `(lui-highlight-face ((,class :foreground ,magenta-alt)))
@@ -3447,8 +3599,8 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(color-rg-font-lock-column-number ((,class :foreground 
,magenta-alt-other)))
     `(color-rg-font-lock-command ((,class :inherit bold :foreground ,fg-main)))
     `(color-rg-font-lock-file ((,class :inherit bold :foreground 
,fg-special-cold)))
-    `(color-rg-font-lock-flash ((,class :inherit modus-theme-intense-blue)))
-    `(color-rg-font-lock-function-location ((,class :inherit 
modus-theme-special-calm)))
+    `(color-rg-font-lock-flash ((,class :inherit modus-themes-intense-blue)))
+    `(color-rg-font-lock-function-location ((,class :inherit 
modus-themes-special-calm)))
     `(color-rg-font-lock-header-line-directory ((,class :foreground 
,blue-active)))
     `(color-rg-font-lock-header-line-edit-mode ((,class :foreground 
,magenta-active)))
     `(color-rg-font-lock-header-line-keyword ((,class :foreground 
,green-active)))
@@ -3456,42 +3608,42 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(color-rg-font-lock-line-number ((,class :foreground ,fg-special-warm)))
     `(color-rg-font-lock-mark-changed ((,class :inherit bold :foreground 
,blue)))
     `(color-rg-font-lock-mark-deleted ((,class :inherit bold :foreground 
,red)))
-    `(color-rg-font-lock-match ((,class :inherit modus-theme-special-calm)))
+    `(color-rg-font-lock-match ((,class :inherit modus-themes-special-calm)))
     `(color-rg-font-lock-position-splitter ((,class :inherit shadow)))
 ;;;;; column-enforce-mode
-    `(column-enforce-face ((,class :inherit modus-theme-refine-yellow)))
+    `(column-enforce-face ((,class :inherit modus-themes-refine-yellow)))
 ;;;;; company-mode
     `(company-echo-common ((,class :foreground ,magenta-alt-other)))
     `(company-preview ((,class :background ,bg-dim :foreground ,fg-dim)))
     `(company-preview-common ((,class :foreground ,blue-alt)))
-    `(company-preview-search ((,class :inherit modus-theme-special-calm)))
+    `(company-preview-search ((,class :inherit modus-themes-special-calm)))
     `(company-scrollbar-bg ((,class :background ,bg-active)))
     `(company-scrollbar-fg ((,class :background ,fg-active)))
-    `(company-template-field ((,class :inherit modus-theme-intense-magenta)))
+    `(company-template-field ((,class :inherit modus-themes-intense-magenta)))
     `(company-tooltip ((,class :background ,bg-alt :foreground ,fg-alt)))
-    `(company-tooltip-annotation ((,class :inherit modus-theme-slant 
:foreground ,fg-special-cold)))
+    `(company-tooltip-annotation ((,class :inherit modus-themes-slant 
:foreground ,fg-special-cold)))
     `(company-tooltip-annotation-selection ((,class :inherit bold :foreground 
,fg-main)))
     `(company-tooltip-common ((,class :inherit bold :foreground ,blue-alt)))
     `(company-tooltip-common-selection ((,class :foreground ,fg-main)))
-    `(company-tooltip-mouse ((,class :inherit modus-theme-intense-blue)))
-    `(company-tooltip-search ((,class :inherit (modus-theme-refine-cyan 
bold))))
-    `(company-tooltip-search-selection ((,class :inherit 
(modus-theme-intense-green bold) :underline t)))
-    `(company-tooltip-selection ((,class :inherit (modus-theme-subtle-cyan 
bold))))
+    `(company-tooltip-mouse ((,class :inherit modus-themes-intense-blue)))
+    `(company-tooltip-search ((,class :inherit (modus-themes-refine-cyan 
bold))))
+    `(company-tooltip-search-selection ((,class :inherit 
(modus-themes-intense-green bold) :underline t)))
+    `(company-tooltip-selection ((,class :inherit (modus-themes-subtle-cyan 
bold))))
 ;;;;; company-posframe
     `(company-posframe-active-backend-name ((,class :inherit bold :background 
,bg-active :foreground ,blue-active)))
     `(company-posframe-inactive-backend-name ((,class :background ,bg-active 
:foreground ,fg-active)))
     `(company-posframe-metadata ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
 ;;;;; compilation feedback
     `(compilation-column-number ((,class :foreground ,magenta-alt-other)))
-    `(compilation-error ((,class :inherit modus-theme-bold :foreground ,red)))
-    `(compilation-info ((,class :inherit modus-theme-bold :foreground 
,fg-special-cold)))
+    `(compilation-error ((,class :inherit modus-themes-bold :foreground ,red)))
+    `(compilation-info ((,class :inherit modus-themes-bold :foreground 
,fg-special-cold)))
     `(compilation-line-number ((,class :foreground ,fg-special-warm)))
-    `(compilation-mode-line-exit ((,class :inherit modus-theme-bold 
:foreground ,blue-active)))
-    `(compilation-mode-line-fail ((,class :inherit modus-theme-bold 
:foreground ,red-active)))
-    `(compilation-mode-line-run ((,class :inherit modus-theme-bold :foreground 
,magenta-active)))
-    `(compilation-warning ((,class :inherit modus-theme-bold :foreground 
,yellow)))
+    `(compilation-mode-line-exit ((,class :inherit modus-themes-bold 
:foreground ,blue-active)))
+    `(compilation-mode-line-fail ((,class :inherit modus-themes-bold 
:foreground ,red-active)))
+    `(compilation-mode-line-run ((,class :inherit modus-themes-bold 
:foreground ,magenta-active)))
+    `(compilation-warning ((,class :inherit modus-themes-bold :foreground 
,yellow)))
 ;;;;; completions
-    `(completions-annotations ((,class :inherit modus-theme-slant :foreground 
,cyan-faint)))
+    `(completions-annotations ((,class :inherit modus-themes-slant :foreground 
,cyan-faint)))
     `(completions-common-part ((,class ,@(modus-themes--standard-completions
                                           blue-alt blue-nuanced-bg
                                           cyan-refine-bg cyan-refine-fg))))
@@ -3505,17 +3657,22 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(consult-bookmark ((,class :foreground ,blue)))
     `(consult-file ((,class :foreground ,fg-special-cold)))
     `(consult-imenu-prefix ((,class :inherit shadow)))
-    `(consult-key ((,class :inherit modus-themes-bold :foreground 
,magenta-alt-other)))
+    `(consult-key ((,class :inherit modus-themes-key-binding)))
     `(consult-line-number ((,class :foreground ,fg-special-warm)))
     `(consult-line-number-prefix ((,class :foreground ,fg-unfocused)))
     `(consult-narrow-indicator ((,class :foreground ,magenta-alt)))
-    `(consult-preview-cursor ((,class :inherit modus-theme-intense-blue)))
-    `(consult-preview-error ((,class :inherit modus-theme-intense-red)))
+    `(consult-preview-cursor ((,class :inherit modus-themes-intense-blue)))
+    `(consult-preview-error ((,class :inherit modus-themes-intense-red)))
     `(consult-preview-line ((,class :background ,bg-hl-alt-intense)))
+;;;;; corfu
+    `(corfu-background ((,class :background ,bg-alt :foreground ,fg-alt)))
+    `(corfu-current ((,class :inherit bold :background ,cyan-subtle-bg)))
+    `(corfu-bar ((,class :background ,fg-alt :foreground ,fg-alt)))
+    `(corfu-border ((,class :background ,bg-active :foreground ,bg-region)))
 ;;;;; counsel
     `(counsel-active-mode ((,class :foreground ,magenta-alt-other)))
     `(counsel-application-name ((,class :foreground ,red-alt-other)))
-    `(counsel-key-binding ((,class :inherit bold :foreground ,blue-alt-other)))
+    `(counsel-key-binding ((,class :inherit modus-themes-key-binding)))
     `(counsel-outline-1 ((,class :inherit org-level-1)))
     `(counsel-outline-2 ((,class :inherit org-level-2)))
     `(counsel-outline-3 ((,class :inherit org-level-3)))
@@ -3525,7 +3682,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(counsel-outline-7 ((,class :inherit org-level-7)))
     `(counsel-outline-8 ((,class :inherit org-level-8)))
     `(counsel-outline-default ((,class :foreground ,fg-main)))
-    `(counsel-variable-documentation ((,class :inherit modus-theme-slant 
:foreground ,yellow-alt-other)))
+    `(counsel-variable-documentation ((,class :inherit modus-themes-slant 
:foreground ,yellow-alt-other)))
 ;;;;; counsel-css
     `(counsel-css-selector-depth-face-1 ((,class :foreground ,blue)))
     `(counsel-css-selector-depth-face-2 ((,class :foreground ,cyan)))
@@ -3554,9 +3711,9 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; csv-mode
     `(csv-separator-face ((,class :background ,bg-special-cold :foreground 
,fg-main)))
 ;;;;; ctrlf
-    `(ctrlf-highlight-active ((,class :inherit (modus-theme-intense-green 
bold))))
-    `(ctrlf-highlight-line ((,class :inherit modus-theme-hl-line)))
-    `(ctrlf-highlight-passive ((,class :inherit modus-theme-refine-cyan)))
+    `(ctrlf-highlight-active ((,class :inherit (modus-themes-intense-green 
bold))))
+    `(ctrlf-highlight-line ((,class :inherit modus-themes-hl-line)))
+    `(ctrlf-highlight-passive ((,class :inherit modus-themes-refine-cyan)))
 ;;;;; custom (M-x customize)
     `(custom-button ((,class :box (:line-width 2 :color nil :style 
released-button)
                              :background ,bg-active :foreground ,fg-main)))
@@ -3564,18 +3721,18 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                    :background ,bg-active :foreground 
,fg-active)))
     `(custom-button-pressed ((,class :box (:line-width 2 :color nil :style 
pressed-button)
                                      :background ,bg-active :foreground 
,fg-main)))
-    `(custom-changed ((,class :inherit modus-theme-subtle-cyan)))
+    `(custom-changed ((,class :inherit modus-themes-subtle-cyan)))
     `(custom-comment ((,class :inherit shadow)))
     `(custom-comment-tag ((,class :background ,bg-alt :foreground 
,yellow-alt-other)))
     `(custom-face-tag ((,class :inherit bold :foreground ,blue-intense)))
     `(custom-group-tag ((,class :inherit bold :foreground ,green-intense)))
-    `(custom-group-tag-1 ((,class :inherit modus-theme-special-warm)))
-    `(custom-invalid ((,class :inherit (modus-theme-intense-red bold))))
-    `(custom-modified ((,class :inherit modus-theme-subtle-cyan)))
-    `(custom-rogue ((,class :inherit modus-theme-refine-magenta)))
+    `(custom-group-tag-1 ((,class :inherit modus-themes-special-warm)))
+    `(custom-invalid ((,class :inherit (modus-themes-intense-red bold))))
+    `(custom-modified ((,class :inherit modus-themes-subtle-cyan)))
+    `(custom-rogue ((,class :inherit modus-themes-refine-magenta)))
     `(custom-set ((,class :foreground ,blue-alt)))
     `(custom-state ((,class :foreground ,cyan-alt-other)))
-    `(custom-themed ((,class :inherit modus-theme-subtle-blue)))
+    `(custom-themed ((,class :inherit modus-themes-subtle-blue)))
     `(custom-variable-tag ((,class :inherit bold :foreground ,cyan)))
 ;;;;; dap-mode
     `(dap-mouse-eval-thing-face ((,class :box (:line-width -1 :color 
,blue-active :style nil)
@@ -3587,7 +3744,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(dap-ui-locals-scope-face ((,class :inherit bold :foreground ,magenta 
:underline t)))
     `(dap-ui-locals-variable-face ((,class :inherit bold :foreground ,cyan)))
     `(dap-ui-locals-variable-leaf-face ((,class :inherit italic :foreground 
,cyan-alt-other)))
-    `(dap-ui-marker-face ((,class :inherit modus-theme-subtle-blue)))
+    `(dap-ui-marker-face ((,class :inherit modus-themes-subtle-blue)))
     `(dap-ui-sessions-stack-frame-face ((,class :inherit bold :foreground 
,magenta-alt)))
     `(dap-ui-sessions-terminated-active-face ((,class :inherit bold 
:foreground ,fg-alt)))
     `(dap-ui-sessions-terminated-face ((,class :inherit shadow)))
@@ -3599,7 +3756,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(dashboard-text-banner ((,class :foreground ,fg-dim)))
 ;;;;; deadgrep
     `(deadgrep-filename-face ((,class :inherit bold :foreground 
,fg-special-cold)))
-    `(deadgrep-match-face ((,class :inherit modus-theme-special-calm)))
+    `(deadgrep-match-face ((,class :inherit modus-themes-special-calm)))
     `(deadgrep-meta-face ((,class :inherit shadow)))
     `(deadgrep-regexp-metachar-face ((,class :inherit bold :foreground 
,yellow-intense)))
     `(deadgrep-search-term-face ((,class :inherit bold :foreground 
,green-intense)))
@@ -3620,11 +3777,11 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(define-word-face-1 ((,class :foreground ,yellow)))
     `(define-word-face-2 ((,class :foreground ,fg-main)))
 ;;;;; deft
-    `(deft-filter-string-error-face ((,class :inherit modus-theme-refine-red)))
+    `(deft-filter-string-error-face ((,class :inherit 
modus-themes-refine-red)))
     `(deft-filter-string-face ((,class :foreground ,green-intense)))
     `(deft-header-face ((,class :inherit bold :foreground ,fg-special-warm)))
     `(deft-separator-face ((,class :inherit shadow)))
-    `(deft-summary-face ((,class :inherit modus-theme-slant :foreground 
,fg-alt)))
+    `(deft-summary-face ((,class :inherit modus-themes-slant :foreground 
,fg-alt)))
     `(deft-time-face ((,class :foreground ,fg-special-cold)))
     `(deft-title-face ((,class :inherit bold :foreground ,fg-main)))
 ;;;;; dictionary
@@ -3633,34 +3790,34 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(dictionary-word-definition-face (()))
     `(dictionary-word-entry-face ((,class :inherit font-lock-comment-face)))
 ;;;;; diff-hl
-    `(diff-hl-change ((,class :inherit modus-theme-fringe-yellow)))
-    `(diff-hl-delete ((,class :inherit modus-theme-fringe-red)))
+    `(diff-hl-change ((,class :inherit modus-themes-fringe-yellow)))
+    `(diff-hl-delete ((,class :inherit modus-themes-fringe-red)))
     `(diff-hl-dired-change ((,class :inherit diff-hl-change)))
     `(diff-hl-dired-delete ((,class :inherit diff-hl-delete)))
     `(diff-hl-dired-ignored ((,class :inherit dired-ignored)))
     `(diff-hl-dired-insert ((,class :inherit diff-hl-insert)))
     `(diff-hl-dired-unknown ((,class :inherit dired-ignored)))
-    `(diff-hl-insert ((,class :inherit modus-theme-fringe-green)))
-    `(diff-hl-reverted-hunk-highlight ((,class :inherit 
(modus-theme-active-magenta bold))))
+    `(diff-hl-insert ((,class :inherit modus-themes-fringe-green)))
+    `(diff-hl-reverted-hunk-highlight ((,class :inherit 
(modus-themes-active-magenta bold))))
 ;;;;; diff-mode
-    `(diff-added ((,class :inherit modus-theme-diff-added)))
-    `(diff-changed ((,class :inherit modus-theme-diff-changed :extend t)))
+    `(diff-added ((,class :inherit modus-themes-diff-added)))
+    `(diff-changed ((,class :inherit modus-themes-diff-changed :extend t)))
     `(diff-context ((,class ,@(modus-themes--diff-text fg-main fg-unfocused))))
-    `(diff-error ((,class :inherit modus-theme-intense-red)))
+    `(diff-error ((,class :inherit modus-themes-intense-red)))
     `(diff-file-header ((,class :inherit (bold diff-header))))
-    `(diff-function ((,class :inherit modus-theme-diff-heading)))
+    `(diff-function ((,class :inherit modus-themes-diff-heading)))
     `(diff-header ((,class ,@(modus-themes--diff-text cyan-faint fg-main))))
-    `(diff-hunk-header ((,class :inherit (bold modus-theme-diff-heading))))
+    `(diff-hunk-header ((,class :inherit (bold modus-themes-diff-heading))))
     `(diff-index ((,class :inherit bold :foreground ,blue-alt)))
     `(diff-indicator-added ((,class :inherit (diff-added bold)
                                     :foreground ,@(modus-themes--diff-deuteran 
blue green))))
     `(diff-indicator-changed ((,class :inherit (diff-changed bold) :foreground 
,yellow)))
     `(diff-indicator-removed ((,class :inherit (diff-removed bold) :foreground 
,red)))
-    `(diff-nonexistent ((,class :inherit (modus-theme-neutral bold))))
-    `(diff-refine-added ((,class :inherit modus-theme-diff-refine-added)))
-    `(diff-refine-changed ((,class :inherit modus-theme-diff-refine-changed)))
-    `(diff-refine-removed ((,class :inherit modus-theme-diff-refine-removed)))
-    `(diff-removed ((,class :inherit modus-theme-diff-removed)))
+    `(diff-nonexistent ((,class :inherit (modus-themes-neutral bold))))
+    `(diff-refine-added ((,class :inherit modus-themes-diff-refine-added)))
+    `(diff-refine-changed ((,class :inherit modus-themes-diff-refine-changed)))
+    `(diff-refine-removed ((,class :inherit modus-themes-diff-refine-removed)))
+    `(diff-removed ((,class :inherit modus-themes-diff-removed)))
 ;;;;; dim-autoload
     `(dim-autoload-cookie-line ((,class :inherit font-lock-comment-face)))
 ;;;;; dir-treeview
@@ -3680,7 +3837,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(dir-treeview-image-icon-face ((,class :inherit 
dir-treeview-default-icon-face :foreground ,green-alt)))
     `(dir-treeview-indent-face ((,class :inherit shadow)))
     `(dir-treeview-label-mouse-face ((,class :inherit highlight)))
-    `(dir-treeview-start-dir-face ((,class :inherit 
modus-theme-pseudo-header)))
+    `(dir-treeview-start-dir-face ((,class :inherit 
modus-themes-pseudo-header)))
     `(dir-treeview-symlink-face ((,class :inherit button
                                          ,@(modus-themes--link-color
                                             cyan cyan-faint))))
@@ -3689,27 +3846,27 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; dired
     `(dired-broken-symlink ((,class :inherit button :foreground ,red)))
     `(dired-directory ((,class :foreground ,blue)))
-    `(dired-flagged ((,class :inherit modus-theme-mark-del)))
-    `(dired-header ((,class :inherit modus-theme-pseudo-header)))
+    `(dired-flagged ((,class :inherit modus-themes-mark-del)))
+    `(dired-header ((,class :inherit modus-themes-pseudo-header)))
     `(dired-ignored ((,class :inherit shadow)))
-    `(dired-mark ((,class :inherit modus-theme-mark-symbol)))
-    `(dired-marked ((,class :inherit modus-theme-mark-sel)))
+    `(dired-mark ((,class :inherit modus-themes-mark-symbol)))
+    `(dired-marked ((,class :inherit modus-themes-mark-sel)))
     `(dired-perm-write ((,class :foreground ,fg-special-warm)))
     `(dired-symlink ((,class :inherit button
                              ,@(modus-themes--link-color
                                 cyan-alt cyan-alt-faint))))
     `(dired-warning ((,class :inherit bold :foreground ,yellow)))
 ;;;;; dired-async
-    `(dired-async-failures ((,class :inherit modus-theme-bold :foreground 
,red-active)))
-    `(dired-async-message ((,class :inherit modus-theme-bold :foreground 
,green-active)))
-    `(dired-async-mode-message ((,class :inherit modus-theme-bold :foreground 
,cyan-active)))
+    `(dired-async-failures ((,class :inherit bold :foreground ,red-active)))
+    `(dired-async-message ((,class :inherit bold :foreground ,blue-active)))
+    `(dired-async-mode-message ((,class :inherit bold :foreground 
,cyan-active)))
 ;;;;; dired-git
     `(dired-git-branch-else ((,class :inherit bold :foreground ,magenta-alt)))
     `(dired-git-branch-master ((,class :inherit bold :foreground 
,magenta-alt-other)))
 ;;;;; dired-git-info
     `(dgi-commit-message-face ((,class :foreground ,fg-special-mild)))
 ;;;;; dired-narrow
-    `(dired-narrow-blink ((,class :inherit (modus-theme-subtle-cyan bold))))
+    `(dired-narrow-blink ((,class :inherit (modus-themes-subtle-cyan bold))))
 ;;;;; dired-subtree
     ;; remove backgrounds from dired-subtree faces, else they break
     ;; dired-{flagged,marked} and any other face that sets a background
@@ -3727,21 +3884,21 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(diredc-face-chmod-font-lock-read ((,class :foreground ,fg-main)))
     `(diredc-face-chmod-font-lock-write ((,class :foreground ,cyan)))
 ;;;;; diredfl
-    `(diredfl-autofile-name ((,class :inherit modus-theme-special-cold)))
+    `(diredfl-autofile-name ((,class :inherit modus-themes-special-cold)))
     `(diredfl-compressed-file-name ((,class :foreground ,fg-special-warm)))
     `(diredfl-compressed-file-suffix ((,class :foreground ,red-alt)))
     `(diredfl-date-time ((,class :foreground ,cyan-alt-other)))
-    `(diredfl-deletion ((,class :inherit modus-theme-mark-del)))
-    `(diredfl-deletion-file-name ((,class :inherit modus-theme-mark-del)))
-    `(diredfl-dir-heading ((,class :inherit modus-theme-pseudo-header)))
+    `(diredfl-deletion ((,class :inherit modus-themes-mark-del)))
+    `(diredfl-deletion-file-name ((,class :inherit modus-themes-mark-del)))
+    `(diredfl-dir-heading ((,class :inherit modus-themes-pseudo-header)))
     `(diredfl-dir-name ((,class :inherit dired-directory)))
     `(diredfl-dir-priv ((,class :foreground ,blue-alt)))
     `(diredfl-exec-priv ((,class :foreground ,magenta)))
     `(diredfl-executable-tag ((,class :foreground ,magenta-alt)))
     `(diredfl-file-name ((,class :foreground ,fg-main)))
     `(diredfl-file-suffix ((,class :foreground ,cyan)))
-    `(diredfl-flag-mark ((,class :inherit modus-theme-mark-sel)))
-    `(diredfl-flag-mark-line ((,class :inherit modus-theme-mark-sel)))
+    `(diredfl-flag-mark ((,class :inherit modus-themes-mark-sel)))
+    `(diredfl-flag-mark-line ((,class :inherit modus-themes-mark-sel)))
     `(diredfl-ignored-file-name ((,class :inherit shadow)))
     `(diredfl-link-priv ((,class :foreground ,blue-alt-other)))
     `(diredfl-no-priv ((,class :inherit shadow)))
@@ -3750,24 +3907,24 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(diredfl-rare-priv ((,class :foreground ,red-alt)))
     `(diredfl-read-priv ((,class :foreground ,fg-main)))
     `(diredfl-symlink ((,class :inherit dired-symlink)))
-    `(diredfl-tagged-autofile-name ((,class :inherit 
modus-theme-refine-magenta)))
+    `(diredfl-tagged-autofile-name ((,class :inherit 
modus-themes-refine-magenta)))
     `(diredfl-write-priv ((,class :foreground ,cyan)))
 ;;;;; dired+
-    `(diredp-autofile-name ((,class :inherit modus-theme-special-cold)))
+    `(diredp-autofile-name ((,class :inherit modus-themes-special-cold)))
     `(diredp-compressed-file-name ((,class :foreground ,fg-special-warm)))
     `(diredp-compressed-file-suffix ((,class :foreground ,red-alt)))
     `(diredp-date-time ((,class :foreground ,cyan-alt-other)))
-    `(diredp-deletion ((,class :inherit modus-theme-mark-del)))
-    `(diredp-deletion-file-name ((,class :inherit modus-theme-mark-del)))
-    `(diredp-dir-heading ((,class :inherit modus-theme-pseudo-header)))
+    `(diredp-deletion ((,class :inherit modus-themes-mark-del)))
+    `(diredp-deletion-file-name ((,class :inherit modus-themes-mark-del)))
+    `(diredp-dir-heading ((,class :inherit modus-themes-pseudo-header)))
     `(diredp-dir-name ((,class :inherit dired-directory)))
     `(diredp-dir-priv ((,class :foreground ,blue-alt)))
     `(diredp-exec-priv ((,class :foreground ,magenta)))
     `(diredp-executable-tag ((,class :foreground ,magenta-alt)))
     `(diredp-file-name ((,class :foreground ,fg-main)))
     `(diredp-file-suffix ((,class :foreground ,cyan)))
-    `(diredp-flag-mark ((,class :inherit modus-theme-mark-sel)))
-    `(diredp-flag-mark-line ((,class :inherit modus-theme-mark-sel)))
+    `(diredp-flag-mark ((,class :inherit modus-themes-mark-sel)))
+    `(diredp-flag-mark-line ((,class :inherit modus-themes-mark-sel)))
     `(diredp-ignored-file-name ((,class :inherit shadow)))
     `(diredp-link-priv ((,class :foreground ,blue-alt-other)))
     `(diredp-mode-line-flagged ((,class :foreground ,red-active)))
@@ -3779,7 +3936,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(diredp-rare-priv ((,class :foreground ,red-alt)))
     `(diredp-read-priv ((,class :foreground ,fg-main)))
     `(diredp-symlink ((,class :inherit dired-symlink)))
-    `(diredp-tagged-autofile-name ((,class :inherit 
modus-theme-refine-magenta)))
+    `(diredp-tagged-autofile-name ((,class :inherit 
modus-themes-refine-magenta)))
     `(diredp-write-priv ((,class :foreground ,cyan)))
 ;;;;; disk-usage
     `(disk-usage-children ((,class :foreground ,yellow)))
@@ -3791,7 +3948,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; display-fill-column-indicator-mode
     `(fill-column-indicator ((,class :foreground ,bg-active)))
 ;;;;; doom-modeline
-    `(doom-modeline-bar ((,class :inherit modus-theme-active-blue)))
+    `(doom-modeline-bar ((,class :inherit modus-themes-active-blue)))
     `(doom-modeline-bar-inactive ((,class :background ,fg-inactive :foreground 
,bg-main)))
     `(doom-modeline-battery-charging ((,class :foreground ,green-active)))
     `(doom-modeline-battery-critical ((,class :inherit bold :foreground 
,red-active)))
@@ -3820,7 +3977,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(doom-modeline-lsp-error ((,class :inherit bold :foreground ,red-active)))
     `(doom-modeline-lsp-success ((,class :inherit bold :foreground 
,green-active)))
     `(doom-modeline-lsp-warning ((,class :inherit bold :foreground 
,yellow-active)))
-    `(doom-modeline-panel ((,class :inherit modus-theme-active-blue)))
+    `(doom-modeline-panel ((,class :inherit modus-themes-active-blue)))
     `(doom-modeline-persp-buffer-not-in-persp ((,class :inherit italic 
:foreground ,yellow-active)))
     `(doom-modeline-persp-name ((,class :foreground ,fg-active)))
     `(doom-modeline-project-dir ((,class :inherit bold :foreground 
,blue-active)))
@@ -3830,13 +3987,13 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(doom-modeline-urgent ((,class :inherit bold :foreground ,red-active)))
     `(doom-modeline-warning ((,class :inherit bold :foreground 
,yellow-active)))
 ;;;;; dynamic-ruler
-    `(dynamic-ruler-negative-face ((,class :inherit 
modus-theme-intense-neutral)))
-    `(dynamic-ruler-positive-face ((,class :inherit 
modus-theme-intense-yellow)))
+    `(dynamic-ruler-negative-face ((,class :inherit 
modus-themes-intense-neutral)))
+    `(dynamic-ruler-positive-face ((,class :inherit 
modus-themes-intense-yellow)))
 ;;;;; easy-jekyll
     `(easy-jekyll-help-face ((,class :background ,bg-dim :foreground 
,cyan-alt-other)))
 ;;;;; easy-kill
-    `(easy-kill-origin ((,class :inherit modus-theme-subtle-red)))
-    `(easy-kill-selection ((,class :inherit modus-theme-subtle-yellow)))
+    `(easy-kill-origin ((,class :inherit modus-themes-subtle-red)))
+    `(easy-kill-selection ((,class :inherit modus-themes-subtle-yellow)))
 ;;;;; ebdb
     `(ebdb-address-default ((,class :foreground ,fg-special-calm)))
     `(ebdb-defunct ((,class :inherit shadow)))
@@ -3850,46 +4007,32 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(ebdb-phone-default ((,class :foreground ,cyan)))
     `(eieio-custom-slot-tag-face ((,class :foreground ,red-alt)))
 ;;;;; ediff
-    ;; NOTE: here we break from the pattern of inheriting from the
-    ;; modus-theme-diff-* faces.
-    `(ediff-current-diff-A ((,class ,@(modus-themes--diff
-                                       bg-dim red
-                                       bg-diff-removed fg-diff-removed
-                                       red-nuanced-bg red-faint))))
+    `(ediff-current-diff-A ((,class :inherit modus-themes-diff-removed)))
     `(ediff-current-diff-Ancestor ((,class ,@(modus-themes--diff
-                                              bg-dim fg-special-cold
+                                              bg-alt fg-special-cold
                                               bg-special-cold fg-special-cold
                                               blue-nuanced-bg blue))))
-    `(ediff-current-diff-B ((,class ,@(modus-themes--diff
-                                       bg-dim green
-                                       bg-diff-added fg-diff-added
-                                       green-nuanced-bg green-faint
-                                       bg-diff-added-deuteran 
fg-diff-added-deuteran))))
-    `(ediff-current-diff-C ((,class ,@(modus-themes--diff
-                                       bg-dim yellow
-                                       bg-diff-changed fg-diff-changed
-                                       yellow-nuanced-bg yellow-faint))))
-    `(ediff-even-diff-A ((,class :background ,bg-diff-neutral-1 :foreground 
,fg-diff-neutral-1)))
-    `(ediff-even-diff-Ancestor ((,class :background ,bg-diff-neutral-2 
:foreground ,fg-diff-neutral-1)))
-    `(ediff-even-diff-B ((,class :background ,bg-diff-neutral-1 :foreground 
,fg-diff-neutral-1)))
-    `(ediff-even-diff-C ((,class :background ,bg-diff-neutral-2 :foreground 
,fg-diff-neutral-2)))
-    `(ediff-fine-diff-A ((,class :background ,bg-diff-focus-removed 
:foreground ,fg-diff-focus-removed)))
-    `(ediff-fine-diff-Ancestor ((,class :inherit modus-theme-refine-cyan)))
-    `(ediff-fine-diff-B
-      ((,class :background ,@(modus-themes--diff-deuteran 
bg-diff-focus-added-deuteran bg-diff-focus-added)
-               :foreground ,@(modus-themes--diff-deuteran 
fg-diff-focus-added-deuteran fg-diff-focus-added))))
-    `(ediff-fine-diff-C ((,class :background ,bg-diff-focus-changed 
:foreground ,fg-diff-focus-changed)))
-    `(ediff-odd-diff-A ((,class :background ,bg-diff-neutral-2 :foreground 
,fg-diff-neutral-2)))
-    `(ediff-odd-diff-Ancestor ((,class :background ,bg-diff-neutral-0 
:foreground ,fg-diff-neutral-0)))
-    `(ediff-odd-diff-B ((,class :background ,bg-diff-neutral-2 :foreground 
,fg-diff-neutral-2)))
-    `(ediff-odd-diff-C ((,class :background ,bg-diff-neutral-1 :foreground 
,fg-diff-neutral-1)))
+    `(ediff-current-diff-B ((,class :inherit modus-themes-diff-added)))
+    `(ediff-current-diff-C ((,class :inherit modus-themes-diff-changed)))
+    `(ediff-even-diff-A ((,class :background ,bg-alt)))
+    `(ediff-even-diff-Ancestor ((,class :background ,bg-alt)))
+    `(ediff-even-diff-B ((,class :background ,bg-alt)))
+    `(ediff-even-diff-C ((,class :background ,bg-alt)))
+    `(ediff-fine-diff-A ((,class :inherit modus-themes-diff-refine-removed)))
+    `(ediff-fine-diff-Ancestor ((,class :inherit modus-themes-refine-cyan)))
+    `(ediff-fine-diff-B ((,class :inherit modus-themes-diff-refine-added)))
+    `(ediff-fine-diff-C ((,class :inherit modus-themes-diff-refine-changed)))
+    `(ediff-odd-diff-A ((,class :inherit ediff-even-diff-A)))
+    `(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)))
 ;;;;; eglot
-    `(eglot-mode-line ((,class :inherit modus-theme-bold :foreground 
,magenta-active)))
+    `(eglot-mode-line ((,class :inherit modus-themes-bold :foreground 
,magenta-active)))
 ;;;;; el-search
     `(el-search-highlight-in-prompt-face ((,class :inherit bold :foreground 
,magenta-alt)))
-    `(el-search-match ((,class :inherit modus-theme-intense-green)))
-    `(el-search-other-match ((,class :inherit modus-theme-special-mild)))
-    `(el-search-occur-match ((,class :inherit modus-theme-special-calm)))
+    `(el-search-match ((,class :inherit modus-themes-intense-green)))
+    `(el-search-other-match ((,class :inherit modus-themes-special-mild)))
+    `(el-search-occur-match ((,class :inherit modus-themes-special-calm)))
 ;;;;; eldoc
     ;; NOTE: see https://github.com/purcell/package-lint/issues/187
     (list 'eldoc-highlight-function-argument `((,class :inherit bold 
:foreground ,blue-alt-other)))
@@ -3916,17 +4059,19 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(elfeed-score-error-level-face ((,class :foreground ,red)))
     `(elfeed-score-info-level-face ((,class :foreground ,cyan)))
     `(elfeed-score-warn-level-face ((,class :foreground ,yellow)))
+;;;;; embark
+    `(embark-keybinding ((,class :inherit modus-themes-key-binding)))
 ;;;;; emms
     `(emms-playlist-track-face ((,class :foreground ,blue)))
     `(emms-playlist-selected-face ((,class :inherit bold :foreground 
,magenta)))
-;;;;; enhanced-ruby-mode
-    `(enh-ruby-heredoc-delimiter-face ((,class :foreground ,blue-alt-other)))
+;;;;; enh-ruby-mode (enhanced-ruby-mode)
+    `(enh-ruby-heredoc-delimiter-face ((,class :inherit 
font-lock-constant-face)))
     `(enh-ruby-op-face ((,class :foreground ,fg-main)))
-    `(enh-ruby-regexp-delimiter-face ((,class :foreground ,green)))
-    `(enh-ruby-regexp-face ((,class :foreground ,magenta)))
-    `(enh-ruby-string-delimiter-face ((,class :foreground ,blue-alt)))
-    `(erm-syn-errline ((,class :foreground ,red :underline t)))
-    `(erm-syn-warnline ((,class :foreground ,yellow :underline t)))
+    `(enh-ruby-regexp-delimiter-face ((,class :inherit 
font-lock-regexp-grouping-construct)))
+    `(enh-ruby-regexp-face ((,class :inherit font-lock-string-face)))
+    `(enh-ruby-string-delimiter-face ((,class :inherit font-lock-string-face)))
+    `(erm-syn-errline ((,class :inherit modus-themes-lang-error)))
+    `(erm-syn-warnline ((,class :inherit modus-themes-lang-warning)))
 ;;;;; epa
     `(epa-field-body ((,class :foreground ,fg-main)))
     `(epa-field-name ((,class :inherit bold :foreground ,fg-dim)))
@@ -3951,7 +4096,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(erc-button ((,class :inherit button)))
     `(erc-command-indicator-face ((,class :inherit bold :foreground 
,cyan-alt)))
     `(erc-current-nick-face ((,class :foreground ,magenta-alt-other)))
-    `(erc-dangerous-host-face ((,class :inherit modus-theme-intense-red)))
+    `(erc-dangerous-host-face ((,class :inherit modus-themes-intense-red)))
     `(erc-direct-msg-face ((,class :foreground ,magenta)))
     `(erc-error-face ((,class :inherit bold :foreground ,red)))
     `(erc-fool-face ((,class :foreground ,fg-inactive)))
@@ -3966,7 +4111,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(erc-nick-prefix-face ((,class :inherit erc-nick-default-face)))
     `(erc-notice-face ((,class :foreground ,fg-unfocused)))
     `(erc-pal-face ((,class :inherit bold :foreground ,red-alt)))
-    `(erc-prompt-face ((,class :inherit bold :foreground ,cyan-alt-other)))
+    `(erc-prompt-face ((,class :inherit comint-highlight-prompt)))
     `(erc-timestamp-face ((,class :foreground ,blue-nuanced-fg)))
     `(erc-underline-face ((,class :underline t)))
     `(bg:erc-color-face0 ((,class :background "white")))
@@ -4005,15 +4150,15 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(eros-result-overlay-face ((,class :box (:line-width -1 :color ,blue)
                                         :background ,bg-dim :foreground 
,fg-dim)))
 ;;;;; ert
-    `(ert-test-result-expected ((,class :inherit modus-theme-intense-green)))
-    `(ert-test-result-unexpected ((,class :inherit modus-theme-intense-red)))
+    `(ert-test-result-expected ((,class :inherit modus-themes-intense-green)))
+    `(ert-test-result-unexpected ((,class :inherit modus-themes-intense-red)))
 ;;;;; eshell
     `(eshell-ls-archive ((,class :inherit bold :foreground ,cyan-alt)))
     `(eshell-ls-backup ((,class :foreground ,yellow-alt)))
     `(eshell-ls-clutter ((,class :foreground ,red-alt)))
     `(eshell-ls-directory ((,class :inherit bold :foreground ,blue-alt)))
     `(eshell-ls-executable ((,class :foreground ,magenta-alt)))
-    `(eshell-ls-missing ((,class :inherit modus-theme-intense-red)))
+    `(eshell-ls-missing ((,class :inherit modus-themes-intense-red)))
     `(eshell-ls-product ((,class :foreground ,fg-special-warm)))
     `(eshell-ls-readonly ((,class :foreground ,fg-special-cold)))
     `(eshell-ls-special ((,class :inherit bold :foreground ,magenta)))
@@ -4021,7 +4166,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                  ,@(modus-themes--link-color
                                     cyan cyan-faint))))
     `(eshell-ls-unreadable ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
-    `(eshell-prompt ((,class :inherit modus-theme-bold
+    `(eshell-prompt ((,class :inherit modus-themes-bold
                              ,@(modus-themes--prompt
                                 green-alt-other
                                 green-nuanced-bg green-alt
@@ -4043,16 +4188,16 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(eshell-git-prompt-robyrussell-git-dirty-face ((,class :foreground 
,yellow)))
     `(eshell-git-prompt-robyrussell-git-face ((,class :foreground ,blue)))
 ;;;;; eshell-prompt-extras (epe)
-    `(epe-dir-face ((,class :inherit modus-theme-bold :foreground ,blue)))
+    `(epe-dir-face ((,class :inherit modus-themes-bold :foreground ,blue)))
     `(epe-git-dir-face ((,class :foreground ,red-alt-other)))
     `(epe-git-face ((,class :foreground ,cyan-alt)))
     `(epe-pipeline-delimiter-face ((,class :foreground ,green-alt)))
     `(epe-pipeline-host-face ((,class :foreground ,blue)))
     `(epe-pipeline-time-face ((,class :foreground ,fg-special-warm)))
     `(epe-pipeline-user-face ((,class :foreground ,magenta)))
-    `(epe-remote-face ((,class :inherit modus-theme-slant :foreground 
,fg-alt)))
+    `(epe-remote-face ((,class :inherit modus-themes-slant :foreground 
,fg-alt)))
     `(epe-status-face ((,class :foreground ,magenta-alt-other)))
-    `(epe-venv-face ((,class :inherit modus-theme-slant :foreground ,fg-alt)))
+    `(epe-venv-face ((,class :inherit modus-themes-slant :foreground ,fg-alt)))
 ;;;;; eshell-syntax-highlighting
     `(eshell-syntax-highlighting-alias-face ((,class :foreground ,cyan)))
     `(eshell-syntax-highlighting-comment-face ((,class :inherit shadow)))
@@ -4065,103 +4210,104 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; evil-mode
     `(evil-ex-commands ((,class :foreground ,magenta-alt-other)))
     `(evil-ex-info ((,class :foreground ,cyan-alt-other)))
-    `(evil-ex-lazy-highlight ((,class :inherit modus-theme-refine-cyan)))
-    `(evil-ex-search ((,class :inherit modus-theme-intense-green)))
-    `(evil-ex-substitute-matches ((,class :inherit modus-theme-refine-yellow 
:underline t)))
-    `(evil-ex-substitute-replacement ((,class :inherit 
(modus-theme-intense-green bold))))
+    `(evil-ex-lazy-highlight ((,class :inherit modus-themes-refine-cyan)))
+    `(evil-ex-search ((,class :inherit modus-themes-intense-green)))
+    `(evil-ex-substitute-matches ((,class :inherit modus-themes-refine-yellow 
:underline t)))
+    `(evil-ex-substitute-replacement ((,class :inherit 
(modus-themes-intense-green bold))))
 ;;;;; evil-goggles
-    `(evil-goggles-change-face ((,class :inherit modus-theme-refine-yellow)))
-    `(evil-goggles-commentary-face ((,class :inherit 
(modus-theme-subtle-neutral modus-theme-slant))))
-    `(evil-goggles-default-face ((,class :inherit modus-theme-subtle-neutral)))
-    `(evil-goggles-delete-face ((,class :inherit modus-theme-refine-red)))
+    `(evil-goggles-change-face ((,class :inherit modus-themes-refine-yellow)))
+    `(evil-goggles-commentary-face ((,class :inherit 
(modus-themes-subtle-neutral modus-themes-slant))))
+    `(evil-goggles-default-face ((,class :inherit 
modus-themes-subtle-neutral)))
+    `(evil-goggles-delete-face ((,class :inherit modus-themes-refine-red)))
     `(evil-goggles-fill-and-move-face ((,class :inherit 
evil-goggles-default-face)))
     `(evil-goggles-indent-face ((,class :inherit evil-goggles-default-face)))
-    `(evil-goggles-join-face ((,class :inherit modus-theme-subtle-green)))
+    `(evil-goggles-join-face ((,class :inherit modus-themes-subtle-green)))
     `(evil-goggles-nerd-commenter-face ((,class :inherit 
evil-goggles-commentary-face)))
-    `(evil-goggles-paste-face ((,class :inherit modus-theme-subtle-cyan)))
-    `(evil-goggles-record-macro-face ((,class :inherit 
modus-theme-special-cold)))
-    `(evil-goggles-replace-with-register-face ((,class :inherit 
modus-theme-refine-magenta)))
-    `(evil-goggles-set-marker-face ((,class :inherit 
modus-theme-intense-magenta)))
+    `(evil-goggles-paste-face ((,class :inherit modus-themes-subtle-cyan)))
+    `(evil-goggles-record-macro-face ((,class :inherit 
modus-themes-special-cold)))
+    `(evil-goggles-replace-with-register-face ((,class :inherit 
modus-themes-refine-magenta)))
+    `(evil-goggles-set-marker-face ((,class :inherit 
modus-themes-intense-magenta)))
     `(evil-goggles-shift-face ((,class :inherit evil-goggles-default-face)))
     `(evil-goggles-surround-face ((,class :inherit evil-goggles-default-face)))
-    `(evil-goggles-yank-face ((,class :inherit modus-theme-subtle-blue)))
+    `(evil-goggles-yank-face ((,class :inherit modus-themes-subtle-blue)))
 ;;;;; evil-snipe
-    `(evil-snipe-first-match-face ((,class :inherit (bold 
modus-theme-intense-blue))))
-    `(evil-snipe-matches-face ((,class :inherit modus-theme-refine-magenta)))
+    `(evil-snipe-first-match-face ((,class :inherit (bold 
modus-themes-intense-blue))))
+    `(evil-snipe-matches-face ((,class :inherit modus-themes-refine-magenta)))
 ;;;;; evil-visual-mark-mode
-    `(evil-visual-mark-face ((,class :inherit modus-theme-intense-magenta)))
+    `(evil-visual-mark-face ((,class :inherit modus-themes-intense-magenta)))
 ;;;;; eww
-    `(eww-invalid-certificate ((,class :foreground ,red-active)))
-    `(eww-valid-certificate ((,class :foreground ,green-active)))
-    `(eww-form-checkbox ((,class :box (:line-width 1 :color ,fg-inactive 
:style released-button) :background ,bg-inactive :foreground ,fg-main)))
-    `(eww-form-file ((,class :box (:line-width 1 :color ,fg-inactive :style 
released-button) :background ,bg-active :foreground ,fg-main)))
-    `(eww-form-select ((,class :inherit eww-form-checkbox)))
-    `(eww-form-submit ((,class :inherit eww-form-file)))
-    `(eww-form-text ((,class :box (:line-width 1 :color ,fg-inactive :style 
none) :background ,bg-active :foreground ,fg-active)))
-    `(eww-form-textarea ((,class :background ,bg-alt :foreground ,fg-main)))
+    `(eww-invalid-certificate ((,class :foreground ,red-faint)))
+    `(eww-valid-certificate ((,class :foreground ,blue-faint)))
+    `(eww-form-checkbox ((,class :inherit eww-form-text)))
+    `(eww-form-file ((,class :inherit eww-form-submit)))
+    `(eww-form-select ((,class :inherit eww-form-submit)))
+    `(eww-form-submit ((,class :box (:line-width 2 :style released-button)
+                               :background ,bg-active)))
+    `(eww-form-text ((,class :box ,bg-active :background ,bg-alt)))
+    `(eww-form-textarea ((,class :background ,bg-alt)))
 ;;;;; eyebrowse
     `(eyebrowse-mode-line-active ((,class :inherit bold :foreground 
,blue-active)))
 ;;;;; fancy-dabbrev
     `(fancy-dabbrev-menu-face ((,class :background ,bg-alt :foreground 
,fg-alt)))
     `(fancy-dabbrev-preview-face ((,class :inherit shadow :underline t)))
-    `(fancy-dabbrev-selection-face ((,class :inherit (modus-theme-intense-cyan 
bold))))
+    `(fancy-dabbrev-selection-face ((,class :inherit 
(modus-themes-intense-cyan bold))))
 ;;;;; flycheck
-    `(flycheck-error ((,class :inherit modus-theme-lang-error)))
+    `(flycheck-error ((,class :inherit modus-themes-lang-error)))
     `(flycheck-error-list-checker-name ((,class :foreground ,magenta-active)))
     `(flycheck-error-list-column-number ((,class :foreground 
,fg-special-cold)))
-    `(flycheck-error-list-error ((,class :inherit modus-theme-bold :foreground 
,red)))
+    `(flycheck-error-list-error ((,class :inherit modus-themes-bold 
:foreground ,red)))
     `(flycheck-error-list-filename ((,class :foreground ,blue)))
-    `(flycheck-error-list-highlight ((,class :inherit modus-theme-hl-line)))
+    `(flycheck-error-list-highlight ((,class :inherit modus-themes-hl-line)))
     `(flycheck-error-list-id ((,class :foreground ,magenta-alt-other)))
     `(flycheck-error-list-id-with-explainer ((,class :inherit 
flycheck-error-list-id :box t)))
     `(flycheck-error-list-info ((,class :foreground ,cyan)))
     `(flycheck-error-list-line-number ((,class :foreground ,fg-special-warm)))
     `(flycheck-error-list-warning ((,class :foreground ,yellow)))
-    `(flycheck-fringe-error ((,class :inherit modus-theme-fringe-red)))
-    `(flycheck-fringe-info ((,class :inherit modus-theme-fringe-cyan)))
-    `(flycheck-fringe-warning ((,class :inherit modus-theme-fringe-yellow)))
-    `(flycheck-info ((,class :inherit modus-theme-lang-note)))
+    `(flycheck-fringe-error ((,class :inherit modus-themes-fringe-red)))
+    `(flycheck-fringe-info ((,class :inherit modus-themes-fringe-cyan)))
+    `(flycheck-fringe-warning ((,class :inherit modus-themes-fringe-yellow)))
+    `(flycheck-info ((,class :inherit modus-themes-lang-note)))
     `(flycheck-verify-select-checker ((,class :box (:line-width 1 :color nil 
:style released-button))))
-    `(flycheck-warning ((,class :inherit modus-theme-lang-warning)))
+    `(flycheck-warning ((,class :inherit modus-themes-lang-warning)))
 ;;;;; flycheck-color-mode-line
     `(flycheck-color-mode-line-error-face ((,class :inherit 
flycheck-fringe-error)))
     `(flycheck-color-mode-line-info-face ((,class :inherit 
flycheck-fringe-info)))
     `(flycheck-color-mode-line-running-face ((,class :inherit italic 
:foreground ,fg-inactive)))
     `(flycheck-color-mode-line-info-face ((,class :inherit 
flycheck-fringe-warning)))
 ;;;;; flycheck-indicator
-    `(flycheck-indicator-disabled ((,class :inherit modus-theme-slant 
:foreground ,fg-inactive)))
-    `(flycheck-indicator-error ((,class :inherit modus-theme-bold :foreground 
,red-active)))
-    `(flycheck-indicator-info ((,class :inherit modus-theme-bold :foreground 
,blue-active)))
-    `(flycheck-indicator-running ((,class :inherit modus-theme-bold 
:foreground ,magenta-active)))
-    `(flycheck-indicator-success ((,class :inherit modus-theme-bold 
:foreground ,green-active)))
-    `(flycheck-indicator-warning ((,class :inherit modus-theme-bold 
:foreground ,yellow-active)))
+    `(flycheck-indicator-disabled ((,class :inherit modus-themes-slant 
:foreground ,fg-inactive)))
+    `(flycheck-indicator-error ((,class :inherit modus-themes-bold :foreground 
,red-active)))
+    `(flycheck-indicator-info ((,class :inherit modus-themes-bold :foreground 
,blue-active)))
+    `(flycheck-indicator-running ((,class :inherit modus-themes-bold 
:foreground ,magenta-active)))
+    `(flycheck-indicator-success ((,class :inherit modus-themes-bold 
:foreground ,green-active)))
+    `(flycheck-indicator-warning ((,class :inherit modus-themes-bold 
:foreground ,yellow-active)))
 ;;;;; flycheck-posframe
     `(flycheck-posframe-background-face ((,class :background ,bg-alt)))
     `(flycheck-posframe-border-face ((,class :inherit shadow)))
     `(flycheck-posframe-error-face ((,class :inherit bold :foreground ,red)))
-    `(flycheck-posframe-face ((,class :inherit modus-theme-slant :foreground 
,fg-main)))
+    `(flycheck-posframe-face ((,class :inherit modus-themes-slant :foreground 
,fg-main)))
     `(flycheck-posframe-info-face ((,class :inherit bold :foreground ,cyan)))
     `(flycheck-posframe-warning-face ((,class :inherit bold :foreground 
,yellow)))
 ;;;;; flymake
-    `(flymake-error ((,class :inherit modus-theme-lang-error)))
-    `(flymake-note ((,class :inherit modus-theme-lang-note)))
-    `(flymake-warning ((,class :inherit modus-theme-lang-warning)))
+    `(flymake-error ((,class :inherit modus-themes-lang-error)))
+    `(flymake-note ((,class :inherit modus-themes-lang-note)))
+    `(flymake-warning ((,class :inherit modus-themes-lang-warning)))
 ;;;;; flyspell
-    `(flyspell-duplicate ((,class :inherit modus-theme-lang-warning)))
-    `(flyspell-incorrect ((,class :inherit modus-theme-lang-error)))
+    `(flyspell-duplicate ((,class :inherit modus-themes-lang-warning)))
+    `(flyspell-incorrect ((,class :inherit modus-themes-lang-error)))
 ;;;;; flyspell-correct
-    `(flyspell-correct-highlight-face ((,class :inherit 
modus-theme-refine-green)))
+    `(flyspell-correct-highlight-face ((,class :inherit 
modus-themes-refine-green)))
 ;;;;; flx
     `(flx-highlight-face ((,class ,@(modus-themes--extra-completions
-                                     'modus-theme-subtle-magenta
-                                     'modus-theme-intense-magenta
-                                     'modus-theme-nuanced-magenta
+                                     'modus-themes-subtle-magenta
+                                     'modus-themes-intense-magenta
+                                     'modus-themes-nuanced-magenta
                                      magenta-alt
                                      'bold))))
 ;;;;; freeze-it
     `(freeze-it-show ((,class :background ,bg-dim :foreground 
,fg-special-warm)))
 ;;;;; frog-menu
-    `(frog-menu-action-keybinding-face ((,class :foreground ,blue-alt-other)))
+    `(frog-menu-action-keybinding-face ((,class :inherit 
modus-themes-key-binding)))
     `(frog-menu-actions-face ((,class :foreground ,magenta)))
     `(frog-menu-border ((,class :background ,bg-active)))
     `(frog-menu-candidates-face ((,class :foreground ,fg-main)))
@@ -4170,27 +4316,27 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; focus
     `(focus-unfocused ((,class :foreground ,fg-unfocused)))
 ;;;;; fold-this
-    `(fold-this-overlay ((,class :inherit modus-theme-special-mild)))
+    `(fold-this-overlay ((,class :inherit modus-themes-special-mild)))
 ;;;;; font-lock
-    `(font-lock-builtin-face ((,class :inherit modus-theme-bold
+    `(font-lock-builtin-face ((,class :inherit modus-themes-bold
                                       ,@(modus-themes--syntax-extra
                                          magenta-alt magenta-alt-faint 
blue-alt))))
     `(font-lock-comment-delimiter-face ((,class :inherit 
font-lock-comment-face)))
-    `(font-lock-comment-face ((,class :inherit modus-theme-slant
+    `(font-lock-comment-face ((,class :inherit modus-themes-slant
                                       ,@(modus-themes--syntax-comment
                                          fg-alt fg-comment-yellow))))
     `(font-lock-constant-face ((,class ,@(modus-themes--syntax-extra
                                           blue-alt-other blue-alt-other-faint 
magenta-alt-other))))
-    `(font-lock-doc-face ((,class :inherit modus-theme-slant
+    `(font-lock-doc-face ((,class :inherit modus-themes-slant
                                   ,@(modus-themes--syntax-docstring
                                      fg-docstring green-alt-other-faint
                                      green-alt-other-faint 
magenta-nuanced-fg))))
     `(font-lock-function-name-face ((,class ,@(modus-themes--syntax-extra
                                                magenta magenta-faint 
magenta-alt))))
-    `(font-lock-keyword-face ((,class :inherit modus-theme-bold
+    `(font-lock-keyword-face ((,class :inherit modus-themes-bold
                                       ,@(modus-themes--syntax-extra
                                          magenta-alt-other 
magenta-alt-other-faint cyan-alt-other))))
-    `(font-lock-negation-char-face ((,class :inherit modus-theme-bold
+    `(font-lock-negation-char-face ((,class :inherit modus-themes-bold
                                             ,@(modus-themes--syntax-foreground
                                                yellow yellow-faint))))
     `(font-lock-preprocessor-face ((,class ,@(modus-themes--syntax-foreground
@@ -4205,12 +4351,12 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                                       red magenta-alt))))
     `(font-lock-string-face ((,class ,@(modus-themes--syntax-string
                                         blue-alt blue-alt-faint green 
green-alt))))
-    `(font-lock-type-face ((,class :inherit modus-theme-bold
+    `(font-lock-type-face ((,class :inherit modus-themes-bold
                                    ,@(modus-themes--syntax-extra
                                       cyan-alt-other cyan-alt-faint 
cyan-alt))))
     `(font-lock-variable-name-face ((,class ,@(modus-themes--syntax-extra
                                                cyan cyan-faint 
blue-alt-faint))))
-    `(font-lock-warning-face ((,class :inherit modus-theme-bold
+    `(font-lock-warning-face ((,class :inherit modus-themes-bold
                                       ,@(modus-themes--syntax-foreground
                                          yellow-active yellow-alt-faint))))
 ;;;;; forge
@@ -4219,26 +4365,26 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(forge-topic-closed ((,class :inherit shadow)))
     `(forge-topic-merged ((,class :inherit shadow)))
     `(forge-topic-open ((,class :foreground ,fg-special-mild)))
-    `(forge-topic-unmerged ((,class :inherit modus-theme-slant :foreground 
,magenta)))
+    `(forge-topic-unmerged ((,class :inherit modus-themes-slant :foreground 
,magenta)))
     `(forge-topic-unread ((,class :inherit bold :foreground ,fg-main)))
 ;;;;; fountain-mode
     `(fountain-character ((,class :foreground ,blue-alt-other)))
-    `(fountain-comment ((,class :inherit modus-theme-slant :foreground 
,fg-alt)))
+    `(fountain-comment ((,class :inherit modus-themes-slant :foreground 
,fg-alt)))
     `(fountain-dialog ((,class :foreground ,blue-alt)))
     `(fountain-metadata-key ((,class :foreground ,green-alt-other)))
     `(fountain-metadata-value ((,class :foreground ,blue)))
     `(fountain-non-printing ((,class :inherit shadow)))
-    `(fountain-note ((,class :inherit modus-theme-slant :foreground ,yellow)))
+    `(fountain-note ((,class :inherit modus-themes-slant :foreground ,yellow)))
     `(fountain-page-break ((,class :inherit bold :foreground ,red-alt)))
     `(fountain-page-number ((,class :inherit bold :foreground ,red-alt-other)))
     `(fountain-paren ((,class :foreground ,cyan)))
     `(fountain-scene-heading ((,class :inherit bold :foreground 
,blue-nuanced-fg)))
-    `(fountain-section-heading ((,class :inherit modus-theme-heading-1)))
-    `(fountain-section-heading-1 ((,class :inherit modus-theme-heading-1)))
-    `(fountain-section-heading-2 ((,class :inherit modus-theme-heading-2)))
-    `(fountain-section-heading-3 ((,class :inherit modus-theme-heading-3)))
-    `(fountain-section-heading-4 ((,class :inherit modus-theme-heading-4)))
-    `(fountain-section-heading-5 ((,class :inherit modus-theme-heading-5)))
+    `(fountain-section-heading ((,class :inherit modus-themes-heading-1)))
+    `(fountain-section-heading-1 ((,class :inherit modus-themes-heading-1)))
+    `(fountain-section-heading-2 ((,class :inherit modus-themes-heading-2)))
+    `(fountain-section-heading-3 ((,class :inherit modus-themes-heading-3)))
+    `(fountain-section-heading-4 ((,class :inherit modus-themes-heading-4)))
+    `(fountain-section-heading-5 ((,class :inherit modus-themes-heading-5)))
     `(fountain-synopsis ((,class :foreground ,cyan-alt)))
     `(fountain-trans ((,class :foreground ,yellow-alt-other)))
 ;;;;; geiser
@@ -4255,40 +4401,40 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(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-theme-slant 
:foreground ,blue-alt)))
-    `(git-commit-comment-branch-remote ((,class :inherit modus-theme-slant 
:foreground ,magenta-alt)))
-    `(git-commit-comment-detached ((,class :inherit modus-theme-slant 
:foreground ,cyan-alt)))
-    `(git-commit-comment-file ((,class :inherit modus-theme-slant
+    `(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
                                        ,@(modus-themes--syntax-comment
                                           fg-special-cold red-nuanced-fg))))
-    `(git-commit-comment-heading ((,class :inherit (bold modus-theme-slant)
+    `(git-commit-comment-heading ((,class :inherit (bold modus-themes-slant)
                                           ,@(modus-themes--syntax-comment
                                              fg-dim fg-special-warm))))
     `(git-commit-keyword ((,class :foreground ,magenta)))
     `(git-commit-known-pseudo-header ((,class :foreground ,cyan-alt-other)))
-    `(git-commit-nonempty-second-line ((,class :inherit 
modus-theme-refine-yellow)))
-    `(git-commit-overlong-summary ((,class :inherit 
modus-theme-refine-yellow)))
+    `(git-commit-nonempty-second-line ((,class :inherit 
modus-themes-refine-yellow)))
+    `(git-commit-overlong-summary ((,class :inherit 
modus-themes-refine-yellow)))
     `(git-commit-pseudo-header ((,class :foreground ,blue)))
     `(git-commit-summary ((,class :inherit bold :foreground ,cyan)))
 ;;;;; git-gutter
-    `(git-gutter:added ((,class :inherit modus-theme-fringe-green)))
-    `(git-gutter:deleted ((,class :inherit modus-theme-fringe-red)))
-    `(git-gutter:modified ((,class :inherit modus-theme-fringe-yellow)))
-    `(git-gutter:separator ((,class :inherit modus-theme-fringe-cyan)))
-    `(git-gutter:unchanged ((,class :inherit modus-theme-fringe-magenta)))
+    `(git-gutter:added ((,class :inherit modus-themes-fringe-green)))
+    `(git-gutter:deleted ((,class :inherit modus-themes-fringe-red)))
+    `(git-gutter:modified ((,class :inherit modus-themes-fringe-yellow)))
+    `(git-gutter:separator ((,class :inherit modus-themes-fringe-cyan)))
+    `(git-gutter:unchanged ((,class :inherit modus-themes-fringe-magenta)))
 ;;;;; git-gutter-fr
-    `(git-gutter-fr:added ((,class :inherit modus-theme-fringe-green)))
-    `(git-gutter-fr:deleted ((,class :inherit modus-theme-fringe-red)))
-    `(git-gutter-fr:modified ((,class :inherit modus-theme-fringe-yellow)))
+    `(git-gutter-fr:added ((,class :inherit modus-themes-fringe-green)))
+    `(git-gutter-fr:deleted ((,class :inherit modus-themes-fringe-red)))
+    `(git-gutter-fr:modified ((,class :inherit modus-themes-fringe-yellow)))
 ;;;;; git-{gutter,fringe}+
-    `(git-gutter+-added ((,class :inherit modus-theme-fringe-green)))
-    `(git-gutter+-deleted ((,class :inherit modus-theme-fringe-red)))
-    `(git-gutter+-modified ((,class :inherit modus-theme-fringe-yellow)))
-    `(git-gutter+-separator ((,class :inherit modus-theme-fringe-cyan)))
-    `(git-gutter+-unchanged ((,class :inherit modus-theme-fringe-magenta)))
-    `(git-gutter-fr+-added ((,class :inherit modus-theme-fringe-green)))
-    `(git-gutter-fr+-deleted ((,class :inherit modus-theme-fringe-red)))
-    `(git-gutter-fr+-modified ((,class :inherit modus-theme-fringe-yellow)))
+    `(git-gutter+-added ((,class :inherit modus-themes-fringe-green)))
+    `(git-gutter+-deleted ((,class :inherit modus-themes-fringe-red)))
+    `(git-gutter+-modified ((,class :inherit modus-themes-fringe-yellow)))
+    `(git-gutter+-separator ((,class :inherit modus-themes-fringe-cyan)))
+    `(git-gutter+-unchanged ((,class :inherit modus-themes-fringe-magenta)))
+    `(git-gutter-fr+-added ((,class :inherit modus-themes-fringe-green)))
+    `(git-gutter-fr+-deleted ((,class :inherit modus-themes-fringe-red)))
+    `(git-gutter-fr+-modified ((,class :inherit modus-themes-fringe-yellow)))
 ;;;;; git-lens
     `(git-lens-added ((,class :inherit bold :foreground ,green)))
     `(git-lens-deleted ((,class :inherit bold :foreground ,red)))
@@ -4296,10 +4442,10 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(git-lens-modified ((,class :inherit bold :foreground ,yellow)))
     `(git-lens-renamed ((,class :inherit bold :foreground ,magenta)))
 ;;;;; git-rebase
-    `(git-rebase-comment-hash ((,class :inherit modus-theme-slant
+    `(git-rebase-comment-hash ((,class :inherit modus-themes-slant
                                        ,@(modus-themes--syntax-comment
                                           fg-special-cold red-nuanced-fg))))
-    `(git-rebase-comment-heading  ((,class :inherit (bold modus-theme-slant)
+    `(git-rebase-comment-heading  ((,class :inherit (bold modus-themes-slant)
                                            ,@(modus-themes--syntax-comment
                                               fg-dim fg-special-warm))))
     `(git-rebase-description ((,class :foreground ,fg-main)))
@@ -4328,7 +4474,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(gnus-cite-attribution ((,class :inherit italic :foreground ,fg-main)))
     `(gnus-emphasis-bold ((,class :inherit bold)))
     `(gnus-emphasis-bold-italic ((,class :inherit bold-italic)))
-    `(gnus-emphasis-highlight-words ((,class :inherit 
modus-theme-refine-yellow)))
+    `(gnus-emphasis-highlight-words ((,class :inherit 
modus-themes-refine-yellow)))
     `(gnus-emphasis-italic ((,class :inherit italic)))
     `(gnus-emphasis-underline-bold ((,class :inherit gnus-emphasis-bold 
:underline t)))
     `(gnus-emphasis-underline-bold-italic ((,class :inherit 
gnus-emphasis-bold-italic :underline t)))
@@ -4363,13 +4509,13 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(gnus-server-agent ((,class :inherit bold :foreground ,cyan)))
     `(gnus-server-closed ((,class :inherit bold :foreground ,magenta)))
     `(gnus-server-cloud ((,class :inherit bold :foreground ,cyan-alt)))
-    `(gnus-server-cloud-host ((,class :inherit modus-theme-refine-cyan)))
+    `(gnus-server-cloud-host ((,class :inherit modus-themes-refine-cyan)))
     `(gnus-server-denied ((,class :inherit bold :foreground ,red)))
     `(gnus-server-offline ((,class :inherit bold :foreground ,yellow)))
     `(gnus-server-opened ((,class :inherit bold :foreground ,green)))
     `(gnus-signature ((,class :inherit italic :foreground ,fg-special-cold)))
     `(gnus-splash ((,class :inherit shadow)))
-    `(gnus-summary-cancelled ((,class :inherit modus-theme-mark-alt)))
+    `(gnus-summary-cancelled ((,class :inherit modus-themes-mark-alt :extend 
t)))
     `(gnus-summary-high-ancient ((,class :inherit bold :foreground ,fg-alt)))
     `(gnus-summary-high-read ((,class :inherit bold :foreground 
,fg-special-cold)))
     `(gnus-summary-high-ticked ((,class :inherit bold :foreground 
,red-alt-other)))
@@ -4385,11 +4531,11 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(gnus-summary-normal-ticked ((,class :foreground ,red-alt-other)))
     `(gnus-summary-normal-undownloaded ((,class :foreground ,yellow)))
     `(gnus-summary-normal-unread ((,class :foreground ,fg-main)))
-    `(gnus-summary-selected ((,class :inherit modus-theme-subtle-blue)))
+    `(gnus-summary-selected ((,class :inherit modus-themes-subtle-blue :extend 
t)))
 ;;;;; golden-ratio-scroll-screen
     `(golden-ratio-scroll-highlight-line-face ((,class :background 
,cyan-subtle-bg :foreground ,fg-main)))
 ;;;;; helm
-    `(helm-M-x-key ((,class :inherit bold :foreground ,magenta-alt-other)))
+    `(helm-M-x-key ((,class :inherit modus-themes-key-binding)))
     `(helm-action ((,class :underline t)))
     `(helm-bookmark-addressbook ((,class :foreground ,green-alt)))
     `(helm-bookmark-directory ((,class :inherit bold :foreground ,blue)))
@@ -4418,9 +4564,9 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(helm-etags-file ((,class :foreground ,fg-dim :underline t)))
     `(helm-ff-backup-file ((,class :inherit shadow)))
     `(helm-ff-denied ((,class ,@(modus-themes--extra-completions
-                                 'modus-theme-subtle-red
-                                 'modus-theme-intense-red
-                                 'modus-theme-nuanced-red
+                                 'modus-themes-subtle-red
+                                 'modus-themes-intense-red
+                                 'modus-themes-nuanced-red
                                  red))))
     `(helm-ff-directory ((,class :inherit helm-buffer-directory)))
     `(helm-ff-dirs ((,class :inherit bold :foreground ,blue-alt-other)))
@@ -4433,20 +4579,20 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                        ,@(modus-themes--link-color
                                           red red-faint))))
     `(helm-ff-pipe ((,class ,@(modus-themes--extra-completions
-                               'modus-theme-refine-magenta
-                               'modus-theme-subtle-magenta
-                               'modus-theme-nuanced-magenta
+                               'modus-themes-refine-magenta
+                               'modus-themes-subtle-magenta
+                               'modus-themes-nuanced-magenta
                                magenta))))
     `(helm-ff-prefix ((,class ,@(modus-themes--extra-completions
-                                 'modus-theme-refine-yellow
-                                 'modus-theme-subtle-yellow
-                                 'modus-theme-nuanced-yellow
+                                 'modus-themes-refine-yellow
+                                 'modus-themes-subtle-yellow
+                                 'modus-themes-nuanced-yellow
                                  yellow-alt-other))))
     `(helm-ff-socket ((,class :foreground ,red-alt-other)))
     `(helm-ff-suid ((,class ,@(modus-themes--extra-completions
-                               'modus-theme-subtle-red
-                               'modus-theme-refine-red
-                               'modus-theme-nuanced-yellow
+                               'modus-themes-subtle-red
+                               'modus-themes-refine-red
+                               'modus-themes-nuanced-yellow
                                red-alt))))
     `(helm-ff-symlink ((,class :inherit button
                                ,@(modus-themes--link-color
@@ -4457,59 +4603,59 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(helm-grep-file ((,class :inherit bold :foreground ,fg-special-cold)))
     `(helm-grep-finish ((,class :foreground ,green-active)))
     `(helm-grep-lineno ((,class :foreground ,fg-special-warm)))
-    `(helm-grep-match ((,class :inherit modus-theme-special-calm)))
+    `(helm-grep-match ((,class :inherit modus-themes-special-calm)))
     `(helm-header ((,class :inherit bold :foreground ,fg-special-cold)))
     `(helm-header-line-left-margin ((,class :inherit bold :foreground 
,yellow-intense)))
     `(helm-history-deleted ((,class ,@(modus-themes--extra-completions
-                                       'modus-theme-subtle-red
-                                       'modus-theme-intense-red
-                                       'modus-theme-nuanced-red
+                                       'modus-themes-subtle-red
+                                       'modus-themes-intense-red
+                                       'modus-themes-nuanced-red
                                        red
                                        'bold))))
     `(helm-history-remote ((,class :foreground ,red-alt-other)))
     `(helm-lisp-completion-info ((,class :foreground ,fg-special-warm)))
     `(helm-lisp-show-completion ((,class ,@(modus-themes--extra-completions
-                                            'modus-theme-subtle-yellow
-                                            'modus-theme-refine-yellow
-                                            'modus-theme-nuanced-yellow
+                                            'modus-themes-subtle-yellow
+                                            'modus-themes-refine-yellow
+                                            'modus-themes-nuanced-yellow
                                             yellow
                                             'bold))))
     `(helm-locate-finish ((,class :foreground ,green-active)))
     `(helm-match ((,class ,@(modus-themes--extra-completions
-                             'modus-theme-subtle-cyan
-                             'modus-theme-refine-cyan
-                             'modus-theme-nuanced-cyan
+                             'modus-themes-subtle-cyan
+                             'modus-themes-refine-cyan
+                             'modus-themes-nuanced-cyan
                              cyan
                              'bold))))
     `(helm-match-item ((,class ,@(modus-themes--extra-completions
-                                  'modus-theme-subtle-neutral
-                                  'modus-theme-subtle-cyan
-                                  'modus-theme-nuanced-cyan
+                                  'modus-themes-subtle-neutral
+                                  'modus-themes-subtle-cyan
+                                  'modus-themes-nuanced-cyan
                                   cyan-alt-other))))
     `(helm-minibuffer-prompt ((,class :inherit minibuffer-prompt)))
     `(helm-moccur-buffer ((,class :inherit button
                                   ,@(modus-themes--link-color
                                      cyan-alt-other cyan-alt-other-faint))))
     `(helm-mode-prefix ((,class ,@(modus-themes--extra-completions
-                                   'modus-theme-subtle-magenta
-                                   'modus-theme-intense-magenta
-                                   'modus-theme-nuanced-magenta
+                                   'modus-themes-subtle-magenta
+                                   'modus-themes-intense-magenta
+                                   'modus-themes-nuanced-magenta
                                    magenta-alt
                                    'bold))))
     `(helm-non-file-buffer ((,class :inherit shadow)))
     `(helm-prefarg ((,class :foreground ,red-active)))
     `(helm-resume-need-update ((,class ,@(modus-themes--extra-completions
-                                          'modus-theme-subtle-magenta
-                                          'modus-theme-refine-magenta
-                                          'modus-theme-nuanced-magenta
+                                          'modus-themes-subtle-magenta
+                                          'modus-themes-refine-magenta
+                                          'modus-themes-nuanced-magenta
                                           magenta-alt-other))))
     `(helm-selection ((,class ,@(modus-themes--extra-completions
-                                 'modus-theme-subtle-blue
-                                 'modus-theme-refine-blue
-                                 'modus-theme-special-cold
+                                 'modus-themes-subtle-blue
+                                 'modus-themes-refine-blue
+                                 'modus-themes-special-cold
                                  nil
                                  'bold))))
-    `(helm-selection-line ((,class :inherit modus-theme-special-cold)))
+    `(helm-selection-line ((,class :inherit modus-themes-special-cold)))
     `(helm-separator ((,class :foreground ,fg-special-mild)))
     `(helm-time-zone-current ((,class :foreground ,green)))
     `(helm-time-zone-home ((,class :foreground ,magenta)))
@@ -4517,7 +4663,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                   ,@(modus-themes--scale 
modus-themes-scale-4))))
     `(helm-top-columns ((,class :inherit helm-header)))
     `(helm-ucs-char ((,class :foreground ,yellow-alt-other)))
-    `(helm-visible-mark ((,class :inherit modus-theme-subtle-cyan)))
+    `(helm-visible-mark ((,class :inherit modus-themes-subtle-cyan)))
 ;;;;; helm-ls-git
     `(helm-ls-git-added-copied-face ((,class :foreground ,green-intense)))
     `(helm-ls-git-added-modified-face ((,class :foreground ,yellow-intense)))
@@ -4530,16 +4676,16 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(helm-ls-git-untracked-face ((,class :foreground ,fg-special-cold)))
 ;;;;; helm-switch-shell
     `(helm-switch-shell-new-shell-face ((,class 
,@(modus-themes--extra-completions
-                                                   'modus-theme-subtle-magenta
-                                                   'modus-theme-refine-magenta
-                                                   'modus-theme-nuanced-magenta
+                                                   'modus-themes-subtle-magenta
+                                                   'modus-themes-refine-magenta
+                                                   
'modus-themes-nuanced-magenta
                                                    magenta-alt-other
                                                    'bold))))
 ;;;;; helm-xref
     `(helm-xref-file-name ((,class :inherit bold :foreground 
,fg-special-cold)))
     `(helm-xref-file-name ((,class :foreground ,fg-special-warm)))
 ;;;;; helpful
-    `(helpful-heading ((,class :inherit modus-theme-heading-1)))
+    `(helpful-heading ((,class :inherit modus-themes-heading-1)))
 ;;;;; highlight region or ad-hoc regexp
     `(hi-aquamarine ((,class :background ,cyan-subtle-bg :foreground 
,fg-main)))
     `(hi-black-b ((,class :inherit bold :background ,fg-main :foreground 
,bg-main)))
@@ -4553,10 +4699,11 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(hi-red-b ((,class :inherit bold :background ,red-intense-bg :foreground 
,fg-main)))
     `(hi-salmon ((,class :background ,red-subtle-bg :foreground ,fg-main)))
     `(hi-yellow ((,class :background ,yellow-subtle-bg :foreground ,fg-main)))
-    `(highlight ((,class :inherit modus-theme-subtle-blue)))
-    `(highlight-changes ((,class :foreground ,yellow-alt-other)))
-    `(highlight-changes-delete ((,class :foreground ,red-alt-other :underline 
t)))
-    `(hl-line ((,class :inherit modus-theme-hl-line)))
+    `(highlight ((,class :inherit modus-themes-subtle-blue)))
+    `(highlight-changes ((,class :foreground ,red-alt :underline nil)))
+    `(highlight-changes-delete ((,class :background ,red-nuanced-bg
+                                        :foreground ,red :underline t)))
+    `(hl-line ((,class :inherit modus-themes-hl-line)))
 ;;;;; highlight-blocks
     `(highlight-blocks-depth-1-face ((,class :background ,bg-dim :foreground 
,fg-main)))
     `(highlight-blocks-depth-2-face ((,class :background ,bg-alt :foreground 
,fg-main)))
@@ -4578,12 +4725,12 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(hes-escape-backslash-face ((,class :inherit bold :foreground 
,fg-escape-char-construct)))
     `(hes-escape-sequence-face ((,class :inherit bold :foreground 
,fg-escape-char-backslash)))
 ;;;;; highlight-indentation
-    `(highlight-indentation-face ((,class :inherit modus-theme-hl-line)))
+    `(highlight-indentation-face ((,class :inherit modus-themes-hl-line)))
     `(highlight-indentation-current-column-face ((,class :background 
,bg-active)))
 ;;;;; highlight-numbers
     `(highlight-numbers-number ((,class :foreground ,blue-alt-other)))
 ;;;;; highlight-symbol
-    `(highlight-symbol-face ((,class :inherit modus-theme-special-mild)))
+    `(highlight-symbol-face ((,class :inherit modus-themes-special-mild)))
 ;;;;; highlight-thing
     `(highlight-thing ((,class :background ,bg-alt :foreground ,cyan)))
 ;;;;; hl-defined
@@ -4593,7 +4740,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; hl-fill-column
     `(hl-fill-column-face ((,class :background ,bg-active :foreground 
,fg-active)))
 ;;;;; hl-todo
-    `(hl-todo ((,class :inherit (bold modus-theme-slant) :foreground 
,red-alt-other)))
+    `(hl-todo ((,class :inherit (bold modus-themes-slant) :foreground 
,red-alt-other)))
 ;;;;; hydra
     `(hydra-face-amaranth ((,class :inherit bold :foreground ,yellow)))
     `(hydra-face-blue ((,class :inherit bold :foreground ,blue-alt)))
@@ -4623,7 +4770,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                   magenta bg-alt
                                   bg-active fg-main))))
     `(ido-incomplete-regexp ((,class :inherit error)))
-    `(ido-indicator ((,class :inherit modus-theme-subtle-yellow)))
+    `(ido-indicator ((,class :inherit modus-themes-subtle-yellow)))
     `(ido-only-match ((,class :inherit bold
                               ,@(modus-themes--standard-completions
                                  green green-nuanced-bg
@@ -4631,8 +4778,8 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(ido-subdir ((,class :foreground ,blue)))
     `(ido-virtual ((,class :foreground ,fg-special-warm)))
 ;;;;; iedit
-    `(iedit-occurrence ((,class :inherit modus-theme-refine-blue)))
-    `(iedit-read-only-occurrence ((,class :inherit 
modus-theme-intense-yellow)))
+    `(iedit-occurrence ((,class :inherit modus-themes-refine-blue)))
+    `(iedit-read-only-occurrence ((,class :inherit 
modus-themes-intense-yellow)))
 ;;;;; iflipb
     `(iflipb-current-buffer-face ((,class :inherit bold :foreground 
,cyan-alt)))
     `(iflipb-other-buffer-face ((,class :inherit shadow)))
@@ -4648,10 +4795,10 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; indium
     `(indium-breakpoint-face ((,class :foreground ,red-active)))
     `(indium-frame-url-face ((,class :inherit button :foreground ,fg-alt)))
-    `(indium-keyword-face ((,class :foreground ,magenta-alt-other)))
-    `(indium-litable-face ((,class :inherit modus-theme-slant :foreground 
,fg-special-warm)))
-    `(indium-repl-error-face ((,class :inherit bold :foreground ,red)))
-    `(indium-repl-prompt-face ((,class :foreground ,cyan-alt-other)))
+    `(indium-keyword-face ((,class :inherit font-lock-keyword-face)))
+    `(indium-litable-face ((,class :inherit modus-themes-slant :foreground 
,fg-special-warm)))
+    `(indium-repl-error-face ((,class :inherit error)))
+    `(indium-repl-prompt-face ((,class :inherit comint-highlight-prompt)))
     `(indium-repl-stdout-face ((,class :foreground ,fg-main)))
 ;;;;; info
     `(Info-quoted ((,class ,@(modus-themes--mixed-fonts) ; the capitalization 
is canonical
@@ -4659,16 +4806,16 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(info-header-node ((,class :inherit bold :foreground ,fg-alt)))
     `(info-header-xref ((,class :foreground ,blue-active)))
     `(info-index-match ((,class :inherit match)))
-    `(info-menu-header ((,class :inherit modus-theme-heading-3)))
+    `(info-menu-header ((,class :inherit modus-themes-heading-3)))
     `(info-menu-star ((,class :foreground ,red)))
     `(info-node ((,class :inherit bold)))
-    `(info-title-1 ((,class :inherit modus-theme-heading-1)))
-    `(info-title-2 ((,class :inherit modus-theme-heading-2)))
-    `(info-title-3 ((,class :inherit modus-theme-heading-3)))
-    `(info-title-4 ((,class :inherit modus-theme-heading-4)))
+    `(info-title-1 ((,class :inherit modus-themes-heading-1)))
+    `(info-title-2 ((,class :inherit modus-themes-heading-2)))
+    `(info-title-3 ((,class :inherit modus-themes-heading-3)))
+    `(info-title-4 ((,class :inherit modus-themes-heading-4)))
 ;;;;; info-colors
     `(info-colors-lisp-code-block ((,class :inherit fixed-pitch)))
-    `(info-colors-ref-item-command ((,class :foreground ,magenta)))
+    `(info-colors-ref-item-command ((,class :inherit 
font-lock-function-name-face)))
     `(info-colors-ref-item-constant ((,class :inherit 
font-lock-constant-face)))
     `(info-colors-ref-item-function ((,class :inherit 
font-lock-function-name-face)))
     `(info-colors-ref-item-macro ((,class :inherit font-lock-keyword-face)))
@@ -4688,35 +4835,35 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; ioccur
     `(ioccur-cursor ((,class :foreground ,fg-main)))
     `(ioccur-invalid-regexp ((,class :foreground ,red)))
-    `(ioccur-match-face ((,class :inherit modus-theme-special-calm)))
-    `(ioccur-match-overlay-face ((,class :inherit modus-theme-special-cold 
:extend t)))
+    `(ioccur-match-face ((,class :inherit modus-themes-special-calm)))
+    `(ioccur-match-overlay-face ((,class :inherit modus-themes-special-cold 
:extend t)))
     `(ioccur-num-line-face ((,class :foreground ,fg-special-warm)))
-    `(ioccur-overlay-face ((,class :inherit modus-theme-refine-blue :extend 
t)))
-    `(ioccur-regexp-face ((,class :inherit (modus-theme-intense-magenta 
bold))))
+    `(ioccur-overlay-face ((,class :inherit modus-themes-refine-blue :extend 
t)))
+    `(ioccur-regexp-face ((,class :inherit (modus-themes-intense-magenta 
bold))))
     `(ioccur-title-face ((,class :inherit bold :foreground ,red-alt
                                  ,@(modus-themes--scale 
modus-themes-scale-4))))
 ;;;;; isearch, occur, and the like
-    `(isearch ((,class :inherit (modus-theme-intense-green bold))))
-    `(isearch-fail ((,class :inherit modus-theme-refine-red)))
-    `(isearch-group-1 ((,class :inherit modus-theme-intense-blue)))
-    `(isearch-group-2 ((,class :inherit modus-theme-intense-magenta)))
-    `(lazy-highlight ((,class :inherit modus-theme-refine-cyan)))
-    `(match ((,class :inherit modus-theme-special-calm)))
-    `(query-replace ((,class :inherit (modus-theme-intense-yellow bold))))
+    `(isearch ((,class :inherit (modus-themes-intense-green bold))))
+    `(isearch-fail ((,class :inherit modus-themes-refine-red)))
+    `(isearch-group-1 ((,class :inherit modus-themes-intense-blue)))
+    `(isearch-group-2 ((,class :inherit modus-themes-intense-magenta)))
+    `(lazy-highlight ((,class :inherit modus-themes-refine-cyan)))
+    `(match ((,class :inherit modus-themes-special-calm)))
+    `(query-replace ((,class :inherit (modus-themes-intense-yellow bold))))
 ;;;;; isl (isearch-light)
-    `(isl-line ((,class :inherit modus-theme-subtle-green)))
-    `(isl-match ((,class :inherit modus-theme-refine-cyan)))
-    `(isl-number ((,class :inherit modus-theme-bold :foreground 
,green-active)))
-    `(isl-on ((,class :inherit (bold modus-theme-intense-green))))
-    `(isl-string ((,class :inherit modus-theme-bold :foreground ,cyan-active)))
+    `(isl-line ((,class :inherit modus-themes-subtle-green)))
+    `(isl-match ((,class :inherit modus-themes-refine-cyan)))
+    `(isl-number ((,class :inherit modus-themes-bold :foreground 
,green-active)))
+    `(isl-on ((,class :inherit (bold modus-themes-intense-green))))
+    `(isl-string ((,class :inherit modus-themes-bold :foreground 
,cyan-active)))
 ;;;;; ivy
     `(ivy-action ((,class :inherit bold :foreground ,red-alt)))
     `(ivy-completions-annotations ((,class :inherit completions-annotations)))
     `(ivy-confirm-face ((,class :foreground ,cyan)))
     `(ivy-current-match ((,class ,@(modus-themes--extra-completions
-                                    'modus-theme-refine-cyan
-                                    'modus-theme-intense-cyan
-                                    'modus-theme-special-cold
+                                    'modus-themes-refine-cyan
+                                    'modus-themes-intense-cyan
+                                    'modus-themes-special-cold
                                     nil
                                     'bold))))
     `(ivy-cursor ((,class :background ,fg-main :foreground ,bg-main)))
@@ -4725,36 +4872,36 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(ivy-highlight-face ((,class :foreground ,magenta)))
     `(ivy-match-required-face ((,class :inherit error)))
     `(ivy-minibuffer-match-face-1 ((,class ,@(modus-themes--extra-completions
-                                              'modus-theme-subtle-neutral
-                                              'modus-theme-intense-neutral
-                                              'modus-theme-nuanced-cyan
+                                              'modus-themes-subtle-neutral
+                                              'modus-themes-intense-neutral
+                                              'modus-themes-nuanced-cyan
                                               fg-alt))))
     `(ivy-minibuffer-match-face-2 ((,class ,@(modus-themes--extra-completions
-                                              'modus-theme-subtle-green
-                                              'modus-theme-refine-green
-                                              'modus-theme-nuanced-green
+                                              'modus-themes-subtle-green
+                                              'modus-themes-refine-green
+                                              'modus-themes-nuanced-green
                                               green-alt-other
                                               'bold))))
     `(ivy-minibuffer-match-face-3 ((,class ,@(modus-themes--extra-completions
-                                              'modus-theme-subtle-blue
-                                              'modus-theme-refine-blue
-                                              'modus-theme-nuanced-blue
+                                              'modus-themes-subtle-blue
+                                              'modus-themes-refine-blue
+                                              'modus-themes-nuanced-blue
                                               blue-alt-other
                                               'bold))))
     `(ivy-minibuffer-match-face-4 ((,class ,@(modus-themes--extra-completions
-                                              'modus-theme-subtle-magenta
-                                              'modus-theme-refine-magenta
-                                              'modus-theme-nuanced-magenta
+                                              'modus-themes-subtle-magenta
+                                              'modus-themes-refine-magenta
+                                              'modus-themes-nuanced-magenta
                                               magenta-alt-other
                                               'bold))))
     `(ivy-minibuffer-match-highlight ((,class 
,@(modus-themes--extra-completions
-                                                 'modus-theme-subtle-cyan
-                                                 'modus-theme-intense-cyan
-                                                 'modus-theme-nuanced-cyan
+                                                 'modus-themes-subtle-cyan
+                                                 'modus-themes-intense-cyan
+                                                 'modus-themes-nuanced-cyan
                                                  cyan-alt-other
                                                  'bold))))
-    `(ivy-modified-buffer ((,class :inherit modus-theme-slant :foreground 
,yellow)))
-    `(ivy-modified-outside-buffer ((,class :inherit modus-theme-slant 
:foreground ,yellow-alt)))
+    `(ivy-modified-buffer ((,class :inherit modus-themes-slant :foreground 
,yellow)))
+    `(ivy-modified-outside-buffer ((,class :inherit modus-themes-slant 
:foreground ,yellow-alt)))
     `(ivy-org ((,class :foreground ,cyan-alt-other)))
     `(ivy-prompt-match ((,class :inherit ivy-current-match)))
     `(ivy-remote ((,class :foreground ,magenta)))
@@ -4762,9 +4909,9 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(ivy-subdir ((,class :foreground ,blue-alt-other)))
     `(ivy-virtual ((,class :foreground ,magenta-alt-other)))
     `(ivy-yanked-word ((,class ,@(modus-themes--extra-completions
-                                  'modus-theme-subtle-blue
-                                  'modus-theme-refine-blue
-                                  'modus-theme-nuanced-blue
+                                  'modus-themes-subtle-blue
+                                  'modus-themes-refine-blue
+                                  'modus-themes-nuanced-blue
                                   blue-alt))))
 ;;;;; ivy-posframe
     `(ivy-posframe ((,class :background ,bg-dim :foreground ,fg-main)))
@@ -4773,55 +4920,51 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; jira (org-jira)
     `(jiralib-comment-face ((,class :background ,bg-alt)))
     `(jiralib-comment-header-face ((,class :inherit bold)))
-    `(jiralib-issue-info-face ((,class :inherit modus-theme-special-warm)))
-    `(jiralib-issue-info-header-face ((,class :inherit 
(modus-theme-special-warm bold))))
+    `(jiralib-issue-info-face ((,class :inherit modus-themes-special-warm)))
+    `(jiralib-issue-info-header-face ((,class :inherit 
(modus-themes-special-warm bold))))
     `(jiralib-issue-summary-face ((,class :inherit bold)))
     `(jiralib-link-filter-face ((,class :underline t)))
     `(jiralib-link-issue-face ((,class :underline t)))
     `(jiralib-link-project-face ((,class :underline t)))
 ;;;;; journalctl-mode
-    `(journalctl-error-face ((,class :inherit bold :foreground ,red)))
-    `(journalctl-finished-face ((,class :inherit bold :foreground ,green)))
+    `(journalctl-error-face ((,class :inherit error)))
+    `(journalctl-finished-face ((,class :inherit success)))
     `(journalctl-host-face ((,class :foreground ,blue)))
     `(journalctl-process-face ((,class :foreground ,cyan-alt-other)))
     `(journalctl-starting-face ((,class :foreground ,green)))
     `(journalctl-timestamp-face ((,class :foreground ,fg-special-cold)))
-    `(journalctl-warning-face ((,class :inherit bold :foreground ,yellow)))
+    `(journalctl-warning-face ((,class :inherit warning)))
 ;;;;; js2-mode
-    `(js2-error ((,class :foreground ,red)))
-    `(js2-external-variable ((,class :foreground ,cyan-alt-other)))
-    `(js2-function-call ((,class :foreground ,magenta)))
-    `(js2-function-param ((,class :foreground ,blue)))
-    `(js2-instance-member ((,class :foreground ,magenta-alt-other)))
+    `(js2-error ((,class :inherit modus-themes-lang-error)))
+    `(js2-external-variable ((,class :inherit font-lock-variable-name-face)))
+    `(js2-function-call ((,class :inherit font-lock-function-name-face)))
+    `(js2-function-param ((,class :inherit font-lock-constant-face)))
+    `(js2-instance-member ((,class :inherit font-lock-keyword-face)))
     `(js2-jsdoc-html-tag-delimiter ((,class :foreground ,fg-main)))
-    `(js2-jsdoc-html-tag-name ((,class :foreground ,cyan)))
-    `(js2-jsdoc-tag ((,class :foreground ,fg-special-calm)))
-    `(js2-jsdoc-type ((,class :foreground ,fg-special-cold)))
-    `(js2-jsdoc-value ((,class :foreground ,fg-special-warm)))
+    `(js2-jsdoc-html-tag-name ((,class :inherit font-lock-function-name-face)))
+    `(js2-jsdoc-tag ((,class :inherit (font-lock-builtin-face 
font-lock-comment-face) :weight normal)))
+    `(js2-jsdoc-type ((,class :inherit (font-lock-type-face 
font-lock-comment-face) :weight normal)))
+    `(js2-jsdoc-value ((,class :inherit (font-lock-constant-face 
font-lock-comment-face) :weight normal)))
     `(js2-object-property ((,class :foreground ,fg-main)))
     `(js2-object-property-access ((,class :foreground ,fg-main)))
-    `(js2-private-function-call ((,class :foreground ,green-alt-other)))
-    `(js2-private-member ((,class :foreground ,fg-special-mild)))
-    `(js2-warning ((,class :foreground ,yellow-alt :underline t)))
+    `(js2-private-function-call ((,class :inherit 
font-lock-preprocessor-face)))
+    `(js2-private-member ((,class :inherit font-lock-warning-face)))
+    `(js2-warning ((,class :inherit modus-themes-lang-warning)))
 ;;;;; julia
-    `(julia-macro-face ((,class :inherit modus-theme-bold :foreground 
,magenta)))
-    `(julia-quoted-symbol-face ((,class :foreground ,blue-alt-other)))
+    `(julia-macro-face ((,class :inherit font-lock-builtin-face)))
+    `(julia-quoted-symbol-face ((,class :inherit font-lock-constant-face)))
 ;;;;; jupyter
     `(jupyter-eval-overlay ((,class :inherit bold :foreground ,blue)))
     `(jupyter-repl-input-prompt ((,class :foreground ,cyan-alt-other)))
     `(jupyter-repl-output-prompt ((,class :foreground ,magenta-alt-other)))
-    `(jupyter-repl-traceback ((,class :inherit modus-theme-intense-red)))
+    `(jupyter-repl-traceback ((,class :inherit modus-themes-intense-red)))
 ;;;;; kaocha-runner
     `(kaocha-runner-error-face ((,class :foreground ,red)))
     `(kaocha-runner-success-face ((,class :foreground ,green)))
     `(kaocha-runner-warning-face ((,class :foreground ,yellow)))
 ;;;;; keycast
     `(keycast-command ((,class :inherit bold :foreground ,blue-active)))
-    `(keycast-key ((,class ,@(modus-themes--mode-line-attrs
-                              bg-main blue-active
-                              bg-main blue-active
-                              blue-active blue-intense
-                              'alt-style -3))))
+    `(keycast-key ((,class :background ,blue-active :foreground ,bg-main)))
 ;;;;; line numbers (display-line-numbers-mode and global variant)
     `(line-number
       ((,class :inherit default
@@ -4844,27 +4987,24 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                   fg-alt bg-inactive
                   fg-inactive))))
 ;;;;; lsp-mode
-    `(lsp-face-highlight-read ((,class :inherit modus-theme-subtle-blue 
:underline t)))
-    `(lsp-face-highlight-textual ((,class :inherit modus-theme-subtle-blue)))
-    `(lsp-face-highlight-write ((,class :inherit (modus-theme-refine-blue 
bold))))
+    `(lsp-face-highlight-read ((,class :inherit modus-themes-subtle-blue 
:underline t)))
+    `(lsp-face-highlight-textual ((,class :inherit modus-themes-subtle-blue)))
+    `(lsp-face-highlight-write ((,class :inherit (modus-themes-refine-blue 
bold))))
     `(lsp-face-semhl-constant ((,class :foreground ,blue-alt-other)))
-    `(lsp-face-semhl-deprecated
-      ((,(append '((supports :underline (:style wave))) class)
-        :foreground ,yellow :underline (:style wave))
-       (,class :foreground ,yellow :underline t)))
+    `(lsp-face-semhl-deprecated ((,class :inherit modus-themes-lang-warning)))
     `(lsp-face-semhl-enummember ((,class :foreground ,blue-alt-other)))
     `(lsp-face-semhl-field ((,class :foreground ,cyan-alt)))
-    `(lsp-face-semhl-field-static ((,class :inherit modus-theme-slant 
:foreground ,cyan-alt)))
+    `(lsp-face-semhl-field-static ((,class :inherit modus-themes-slant 
:foreground ,cyan-alt)))
     `(lsp-face-semhl-function ((,class :foreground ,magenta)))
     `(lsp-face-semhl-method ((,class :foreground ,magenta)))
-    `(lsp-face-semhl-namespace ((,class :inherit modus-theme-bold :foreground 
,magenta-alt)))
+    `(lsp-face-semhl-namespace ((,class :inherit modus-themes-bold :foreground 
,magenta-alt)))
     `(lsp-face-semhl-preprocessor ((,class :foreground ,red-alt-other)))
-    `(lsp-face-semhl-static-method ((,class :inherit modus-theme-slant 
:foreground ,magenta)))
+    `(lsp-face-semhl-static-method ((,class :inherit modus-themes-slant 
:foreground ,magenta)))
     `(lsp-face-semhl-type-class ((,class :foreground ,magenta-alt)))
     `(lsp-face-semhl-type-enum ((,class :foreground ,magenta-alt)))
-    `(lsp-face-semhl-type-primitive ((,class :inherit modus-theme-slant 
:foreground ,magenta-alt)))
-    `(lsp-face-semhl-type-template ((,class :inherit modus-theme-slant 
:foreground ,magenta-alt)))
-    `(lsp-face-semhl-type-typedef ((,class :inherit modus-theme-slant 
:foreground ,magenta-alt)))
+    `(lsp-face-semhl-type-primitive ((,class :inherit modus-themes-slant 
:foreground ,magenta-alt)))
+    `(lsp-face-semhl-type-template ((,class :inherit modus-themes-slant 
:foreground ,magenta-alt)))
+    `(lsp-face-semhl-type-typedef ((,class :inherit modus-themes-slant 
:foreground ,magenta-alt)))
     `(lsp-face-semhl-variable ((,class :foreground ,cyan)))
     `(lsp-face-semhl-variable-local ((,class :foreground ,cyan)))
     `(lsp-face-semhl-variable-parameter ((,class :foreground ,cyan-alt-other)))
@@ -4876,11 +5016,11 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(lsp-ui-peek-filename ((,class :foreground ,fg-special-warm)))
     `(lsp-ui-peek-footer ((,class :background ,bg-header :foreground 
,fg-header)))
     `(lsp-ui-peek-header ((,class :background ,bg-header :foreground 
,fg-header)))
-    `(lsp-ui-peek-highlight ((,class :inherit modus-theme-subtle-blue)))
+    `(lsp-ui-peek-highlight ((,class :inherit modus-themes-subtle-blue)))
     `(lsp-ui-peek-line-number ((,class :inherit shadow)))
     `(lsp-ui-peek-list ((,class :background ,bg-dim)))
     `(lsp-ui-peek-peek ((,class :background ,bg-alt)))
-    `(lsp-ui-peek-selection ((,class :inherit modus-theme-subtle-cyan)))
+    `(lsp-ui-peek-selection ((,class :inherit modus-themes-subtle-cyan)))
     `(lsp-ui-sideline-code-action ((,class :foreground ,yellow)))
     `(lsp-ui-sideline-current-symbol ((,class :inherit bold :height 0.99 :box 
(:line-width -1 :style nil) :foreground ,fg-main)))
     `(lsp-ui-sideline-symbol ((,class :inherit bold :height 0.99 :box 
(:line-width -1 :style nil) :foreground ,fg-alt)))
@@ -4899,11 +5039,11 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(magit-bisect-good ((,class :foreground ,green-alt-other)))
     `(magit-bisect-skip ((,class :foreground ,yellow-alt-other)))
     `(magit-blame-date ((,class :foreground ,blue)))
-    `(magit-blame-dimmed ((,class :inherit shadow)))
+    `(magit-blame-dimmed ((,class :inherit (shadow modus-themes-reset-hard))))
     `(magit-blame-hash ((,class :foreground ,fg-special-warm)))
-    `(magit-blame-heading ((,class :background ,bg-alt)))
-    `(magit-blame-highlight ((,class :inherit modus-theme-nuanced-cyan)))
-    `(magit-blame-margin ((,class :inherit magit-blame-highlight)))
+    `(magit-blame-heading ((,class :inherit modus-themes-reset-hard 
:background ,bg-alt :extend t)))
+    `(magit-blame-highlight ((,class :inherit modus-themes-nuanced-cyan)))
+    `(magit-blame-margin ((,class :inherit (magit-blame-highlight 
modus-themes-reset-hard))))
     `(magit-blame-name ((,class :foreground ,magenta-alt-other)))
     `(magit-blame-summary ((,class :foreground ,cyan-alt-other)))
     `(magit-branch-current ((,class :foreground ,blue-alt-other :box t)))
@@ -4914,7 +5054,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(magit-cherry-equivalent ((,class :background ,bg-main :foreground 
,magenta-intense)))
     `(magit-cherry-unmatched ((,class :background ,bg-main :foreground 
,cyan-intense)))
     ;; NOTE: here we break from the pattern of inheriting from the
-    ;; modus-theme-diff-* faces, though only for the standard actions,
+    ;; modus-themes-diff-* faces, though only for the standard actions,
     ;; not the highlighted ones.  This is because Magit's interaction
     ;; model relies on highlighting the current diff hunk.
     `(magit-diff-added ((,class ,@(modus-themes--diff
@@ -4922,37 +5062,37 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                    bg-diff-added fg-diff-added
                                    green-nuanced-bg fg-diff-added
                                    bg-diff-added-deuteran 
fg-diff-added-deuteran))))
-    `(magit-diff-added-highlight ((,class :inherit 
modus-theme-diff-focus-added)))
+    `(magit-diff-added-highlight ((,class :inherit 
modus-themes-diff-focus-added)))
     `(magit-diff-base ((,class ,@(modus-themes--diff
                                   bg-main yellow
                                   bg-diff-changed fg-diff-changed
                                   yellow-nuanced-bg fg-diff-changed))))
-    `(magit-diff-base-highlight ((,class :inherit 
modus-theme-diff-focus-changed)))
+    `(magit-diff-base-highlight ((,class :inherit 
modus-themes-diff-focus-changed)))
     `(magit-diff-context ((,class :foreground ,fg-unfocused)))
     `(magit-diff-context-highlight ((,class ,@(modus-themes--diff
                                                bg-dim fg-dim
                                                bg-inactive fg-inactive
                                                bg-dim fg-alt))))
     `(magit-diff-file-heading ((,class :inherit bold :foreground 
,fg-special-cold)))
-    `(magit-diff-file-heading-highlight ((,class :inherit 
(modus-theme-special-cold bold))))
-    `(magit-diff-file-heading-selection ((,class :inherit 
modus-theme-refine-cyan)))
+    `(magit-diff-file-heading-highlight ((,class :inherit 
(modus-themes-special-cold bold))))
+    `(magit-diff-file-heading-selection ((,class :inherit 
modus-themes-refine-cyan)))
     ;; NOTE: here we break from the pattern of inheriting from the
-    ;; modus-theme-diff-* faces.
+    ;; modus-themes-diff-* faces.
     `(magit-diff-hunk-heading ((,class :inherit bold :background ,bg-active
                                        :foreground ,fg-inactive)))
     `(magit-diff-hunk-heading-highlight
       ((,class :inherit bold
                :background ,@(modus-themes--diff-deuteran bg-region 
bg-diff-heading)
                :foreground ,@(modus-themes--diff-deuteran fg-main 
fg-diff-heading))))
-    `(magit-diff-hunk-heading-selection ((,class :inherit 
modus-theme-refine-blue)))
+    `(magit-diff-hunk-heading-selection ((,class :inherit 
modus-themes-refine-blue)))
     `(magit-diff-hunk-region ((,class :inherit bold)))
     `(magit-diff-lines-boundary ((,class :background ,fg-main)))
-    `(magit-diff-lines-heading ((,class :inherit modus-theme-refine-magenta)))
+    `(magit-diff-lines-heading ((,class :inherit modus-themes-refine-magenta)))
     `(magit-diff-removed ((,class ,@(modus-themes--diff
                                      bg-main red
                                      bg-diff-removed fg-diff-removed
                                      red-nuanced-bg fg-diff-removed))))
-    `(magit-diff-removed-highlight ((,class :inherit 
modus-theme-diff-focus-removed)))
+    `(magit-diff-removed-highlight ((,class :inherit 
modus-themes-diff-focus-removed)))
     `(magit-diffstat-added ((,class :foreground ,@(modus-themes--diff-deuteran 
blue green))))
     `(magit-diffstat-removed ((,class :foreground ,red)))
     `(magit-dimmed ((,class :foreground ,fg-unfocused)))
@@ -4960,7 +5100,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(magit-hash ((,class :inherit shadow)))
     `(magit-head ((,class :inherit magit-branch-local)))
     `(magit-header-line ((,class :inherit bold :foreground ,magenta-active)))
-    `(magit-header-line-key ((,class :inherit bold :foreground ,blue-active)))
+    `(magit-header-line-key ((,class :inherit modus-themes-key-binding)))
     `(magit-header-line-log-select ((,class :inherit bold :foreground 
,fg-main)))
     `(magit-keyword ((,class :foreground ,magenta)))
     `(magit-keyword-squash ((,class :inherit bold :foreground 
,yellow-alt-other)))
@@ -4986,7 +5126,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(magit-refname-wip ((,class :inherit shadow)))
     `(magit-section ((,class :background ,bg-dim :foreground ,fg-main)))
     `(magit-section-heading ((,class :inherit bold :foreground ,cyan)))
-    `(magit-section-heading-selection ((,class :inherit 
(modus-theme-refine-cyan bold))))
+    `(magit-section-heading-selection ((,class :inherit 
(modus-themes-refine-cyan bold))))
     `(magit-section-highlight ((,class :background ,bg-alt)))
     `(magit-sequence-done ((,class :foreground ,green-alt)))
     `(magit-sequence-drop ((,class :foreground ,red-alt)))
@@ -5011,16 +5151,22 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(makefile-space ((,class :background ,magenta-nuanced-bg)))
 ;;;;; man
     `(Man-overstrike ((,class :inherit bold :foreground ,magenta)))
-    `(Man-reverse ((,class :inherit modus-theme-subtle-magenta)))
+    `(Man-reverse ((,class :inherit modus-themes-subtle-magenta)))
     `(Man-underline ((,class :foreground ,cyan :underline t)))
 ;;;;; marginalia
     `(marginalia-archive ((,class :foreground ,green-nuanced-fg)))
     `(marginalia-date ((,class :foreground ,blue-nuanced-fg)))
     `(marginalia-char ((,class :foreground ,red-active)))
-    `(marginalia-documentation ((,class :foreground ,fg-special-cold :inherit 
modus-theme-slant)))
+    `(marginalia-documentation ((,class :foreground ,fg-special-cold :inherit 
modus-themes-slant)))
     `(marginalia-file-modes ((,class :inherit shadow)))
     `(marginalia-file-name ((,class :foreground ,fg-special-mild)))
     `(marginalia-file-owner ((,class :foreground ,red-nuanced-fg)))
+    ;; Here we make an exception of not applying the bespoke
+    ;; `modus-themes-key-binding' for two reasons: (1) completion
+    ;; highlights can be fairly intense, so we do not want more
+    ;; components to compete with them for attention, (2) the
+    ;; `marginalia-key' may not be used for key bindings specifically,
+    ;; so we might end up applying styles in places we should not.
     `(marginalia-key ((,class :foreground ,magenta-active)))
     `(marginalia-mode ((,class :foreground ,cyan-active)))
     `(marginalia-modified ((,class :foreground ,yellow-active)))
@@ -5030,21 +5176,21 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(marginalia-variable ((,class :foreground ,yellow-nuanced-fg)))
     `(marginalia-version ((,class :foreground ,cyan-active)))
 ;;;;; markdown-mode
-    `(markdown-blockquote-face ((,class :inherit modus-theme-slant :foreground 
,fg-special-cold)))
+    `(markdown-blockquote-face ((,class :inherit modus-themes-slant 
:foreground ,fg-special-cold)))
     `(markdown-bold-face ((,class :inherit bold)))
     `(markdown-code-face ((,class ,@(modus-themes--mixed-fonts) :background 
,bg-dim :extend t)))
     `(markdown-comment-face ((,class :inherit font-lock-comment-face)))
     `(markdown-footnote-marker-face ((,class :inherit bold :foreground 
,cyan-alt)))
-    `(markdown-footnote-text-face ((,class :inherit modus-theme-slant 
:foreground ,fg-main)))
+    `(markdown-footnote-text-face ((,class :inherit modus-themes-slant 
:foreground ,fg-main)))
     `(markdown-gfm-checkbox-face ((,class :foreground ,cyan-alt-other)))
-    `(markdown-header-delimiter-face ((,class :inherit modus-theme-bold 
:foreground ,fg-dim)))
+    `(markdown-header-delimiter-face ((,class :inherit modus-themes-bold 
:foreground ,fg-dim)))
     `(markdown-header-face ((t nil)))
-    `(markdown-header-face-1 ((,class :inherit modus-theme-heading-1)))
-    `(markdown-header-face-2 ((,class :inherit modus-theme-heading-2)))
-    `(markdown-header-face-3 ((,class :inherit modus-theme-heading-3)))
-    `(markdown-header-face-4 ((,class :inherit modus-theme-heading-4)))
-    `(markdown-header-face-5 ((,class :inherit modus-theme-heading-5)))
-    `(markdown-header-face-6 ((,class :inherit modus-theme-heading-6)))
+    `(markdown-header-face-1 ((,class :inherit modus-themes-heading-1)))
+    `(markdown-header-face-2 ((,class :inherit modus-themes-heading-2)))
+    `(markdown-header-face-3 ((,class :inherit modus-themes-heading-3)))
+    `(markdown-header-face-4 ((,class :inherit modus-themes-heading-4)))
+    `(markdown-header-face-5 ((,class :inherit modus-themes-heading-5)))
+    `(markdown-header-face-6 ((,class :inherit modus-themes-heading-6)))
     `(markdown-header-rule-face ((,class :inherit bold :foreground 
,fg-special-warm)))
     `(markdown-hr-face ((,class :inherit bold :foreground ,fg-special-warm)))
     `(markdown-html-attr-name-face ((,class ,@(modus-themes--mixed-fonts)
@@ -5065,9 +5211,9 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(markdown-language-keyword-face ((,class ,@(modus-themes--mixed-fonts)
                                               :background ,bg-alt
                                               :foreground ,fg-alt)))
-    `(markdown-line-break-face ((,class :inherit modus-theme-refine-cyan 
:underline t)))
+    `(markdown-line-break-face ((,class :inherit modus-themes-refine-cyan 
:underline t)))
     `(markdown-link-face ((,class :inherit button)))
-    `(markdown-link-title-face ((,class :inherit modus-theme-slant :foreground 
,fg-special-cold)))
+    `(markdown-link-title-face ((,class :inherit modus-themes-slant 
:foreground ,fg-special-cold)))
     `(markdown-list-face ((,class :foreground ,fg-dim)))
     `(markdown-markup-face ((,class :inherit shadow)))
     `(markdown-math-face ((,class :foreground ,magenta-alt-other)))
@@ -5090,13 +5236,13 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(markup-command-face ((,class :foreground ,fg-inactive)))
     `(markup-comment-face ((,class :inherit font-lock-comment-face)))
     `(markup-complex-replacement-face ((,class :box (:line-width 2 :color nil 
:style released-button)
-                                               :inherit 
modus-theme-refine-magenta)))
+                                               :inherit 
modus-themes-refine-magenta)))
     `(markup-emphasis-face ((,class :inherit italic :foreground 
,fg-special-cold)))
     `(markup-error-face ((,class :inherit bold :foreground ,red)))
     `(markup-gen-face ((,class :foreground ,magenta-alt)))
     `(markup-internal-reference-face ((,class :inherit button :foreground 
,fg-alt)))
     `(markup-italic-face ((,class :inherit italic :foreground 
,fg-special-cold)))
-    `(markup-list-face ((,class :inherit modus-theme-special-calm)))
+    `(markup-list-face ((,class :inherit modus-themes-special-calm)))
     `(markup-meta-face ((,class :foreground ,fg-inactive)))
     `(markup-meta-hide-face ((,class :inherit shadow)))
     `(markup-passthrough-face ((,class :inherit fixed-pitch :foreground 
,cyan)))
@@ -5107,9 +5253,9 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(markup-strong-face ((,class :inherit bold :foreground ,red-nuanced-fg)))
     `(markup-subscript-face ((,class :height 0.8 :foreground 
,fg-special-cold)))
     `(markup-superscript-face ((,class :height 0.8 :foreground 
,fg-special-cold)))
-    `(markup-table-cell-face ((,class :inherit modus-theme-special-cold)))
-    `(markup-table-face ((,class :inherit modus-theme-subtle-cyan)))
-    `(markup-table-row-face ((,class :inherit modus-theme-subtle-cyan)))
+    `(markup-table-cell-face ((,class :inherit modus-themes-special-cold)))
+    `(markup-table-face ((,class :inherit modus-themes-subtle-cyan)))
+    `(markup-table-row-face ((,class :inherit modus-themes-subtle-cyan)))
     `(markup-title-0-face ((,class :height 3.0 :foreground ,blue-nuanced-fg)))
     `(markup-title-1-face ((,class :height 2.4 :foreground ,blue-nuanced-fg)))
     `(markup-title-2-face ((,class :height 1.8 :foreground ,blue-nuanced-fg)))
@@ -5117,7 +5263,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(markup-title-4-face ((,class :height 1.2 :foreground ,blue-nuanced-fg)))
     `(markup-title-5-face ((,class :height 1.2 :foreground ,blue-nuanced-fg 
:underline t)))
     `(markup-value-face ((,class :foreground ,fg-inactive)))
-    `(markup-verbatim-face ((,class :inherit modus-theme-special-mild)))
+    `(markup-verbatim-face ((,class :inherit modus-themes-special-mild)))
 ;;;;; mentor
     `(mentor-download-message ((,class :foreground ,fg-special-warm)))
     `(mentor-download-name ((,class :foreground ,fg-special-cold)))
@@ -5126,7 +5272,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(mentor-download-speed-down ((,class :foreground ,cyan-alt)))
     `(mentor-download-speed-up ((,class :foreground ,red-alt)))
     `(mentor-download-state ((,class :foreground ,yellow-alt)))
-    `(mentor-highlight-face ((,class :inherit modus-theme-subtle-blue)))
+    `(mentor-highlight-face ((,class :inherit modus-themes-subtle-blue)))
     `(mentor-tracker-name ((,class :foreground ,magenta-alt)))
 ;;;;; messages
     `(message-cited-text-1 ((,class :foreground ,blue-faint)))
@@ -5141,7 +5287,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(message-header-to ((,class :inherit bold :foreground 
,magenta-alt-other)))
     `(message-header-xheader ((,class :foreground ,blue-alt)))
     `(message-mml ((,class :foreground ,yellow)))
-    `(message-separator ((,class :inherit modus-theme-intense-neutral)))
+    `(message-separator ((,class :inherit modus-themes-intense-neutral)))
 ;;;;; minibuffer-line
     `(minibuffer-line ((,class :foreground ,fg-main)))
 ;;;;; minimap
@@ -5159,14 +5305,19 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; modeline
     `(mode-line ((,class ,@(modus-themes--variable-pitch-ui)
                          ,@(modus-themes--mode-line-attrs
-                            fg-active bg-active fg-dim bg-active
-                            fg-alt bg-active 'alt-style nil bg-main))))
+                            fg-active bg-active
+                            fg-dim bg-active
+                            fg-main bg-active-accent
+                            fg-alt bg-active
+                            'alt-style nil bg-main))))
     `(mode-line-buffer-id ((,class :inherit bold)))
     `(mode-line-emphasis ((,class :inherit bold :foreground ,blue-active)))
-    `(mode-line-highlight ((,class :inherit modus-theme-active-blue :box 
(:line-width -1 :style pressed-button))))
+    `(mode-line-highlight ((,class :inherit modus-themes-active-blue :box 
(:line-width -1 :style pressed-button))))
     `(mode-line-inactive ((,class ,@(modus-themes--variable-pitch-ui)
                                   ,@(modus-themes--mode-line-attrs
-                                     fg-inactive bg-inactive fg-alt bg-dim
+                                     fg-inactive bg-inactive
+                                     fg-alt bg-dim
+                                     fg-inactive bg-inactive
                                      bg-region bg-active))))
 ;;;;; mood-line
     `(mood-line-modified ((,class :foreground ,magenta-active)))
@@ -5189,28 +5340,28 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(mu4e-cited-6-face ((,class :foreground ,magenta)))
     `(mu4e-cited-7-face ((,class :foreground ,green-alt)))
     `(mu4e-compose-header-face ((,class :inherit mu4e-compose-separator-face)))
-    `(mu4e-compose-separator-face ((,class :inherit 
modus-theme-intense-neutral)))
+    `(mu4e-compose-separator-face ((,class :inherit 
modus-themes-intense-neutral)))
     `(mu4e-contact-face ((,class :inherit message-header-to)))
     `(mu4e-context-face ((,class :foreground ,blue-active)))
     `(mu4e-draft-face ((,class :foreground ,magenta-alt)))
     `(mu4e-flagged-face ((,class :foreground ,red-alt)))
-    `(mu4e-footer-face ((,class :inherit modus-theme-slant :foreground 
,fg-special-cold)))
+    `(mu4e-footer-face ((,class :inherit modus-themes-slant :foreground 
,fg-special-cold)))
     `(mu4e-forwarded-face ((,class :foreground ,magenta-alt-other)))
     `(mu4e-header-face ((,class :inherit shadow)))
-    `(mu4e-header-highlight-face ((,class :inherit modus-theme-hl-line)))
+    `(mu4e-header-highlight-face ((,class :inherit modus-themes-hl-line)))
     `(mu4e-header-key-face ((,class :inherit message-header-name)))
     `(mu4e-header-marks-face ((,class :inherit 
mu4e-special-header-value-face)))
     `(mu4e-header-title-face ((,class :foreground ,fg-special-mild)))
     `(mu4e-header-value-face ((,class :inherit message-header-other)))
-    `(mu4e-highlight-face ((,class :inherit bold :foreground ,blue-alt-other)))
+    `(mu4e-highlight-face ((,class :inherit modus-themes-key-binding)))
     `(mu4e-link-face ((,class :inherit button)))
     `(mu4e-modeline-face ((,class :foreground ,magenta-active)))
-    `(mu4e-moved-face ((,class :inherit modus-theme-slant :foreground 
,yellow)))
+    `(mu4e-moved-face ((,class :inherit modus-themes-slant :foreground 
,yellow)))
     `(mu4e-ok-face ((,class :inherit bold :foreground ,green)))
-    `(mu4e-region-code ((,class :inherit modus-theme-special-calm)))
+    `(mu4e-region-code ((,class :inherit modus-themes-special-calm)))
     `(mu4e-replied-face ((,class :foreground ,blue)))
     `(mu4e-special-header-value-face ((,class :inherit 
message-header-subject)))
-    `(mu4e-system-face ((,class :inherit modus-theme-slant :foreground 
,fg-mark-del)))
+    `(mu4e-system-face ((,class :inherit modus-themes-slant :foreground 
,fg-mark-del)))
     `(mu4e-title-face ((,class :foreground ,fg-main)))
     `(mu4e-trashed-face ((,class :foreground ,red)))
     `(mu4e-unread-face ((,class :inherit bold)))
@@ -5218,7 +5369,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(mu4e-view-body-face ((,class :foreground ,fg-main)))
     `(mu4e-warning-face ((,class :inherit warning)))
 ;;;;; mu4e-conversation
-    `(mu4e-conversation-header ((,class :inherit modus-theme-special-cold)))
+    `(mu4e-conversation-header ((,class :inherit modus-themes-special-cold)))
     `(mu4e-conversation-sender-1 ((,class :foreground ,fg-special-warm)))
     `(mu4e-conversation-sender-2 ((,class :foreground ,fg-special-cold)))
     `(mu4e-conversation-sender-3 ((,class :foreground ,fg-special-mild)))
@@ -5250,20 +5401,20 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(neo-vc-needs-merge-face ((,class :foreground ,magenta-alt)))
     `(neo-vc-needs-update-face ((,class :underline t)))
     `(neo-vc-removed-face ((,class :strike-through t)))
-    `(neo-vc-unlocked-changes-face ((,class :inherit modus-theme-refine-blue)))
+    `(neo-vc-unlocked-changes-face ((,class :inherit 
modus-themes-refine-blue)))
     `(neo-vc-up-to-date-face ((,class :inherit shadow)))
     `(neo-vc-user-face ((,class :foreground ,magenta)))
 ;;;;; no-emoji
     `(no-emoji ((,class :foreground ,cyan)))
 ;;;;; notmuch
-    `(notmuch-crypto-decryption ((,class :inherit modus-theme-refine-magenta)))
+    `(notmuch-crypto-decryption ((,class :inherit modus-themes-special-mild)))
     `(notmuch-crypto-part-header ((,class :foreground ,magenta-alt-other)))
-    `(notmuch-crypto-signature-bad ((,class :inherit modus-theme-intense-red)))
-    `(notmuch-crypto-signature-good ((,class :inherit 
modus-theme-refine-green)))
-    `(notmuch-crypto-signature-good-key ((,class :inherit 
modus-theme-refine-yellow)))
-    `(notmuch-crypto-signature-unknown ((,class :inherit 
modus-theme-refine-red)))
+    `(notmuch-crypto-signature-bad ((,class :inherit 
modus-themes-intense-red)))
+    `(notmuch-crypto-signature-good ((,class :inherit 
modus-themes-refine-blue)))
+    `(notmuch-crypto-signature-good-key ((,class :inherit 
modus-themes-refine-cyan)))
+    `(notmuch-crypto-signature-unknown ((,class :inherit 
modus-themes-refine-red)))
     `(notmuch-hello-logo-background ((,class :background "gray50")))
-    `(notmuch-message-summary-face ((,class :inherit 
modus-theme-nuanced-cyan)))
+    `(notmuch-message-summary-face ((,class :inherit 
modus-themes-nuanced-cyan)))
     `(notmuch-search-count ((,class :inherit shadow)))
     `(notmuch-search-date ((,class :foreground ,cyan)))
     `(notmuch-search-flagged-face ((,class :foreground ,red-alt)))
@@ -5271,14 +5422,8 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(notmuch-search-non-matching-authors ((,class :inherit shadow)))
     `(notmuch-search-subject ((,class :foreground ,fg-dim)))
     `(notmuch-search-unread-face ((,class :inherit bold)))
-    `(notmuch-tag-added
-      ((,(append '((supports :underline (:style wave))) class)
-        :underline (:color ,green :style wave))
-       (,class :foreground ,green :underline t)))
-    `(notmuch-tag-deleted
-      ((,(append '((supports :underline (:style wave))) class)
-        :underline (:color ,red :style wave))
-       (,class :foreground ,red :underline t)))
+    `(notmuch-tag-added ((,class :inherit modus-themes-lang-note)))
+    `(notmuch-tag-deleted ((,class :inherit modus-themes-lang-error)))
     `(notmuch-tag-face ((,class :inherit bold :foreground ,blue-alt)))
     `(notmuch-tag-flagged ((,class :foreground ,red-alt)))
     `(notmuch-tag-unread ((,class :foreground ,magenta-alt)))
@@ -5300,15 +5445,15 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(nxml-cdata-section-CDATA ((,class :inherit error)))
     `(nxml-cdata-section-delimiter ((,class :inherit error)))
     `(nxml-char-ref-delimiter ((,class :foreground ,fg-special-mild)))
-    `(nxml-char-ref-number ((,class :inherit modus-theme-bold :foreground 
,fg-special-mild)))
-    `(nxml-delimited-data ((,class :inherit modus-theme-slant :foreground 
,fg-special-cold)))
+    `(nxml-char-ref-number ((,class :inherit modus-themes-bold :foreground 
,fg-special-mild)))
+    `(nxml-delimited-data ((,class :inherit modus-themes-slant :foreground 
,fg-special-cold)))
     `(nxml-delimiter ((,class :foreground ,fg-dim)))
     `(nxml-element-colon ((,class :foreground ,fg-main)))
     `(nxml-element-local-name ((,class :inherit font-lock-function-name-face)))
     `(nxml-element-prefix ((,class :inherit font-lock-builtin-face)))
     `(nxml-entity-ref-delimiter ((,class :foreground ,fg-special-mild)))
-    `(nxml-entity-ref-name ((,class :inherit modus-theme-bold :foreground 
,fg-special-mild)))
-    `(nxml-glyph ((,class :inherit modus-theme-intense-neutral)))
+    `(nxml-entity-ref-name ((,class :inherit modus-themes-bold :foreground 
,fg-special-mild)))
+    `(nxml-glyph ((,class :inherit modus-themes-intense-neutral)))
     `(nxml-hash ((,class :inherit (bold font-lock-string-face))))
     `(nxml-heading ((,class :inherit bold)))
     `(nxml-name ((,class :inherit font-lock-builtin-face)))
@@ -5316,11 +5461,10 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(nxml-namespace-attribute-prefix ((,class :inherit 
font-lock-variable-name-face)))
     `(nxml-processing-instruction-target ((,class :inherit 
font-lock-keyword-face)))
     `(nxml-prolog-keyword ((,class :inherit font-lock-keyword-face)))
-    `(nxml-ref ((,class :inherit modus-theme-bold :foreground 
,fg-special-mild)))
+    `(nxml-ref ((,class :inherit modus-themes-bold :foreground 
,fg-special-mild)))
     `(rng-error ((,class :inherit error)))
 ;;;;; objed
-    `(objed-hl ((,class :background ,(if modus-themes-intense-hl-line
-                                         bg-hl-alt-intense bg-hl-alt))))
+    `(objed-hl ((,class :background ,(if modus-themes-hl-line 
bg-hl-alt-intense bg-hl-alt))))
     `(objed-mark ((,class :background ,bg-active)))
     `(objed-mode-line ((,class :foreground ,cyan-active)))
 ;;;;; orderless
@@ -5343,7 +5487,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; org
     `(org-agenda-calendar-event ((,class :foreground ,fg-main)))
     `(org-agenda-calendar-sexp ((,class :foreground ,cyan-alt)))
-    `(org-agenda-clocking ((,class :inherit modus-theme-special-cold :extend 
t)))
+    `(org-agenda-clocking ((,class :inherit modus-themes-special-cold :extend 
t)))
     `(org-agenda-column-dateline ((,class :background ,bg-alt)))
     `(org-agenda-current-time ((,class :inherit bold :foreground 
,blue-alt-other)))
     `(org-agenda-date ((,class :foreground ,cyan)))
@@ -5372,9 +5516,9 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                             :background ,bg-inactive :foreground ,fg-active)))
     `(org-checkbox-statistics-done ((,class :inherit org-done)))
     `(org-checkbox-statistics-todo ((,class :inherit org-todo)))
-    `(org-clock-overlay ((,class :inherit modus-theme-special-cold)))
+    `(org-clock-overlay ((,class :inherit modus-themes-special-cold)))
     `(org-code ((,class ,@(modus-themes--mixed-fonts)
-                        :background ,red-nuanced-bg :foreground ,magenta)))
+                        :background ,magenta-nuanced-bg :foreground 
,magenta-nuanced-fg)))
     `(org-column ((,class :background ,bg-alt)))
     `(org-column-title ((,class :inherit bold :underline t :background 
,bg-alt)))
     `(org-date ((,class :inherit ,(if modus-themes-no-mixed-fonts
@@ -5383,11 +5527,11 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                         ,@(modus-themes--link-color
                            cyan cyan-faint))))
     `(org-date-selected ((,class :inherit bold :foreground ,blue-alt 
:inverse-video t)))
-    `(org-dispatcher-highlight ((,class :inherit (bold modus-theme-mark-alt))))
+    `(org-dispatcher-highlight ((,class :inherit (bold 
modus-themes-mark-alt))))
     `(org-document-info ((,class :foreground ,fg-special-cold)))
     `(org-document-info-keyword ((,class ,@(modus-themes--mixed-fonts)
                                          :foreground ,fg-alt)))
-    `(org-document-title ((,class :inherit (bold modus-theme-variable-pitch) 
:foreground ,fg-special-cold
+    `(org-document-title ((,class :inherit (bold modus-themes-variable-pitch) 
:foreground ,fg-special-cold
                                   ,@(modus-themes--scale 
modus-themes-scale-5))))
     `(org-done ((,class :foreground ,green)))
     `(org-drawer ((,class ,@(modus-themes--mixed-fonts)
@@ -5430,32 +5574,30 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                               green-graph-1-bg
                                               green-graph-0-bg
                                               green-graph-1-bg))))
-    `(org-headline-done ((,class :inherit modus-theme-variable-pitch 
:foreground ,green-nuanced-fg)))
-    `(org-headline-todo ((,class :inherit modus-theme-variable-pitch 
:foreground ,red-nuanced-fg)))
+    `(org-headline-done ((,class :inherit modus-themes-variable-pitch 
:foreground ,green-nuanced-fg)))
+    `(org-headline-todo ((,class :inherit modus-themes-variable-pitch 
:foreground ,red-nuanced-fg)))
     `(org-hide ((,class :foreground ,bg-main)))
     `(org-indent ((,class :inherit (fixed-pitch org-hide))))
     `(org-latex-and-related ((,class :foreground ,magenta-refine-fg)))
-    `(org-level-1 ((,class :inherit modus-theme-heading-1)))
-    `(org-level-2 ((,class :inherit modus-theme-heading-2)))
-    `(org-level-3 ((,class :inherit modus-theme-heading-3)))
-    `(org-level-4 ((,class :inherit modus-theme-heading-4)))
-    `(org-level-5 ((,class :inherit modus-theme-heading-5)))
-    `(org-level-6 ((,class :inherit modus-theme-heading-6)))
-    `(org-level-7 ((,class :inherit modus-theme-heading-7)))
-    `(org-level-8 ((,class :inherit modus-theme-heading-8)))
+    `(org-level-1 ((,class :inherit modus-themes-heading-1)))
+    `(org-level-2 ((,class :inherit modus-themes-heading-2)))
+    `(org-level-3 ((,class :inherit modus-themes-heading-3)))
+    `(org-level-4 ((,class :inherit modus-themes-heading-4)))
+    `(org-level-5 ((,class :inherit modus-themes-heading-5)))
+    `(org-level-6 ((,class :inherit modus-themes-heading-6)))
+    `(org-level-7 ((,class :inherit modus-themes-heading-7)))
+    `(org-level-8 ((,class :inherit modus-themes-heading-8)))
     `(org-link ((,class :inherit button)))
     `(org-list-dt ((,class :inherit bold)))
     `(org-macro ((,class ,@(modus-themes--mixed-fonts)
-                         :background ,blue-nuanced-bg :foreground 
,magenta-alt-other)))
+                         :background ,cyan-nuanced-bg :foreground 
,cyan-nuanced-fg)))
     `(org-meta-line ((,class ,@(modus-themes--mixed-fonts) :foreground 
,fg-alt)))
     `(org-mode-line-clock ((,class :foreground ,fg-main)))
-    `(org-mode-line-clock-overrun ((,class :inherit modus-theme-active-red)))
+    `(org-mode-line-clock-overrun ((,class :inherit modus-themes-active-red)))
     `(org-priority ((,class :foreground ,magenta)))
     `(org-property-value ((,class ,@(modus-themes--mixed-fonts)
                                   :foreground ,fg-special-cold)))
-    `(org-quote ((,class :inherit modus-theme-slant
-                         ,@(modus-themes--org-block bg-dim)
-                         :foreground ,fg-special-cold)))
+    `(org-quote ((,class ,@(modus-themes--org-block bg-dim))))
     `(org-scheduled ((,class :foreground ,magenta-alt)))
     `(org-scheduled-previously ((,class :foreground ,yellow-alt-other)))
     `(org-scheduled-today ((,class :foreground ,magenta-alt-other)))
@@ -5464,7 +5606,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                    :foreground ,fg-alt)))
     `(org-table ((,class ,@(modus-themes--mixed-fonts)
                          :foreground ,fg-special-cold)))
-    `(org-table-header ((,class :inherit (fixed-pitch 
modus-theme-intense-neutral))))
+    `(org-table-header ((,class :inherit (fixed-pitch 
modus-themes-intense-neutral))))
     `(org-tag ((,class :foreground ,magenta-nuanced-fg)))
     `(org-tag-group ((,class :inherit bold :foreground ,cyan-nuanced-fg)))
     `(org-target ((,class :underline t)))
@@ -5477,8 +5619,8 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(org-verse ((,class :inherit org-quote)))
     `(org-warning ((,class :inherit bold :foreground ,red-alt-other)))
 ;;;;; org-journal
-    `(org-journal-calendar-entry-face ((,class :inherit modus-theme-slant 
:foreground ,yellow-alt-other)))
-    `(org-journal-calendar-scheduled-face ((,class :inherit modus-theme-slant 
:foreground ,red-alt-other)))
+    `(org-journal-calendar-entry-face ((,class :inherit modus-themes-slant 
:foreground ,yellow-alt-other)))
+    `(org-journal-calendar-scheduled-face ((,class :inherit modus-themes-slant 
:foreground ,red-alt-other)))
     `(org-journal-highlight ((,class :foreground ,magenta-alt)))
 ;;;;; org-noter
     `(org-noter-no-notes-exist-face ((,class :inherit bold :foreground 
,red-active)))
@@ -5507,27 +5649,27 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(org-superstar-item ((,class :foreground ,fg-main)))
     `(org-superstar-leading ((,class :foreground ,fg-whitespace)))
 ;;;;; org-table-sticky-header
-    `(org-table-sticky-header-face ((,class :inherit 
modus-theme-intense-neutral)))
+    `(org-table-sticky-header-face ((,class :inherit 
modus-themes-intense-neutral)))
 ;;;;; org-tree-slide
     `(org-tree-slide-header-overlay-face
-      ((,class :inherit (bold modus-theme-variable-pitch) :background ,bg-main
+      ((,class :inherit (bold modus-themes-variable-pitch) :background ,bg-main
                :foreground ,fg-special-cold :overline nil
                ,@(modus-themes--scale modus-themes-scale-5))))
 ;;;;; org-treescope
-    `(org-treescope-faces--markerinternal-midday ((,class :inherit 
modus-theme-intense-blue)))
-    `(org-treescope-faces--markerinternal-range ((,class :inherit 
modus-theme-special-mild)))
+    `(org-treescope-faces--markerinternal-midday ((,class :inherit 
modus-themes-intense-blue)))
+    `(org-treescope-faces--markerinternal-range ((,class :inherit 
modus-themes-special-mild)))
 ;;;;; origami
     `(origami-fold-header-face ((,class :background ,bg-dim :foreground 
,fg-dim :box t)))
     `(origami-fold-replacement-face ((,class :background ,bg-alt :foreground 
,fg-alt)))
 ;;;;; outline-mode
-    `(outline-1 ((,class :inherit modus-theme-heading-1)))
-    `(outline-2 ((,class :inherit modus-theme-heading-2)))
-    `(outline-3 ((,class :inherit modus-theme-heading-3)))
-    `(outline-4 ((,class :inherit modus-theme-heading-4)))
-    `(outline-5 ((,class :inherit modus-theme-heading-5)))
-    `(outline-6 ((,class :inherit modus-theme-heading-6)))
-    `(outline-7 ((,class :inherit modus-theme-heading-7)))
-    `(outline-8 ((,class :inherit modus-theme-heading-8)))
+    `(outline-1 ((,class :inherit modus-themes-heading-1)))
+    `(outline-2 ((,class :inherit modus-themes-heading-2)))
+    `(outline-3 ((,class :inherit modus-themes-heading-3)))
+    `(outline-4 ((,class :inherit modus-themes-heading-4)))
+    `(outline-5 ((,class :inherit modus-themes-heading-5)))
+    `(outline-6 ((,class :inherit modus-themes-heading-6)))
+    `(outline-7 ((,class :inherit modus-themes-heading-7)))
+    `(outline-8 ((,class :inherit modus-themes-heading-8)))
 ;;;;; outline-minor-faces
     `(outline-minor-0 ((,class :background ,bg-alt)))
 ;;;;; package (M-x list-packages)
@@ -5538,7 +5680,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(package-status-available ((,class :foreground ,fg-special-mild)))
     `(package-status-built-in ((,class :foreground ,magenta)))
     `(package-status-dependency ((,class :foreground ,magenta-alt-other)))
-    `(package-status-disabled ((,class :inherit modus-theme-subtle-red)))
+    `(package-status-disabled ((,class :inherit modus-themes-subtle-red)))
     `(package-status-external ((,class :foreground ,cyan-alt-other)))
     `(package-status-held ((,class :foreground ,yellow-alt)))
     `(package-status-incompat ((,class :inherit bold :foreground ,yellow)))
@@ -5547,14 +5689,20 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(package-status-unsigned ((,class :inherit bold :foreground ,red-alt)))
 ;;;;; page-break-lines
     `(page-break-lines ((,class :inherit default :foreground 
,fg-window-divider-outer)))
+;;;;; pandoc-mode
+    `(pandoc-citation-key-face ((,class :background ,bg-dim :foreground 
,magenta-alt)))
+    `(pandoc-directive-@@-face ((,class :background ,bg-dim :foreground 
,blue-alt-other)))
+    `(pandoc-directive-braces-face ((,class :foreground ,blue-alt-other)))
+    `(pandoc-directive-contents-face ((,class :foreground ,cyan-alt-other)))
+    `(pandoc-directive-type-face ((,class :foreground ,magenta)))
 ;;;;; paradox
     `(paradox-archive-face ((,class :foreground ,fg-special-mild)))
     `(paradox-comment-face ((,class :inherit font-lock-comment-face)))
-    `(paradox-commit-tag-face ((,class :inherit modus-theme-refine-magenta 
:box t)))
+    `(paradox-commit-tag-face ((,class :inherit modus-themes-refine-magenta 
:box t)))
     `(paradox-description-face ((,class :foreground ,fg-special-cold)))
     `(paradox-description-face-multiline ((,class :foreground 
,fg-special-cold)))
-    `(paradox-download-face ((,class :inherit modus-theme-bold :foreground 
,blue-alt-other)))
-    `(paradox-highlight-face ((,class :inherit modus-theme-bold :foreground 
,cyan-alt-other)))
+    `(paradox-download-face ((,class :inherit modus-themes-bold :foreground 
,blue-alt-other)))
+    `(paradox-highlight-face ((,class :inherit modus-themes-bold :foreground 
,cyan-alt-other)))
     `(paradox-homepage-button-face ((,class :foreground ,magenta-alt-other 
:underline t)))
     `(paradox-mode-line-face ((,class :inherit bold :foreground ,cyan-active)))
     `(paradox-name-face ((,class :foreground ,blue :underline t)))
@@ -5563,7 +5711,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; paren-face
     `(parenthesis ((,class :foreground ,fg-unfocused)))
 ;;;;; parrot
-    `(parrot-rotate-rotation-highlight-face ((,class :inherit 
modus-theme-refine-magenta)))
+    `(parrot-rotate-rotation-highlight-face ((,class :inherit 
modus-themes-refine-magenta)))
 ;;;;; pass
     `(pass-mode-directory-face ((,class :inherit bold :foreground 
,fg-special-cold)))
     `(pass-mode-entry-face ((,class :background ,bg-main :foreground 
,fg-main)))
@@ -5573,7 +5721,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(pdf-occur-document-face ((,class :inherit shadow)))
     `(pdf-occur-page-face ((,class :inherit shadow)))
 ;;;;; persp-mode
-    `(persp-face-lighter-buffer-not-in-persp ((,class :inherit 
modus-theme-intense-red)))
+    `(persp-face-lighter-buffer-not-in-persp ((,class :inherit 
modus-themes-intense-red)))
     `(persp-face-lighter-default ((,class :inherit bold :foreground 
,blue-active)))
     `(persp-face-lighter-nil-persp ((,class :inherit bold :foreground 
,fg-active)))
 ;;;;; perspective
@@ -5582,30 +5730,30 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(phi-grep-heading-face  ((,class :inherit bold :foreground ,red-alt
                                       ,@(modus-themes--scale 
modus-themes-scale-4))))
     `(phi-grep-line-number-face ((,class :foreground ,fg-special-warm)))
-    `(phi-grep-match-face ((,class :inherit modus-theme-special-calm)))
-    `(phi-grep-modified-face ((,class :inherit modus-theme-refine-yellow)))
-    `(phi-grep-overlay-face ((,class :inherit modus-theme-refine-blue)))
+    `(phi-grep-match-face ((,class :inherit modus-themes-special-calm)))
+    `(phi-grep-modified-face ((,class :inherit modus-themes-refine-yellow)))
+    `(phi-grep-overlay-face ((,class :inherit modus-themes-refine-blue)))
 ;;;;; phi-search
-    `(phi-replace-preview-face ((,class :inherit modus-theme-intense-magenta)))
-    `(phi-search-failpart-face ((,class :inherit modus-theme-refine-red)))
-    `(phi-search-match-face ((,class :inherit modus-theme-refine-cyan)))
-    `(phi-search-selection-face ((,class :inherit (modus-theme-intense-green 
bold))))
+    `(phi-replace-preview-face ((,class :inherit 
modus-themes-intense-magenta)))
+    `(phi-search-failpart-face ((,class :inherit modus-themes-refine-red)))
+    `(phi-search-match-face ((,class :inherit modus-themes-refine-cyan)))
+    `(phi-search-selection-face ((,class :inherit (modus-themes-intense-green 
bold))))
 ;;;;; pkgbuild-mode
-    `(pkgbuild-error-face ((,class :inherit modus-theme-lang-error)))
+    `(pkgbuild-error-face ((,class :inherit modus-themes-lang-error)))
 ;;;;; pomidor
     `(pomidor-break-face ((,class :foreground ,blue-alt-other)))
     `(pomidor-overwork-face ((,class :foreground ,red-alt-other)))
-    `(pomidor-skip-face ((,class :inherit modus-theme-slant :foreground 
,fg-alt)))
+    `(pomidor-skip-face ((,class :inherit modus-themes-slant :foreground 
,fg-alt)))
     `(pomidor-work-face ((,class :foreground ,green-alt-other)))
 ;;;;; popup
     `(popup-face ((,class :background ,bg-alt :foreground ,fg-main)))
-    `(popup-isearch-match ((,class :inherit (modus-theme-refine-cyan bold))))
-    `(popup-menu-mouse-face ((,class :inherit modus-theme-intense-blue)))
-    `(popup-menu-selection-face ((,class :inherit (modus-theme-subtle-cyan 
bold))))
+    `(popup-isearch-match ((,class :inherit (modus-themes-refine-cyan bold))))
+    `(popup-menu-mouse-face ((,class :inherit modus-themes-intense-blue)))
+    `(popup-menu-selection-face ((,class :inherit (modus-themes-subtle-cyan 
bold))))
     `(popup-scroll-bar-background-face ((,class :background ,bg-active)))
     `(popup-scroll-bar-foreground-face ((,class :foreground ,fg-active)))
     `(popup-summary-face ((,class :background ,bg-active :foreground 
,fg-inactive)))
-    `(popup-tip-face ((,class :inherit modus-theme-refine-yellow)))
+    `(popup-tip-face ((,class :inherit modus-themes-refine-yellow)))
 ;;;;; powerline
     `(powerline-active0 ((,class :background ,bg-main :foreground ,blue-faint 
:inverse-video t)))
     `(powerline-active1 ((,class :background ,blue-nuanced-bg :foreground 
,blue-nuanced-fg)))
@@ -5615,16 +5763,16 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(powerline-inactive2 ((,class :background ,bg-inactive :foreground 
,fg-inactive)))
 ;;;;; powerline-evil
     `(powerline-evil-base-face ((,class :background ,fg-main :foreground 
,bg-main)))
-    `(powerline-evil-emacs-face ((,class :inherit modus-theme-active-magenta)))
-    `(powerline-evil-insert-face ((,class :inherit modus-theme-active-green)))
-    `(powerline-evil-motion-face ((,class :inherit modus-theme-active-blue)))
+    `(powerline-evil-emacs-face ((,class :inherit 
modus-themes-active-magenta)))
+    `(powerline-evil-insert-face ((,class :inherit modus-themes-active-green)))
+    `(powerline-evil-motion-face ((,class :inherit modus-themes-active-blue)))
     `(powerline-evil-normal-face ((,class :background ,fg-alt :foreground 
,bg-main)))
-    `(powerline-evil-operator-face ((,class :inherit 
modus-theme-active-yellow)))
-    `(powerline-evil-replace-face ((,class :inherit modus-theme-active-red)))
-    `(powerline-evil-visual-face ((,class :inherit modus-theme-active-cyan)))
+    `(powerline-evil-operator-face ((,class :inherit 
modus-themes-active-yellow)))
+    `(powerline-evil-replace-face ((,class :inherit modus-themes-active-red)))
+    `(powerline-evil-visual-face ((,class :inherit modus-themes-active-cyan)))
 ;;;;; proced
-    `(proced-mark ((,class :inherit modus-theme-mark-symbol)))
-    `(proced-marked ((,class :inherit modus-theme-mark-alt)))
+    `(proced-mark ((,class :inherit modus-themes-mark-symbol)))
+    `(proced-marked ((,class :inherit modus-themes-mark-alt)))
     `(proced-sort-header ((,class :inherit bold :foreground ,fg-special-calm 
:underline t)))
 ;;;;; prodigy
     `(prodigy-green-face ((,class :foreground ,green)))
@@ -5635,19 +5783,19 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(quick-peek-border-face ((,class :background ,fg-window-divider-inner 
:height 1)))
     `(quick-peek-padding-face ((,class :background ,bg-alt :height 0.15)))
 ;;;;; racket-mode
-    `(racket-debug-break-face ((,class :inherit modus-theme-intense-red)))
+    `(racket-debug-break-face ((,class :inherit modus-themes-intense-red)))
     `(racket-debug-locals-face ((,class :box (:line-width -1 :color nil)
                                         :foreground ,green-alt-other)))
     `(racket-debug-result-face ((,class :inherit bold :box (:line-width -1 
:color nil)
                                         :foreground ,green)))
     `(racket-here-string-face ((,class :foreground ,blue-alt)))
     `(racket-keyword-argument-face ((,class :foreground ,red-alt)))
-    `(racket-logger-config-face ((,class :inherit modus-theme-slant 
:foreground ,fg-alt)))
+    `(racket-logger-config-face ((,class :inherit modus-themes-slant 
:foreground ,fg-alt)))
     `(racket-logger-debug-face ((,class :foreground ,blue-alt-other)))
     `(racket-logger-info-face ((,class :foreground ,fg-lang-note)))
-    `(racket-logger-topic-face ((,class :inherit modus-theme-slant :foreground 
,magenta)))
+    `(racket-logger-topic-face ((,class :inherit modus-themes-slant 
:foreground ,magenta)))
     `(racket-selfeval-face ((,class :foreground ,green-alt)))
-    `(racket-xp-error-face ((,class :inherit modus-theme-lang-error)))
+    `(racket-xp-error-face ((,class :inherit modus-themes-lang-error)))
 ;;;;; rainbow-blocks
     `(rainbow-blocks-depth-1-face ((,class :foreground ,magenta-alt-other)))
     `(rainbow-blocks-depth-2-face ((,class :foreground ,blue)))
@@ -5687,8 +5835,8 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(rainbow-delimiters-depth-7-face ((,class :foreground ,red-intense)))
     `(rainbow-delimiters-depth-8-face ((,class :foreground ,blue-intense)))
     `(rainbow-delimiters-depth-9-face ((,class :foreground ,yellow-intense)))
-    `(rainbow-delimiters-mismatched-face ((,class :inherit (bold 
modus-theme-refine-yellow))))
-    `(rainbow-delimiters-unmatched-face ((,class :inherit (bold 
modus-theme-refine-red))))
+    `(rainbow-delimiters-mismatched-face ((,class :inherit (bold 
modus-themes-refine-yellow))))
+    `(rainbow-delimiters-unmatched-face ((,class :inherit (bold 
modus-themes-refine-red))))
 ;;;;; rcirc
     `(rcirc-bright-nick ((,class :inherit bold :foreground ,magenta-alt)))
     `(rcirc-dim-nick ((,class :inherit shadow)))
@@ -5696,7 +5844,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(rcirc-nick-in-message ((,class :foreground ,magenta-alt-other)))
     `(rcirc-nick-in-message-full-line ((,class :inherit bold :foreground 
,fg-special-mild)))
     `(rcirc-other-nick ((,class :inherit bold :foreground ,fg-special-cold)))
-    `(rcirc-prompt ((,class :inherit bold :foreground ,cyan-alt-other)))
+    `(rcirc-prompt ((,class :inherit comint-highlight-prompt)))
     `(rcirc-server ((,class :foreground ,fg-unfocused)))
     `(rcirc-timestamp ((,class :foreground ,blue-nuanced-fg)))
     `(rcirc-url ((,class :foreground ,blue :underline t)))
@@ -5704,10 +5852,10 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(recursion-indicator-general ((,class :foreground ,blue-active)))
     `(recursion-indicator-minibuffer ((,class :foreground ,red-active)))
 ;;;;; regexp-builder (re-builder)
-    `(reb-match-0 ((,class :inherit modus-theme-refine-cyan)))
-    `(reb-match-1 ((,class :inherit modus-theme-subtle-magenta)))
-    `(reb-match-2 ((,class :inherit modus-theme-subtle-green)))
-    `(reb-match-3 ((,class :inherit modus-theme-refine-yellow)))
+    `(reb-match-0 ((,class :inherit modus-themes-refine-cyan)))
+    `(reb-match-1 ((,class :inherit modus-themes-subtle-magenta)))
+    `(reb-match-2 ((,class :inherit modus-themes-subtle-green)))
+    `(reb-match-3 ((,class :inherit modus-themes-refine-yellow)))
     `(reb-regexp-grouping-backslash ((,class :inherit 
font-lock-regexp-grouping-backslash)))
     `(reb-regexp-grouping-construct ((,class :inherit 
font-lock-regexp-grouping-construct)))
 ;;;;; rg (rg.el)
@@ -5718,7 +5866,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(rg-filename-face ((,class :inherit bold :foreground ,fg-special-cold)))
     `(rg-line-number-face ((,class :foreground ,fg-special-warm)))
     `(rg-literal-face ((,class :foreground ,blue-alt)))
-    `(rg-match-face ((,class :inherit modus-theme-special-calm)))
+    `(rg-match-face ((,class :inherit modus-themes-special-calm)))
     `(rg-regexp-face ((,class :foreground ,magenta-active)))
     `(rg-toggle-off-face ((,class :inherit bold :foreground ,fg-inactive)))
     `(rg-toggle-on-face ((,class :inherit bold :foreground ,cyan-active)))
@@ -5727,7 +5875,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(ripgrep-context-face ((,class :foreground ,fg-unfocused)))
     `(ripgrep-error-face ((,class :inherit bold :foreground ,red)))
     `(ripgrep-hit-face ((,class :foreground ,cyan)))
-    `(ripgrep-match-face ((,class :inherit modus-theme-special-calm)))
+    `(ripgrep-match-face ((,class :inherit modus-themes-special-calm)))
 ;;;;; rmail
     `(rmail-header-name ((,class :foreground ,cyan-alt-other)))
     `(rmail-highlight ((,class :inherit bold :foreground ,magenta-alt)))
@@ -5753,29 +5901,30 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(sallet-buffer-size ((,class :foreground ,fg-special-calm)))
     `(sallet-buffer-special ((,class :foreground ,magenta-alt-other)))
     `(sallet-flx-match ((,class ,@(modus-themes--extra-completions
-                                   'modus-theme-subtle-cyan
-                                   'modus-theme-refine-cyan
-                                   'modus-theme-nuanced-cyan
+                                   'modus-themes-subtle-cyan
+                                   'modus-themes-refine-cyan
+                                   'modus-themes-nuanced-cyan
                                    cyan-alt-other))))
     `(sallet-recentf-buffer-name ((,class :foreground ,blue-nuanced-fg)))
     `(sallet-recentf-file-path ((,class :foreground ,fg-special-mild)))
     `(sallet-regexp-match ((,class ,@(modus-themes--extra-completions
-                                      'modus-theme-subtle-magenta
-                                      'modus-theme-refine-magenta
-                                      'modus-theme-nuanced-magenta
+                                      'modus-themes-subtle-magenta
+                                      'modus-themes-refine-magenta
+                                      'modus-themes-nuanced-magenta
                                       magenta-alt-other))))
     `(sallet-source-header ((,class :inherit bold :foreground ,red-alt
                                     ,@(modus-themes--scale 
modus-themes-scale-4))))
     `(sallet-substring-match ((,class ,@(modus-themes--extra-completions
-                                         'modus-theme-subtle-blue
-                                         'modus-theme-refine-blue
-                                         'modus-theme-nuanced-blue
+                                         'modus-themes-subtle-blue
+                                         'modus-themes-refine-blue
+                                         'modus-themes-nuanced-blue
                                          blue-alt-other))))
 ;;;;; selectrum
-;; NOTE 2021-02-22: The `selectrum-primary-highlight' and
-;; `selectrum-secondary-highlight' are deprecated upstream in favour of
-;; their selectrum-prescient counterparts.  We shall remove those faces
-;; from the themes once we are certain that they are no longer relevant.
+    ;; NOTE 2021-02-22: The `selectrum-primary-highlight' and
+    ;; `selectrum-secondary-highlight' are deprecated upstream in favour
+    ;; of their selectrum-prescient counterparts.  We shall remove those
+    ;; faces from the themes once we are certain that they are no longer
+    ;; relevant.
     `(selectrum-current-candidate
       ((,class :inherit bold :foreground ,fg-main
                :background ,@(pcase modus-themes-completions
@@ -5791,6 +5940,10 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                ,@(modus-themes--standard-completions
                   cyan-alt-other cyan-nuanced-bg
                   cyan-refine-bg cyan-refine-fg))))
+    `(selectrum-quick-keys-highlight
+      ((,class :inherit modus-themes-refine-red)))
+    `(selectrum-quick-keys-match
+      ((,class :inherit (bold modus-themes-intense-green))))
 ;;;;; selectrum-prescient
     `(selectrum-prescient-primary-highlight
       ((,class :inherit bold
@@ -5804,40 +5957,37 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                   cyan-refine-bg cyan-refine-fg))))
 ;;;;; semantic
     `(semantic-complete-inline-face ((,class :foreground ,fg-special-warm 
:underline t)))
-    `(semantic-decoration-on-fileless-includes ((,class :inherit 
modus-theme-refine-green)))
-    `(semantic-decoration-on-private-members-face ((,class :inherit 
modus-theme-refine-cyan)))
+    `(semantic-decoration-on-fileless-includes ((,class :inherit 
modus-themes-refine-green)))
+    `(semantic-decoration-on-private-members-face ((,class :inherit 
modus-themes-refine-cyan)))
     `(semantic-decoration-on-protected-members-face ((,class :background 
,bg-dim)))
-    `(semantic-decoration-on-unknown-includes ((,class :inherit 
modus-theme-refine-red)))
-    `(semantic-decoration-on-unparsed-includes ((,class :inherit 
modus-theme-refine-yellow)))
+    `(semantic-decoration-on-unknown-includes ((,class :inherit 
modus-themes-refine-red)))
+    `(semantic-decoration-on-unparsed-includes ((,class :inherit 
modus-themes-refine-yellow)))
     `(semantic-highlight-edits-face ((,class :background ,bg-alt)))
     `(semantic-highlight-func-current-tag-face ((,class :background ,bg-alt)))
-    `(semantic-idle-symbol-highlight ((,class :inherit 
modus-theme-special-mild)))
+    `(semantic-idle-symbol-highlight ((,class :inherit 
modus-themes-special-mild)))
     `(semantic-tag-boundary-face ((,class :overline ,blue-intense)))
     `(semantic-unmatched-syntax-face ((,class :underline ,fg-lang-error)))
 ;;;;; sesman
     `(sesman-browser-button-face ((,class :foreground ,blue-alt-other 
:underline t)))
-    `(sesman-browser-highligh-face ((,class :inherit modus-theme-subtle-blue)))
+    `(sesman-browser-highligh-face ((,class :inherit 
modus-themes-subtle-blue)))
     `(sesman-buffer-face ((,class :foreground ,magenta)))
     `(sesman-directory-face ((,class :inherit bold :foreground ,blue)))
     `(sesman-project-face ((,class :inherit bold :foreground 
,magenta-alt-other)))
 ;;;;; shell-script-mode
     `(sh-heredoc ((,class :foreground ,blue-alt)))
-    `(sh-quoted-exec ((,class :inherit modus-theme-bold :foreground 
,magenta-alt)))
+    `(sh-quoted-exec ((,class :inherit modus-themes-bold :foreground 
,magenta-alt)))
 ;;;;; shortdoc
-    `(shortdoc-heading ((,class :inherit modus-theme-pseudo-header)))
+    `(shortdoc-heading ((,class :inherit modus-themes-pseudo-header)))
     `(shortdoc-section (())) ; remove the default's variable-pitch style
 ;;;;; show-paren-mode
     `(show-paren-match ((,class ,@(modus-themes--paren bg-paren-match
                                                        bg-paren-match-intense)
                                 :foreground ,fg-main)))
-    `(show-paren-match-expression ((,class :inherit modus-theme-special-calm)))
-    `(show-paren-mismatch ((,class :inherit modus-theme-intense-red)))
+    `(show-paren-match-expression ((,class :inherit 
modus-themes-special-calm)))
+    `(show-paren-mismatch ((,class :inherit modus-themes-intense-red)))
 ;;;;; shr
-    `(shr-abbreviation
-      ((,(append '((supports :underline (:style wave))) class)
-        :foreground ,fg-docstring :underline (:color ,fg-alt :style wave))
-       (,class :foreground ,fg-docstring :underline t)))
-    `(shr-selected-link ((,class :inherit modus-theme-subtle-cyan)))
+    `(shr-abbreviation ((,class :inherit modus-themes-lang-note)))
+    `(shr-selected-link ((,class :inherit modus-themes-subtle-red)))
 ;;;;; side-notes
     `(side-notes ((,class :background ,bg-dim :foreground ,fg-dim)))
 ;;;;; sieve-mode
@@ -5862,94 +6012,94 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(sml/name-filling ((,class :foreground ,yellow-active)))
     `(sml/not-modified ((,class :inherit sml/global)))
     `(sml/numbers-separator ((,class :inherit sml/global)))
-    `(sml/outside-modified ((,class :inherit modus-theme-intense-red)))
+    `(sml/outside-modified ((,class :inherit modus-themes-intense-red)))
     `(sml/position-percentage ((,class :inherit sml/global)))
     `(sml/prefix ((,class :foreground ,green-active)))
     `(sml/process ((,class :inherit sml/prefix)))
     `(sml/projectile ((,class :inherit sml/git)))
     `(sml/read-only ((,class :inherit bold :foreground ,cyan-active)))
     `(sml/remote ((,class :inherit sml/global)))
-    `(sml/sudo ((,class :inherit modus-theme-subtle-red)))
+    `(sml/sudo ((,class :inherit modus-themes-subtle-red)))
     `(sml/time ((,class :inherit sml/global)))
     `(sml/vc ((,class :inherit sml/git)))
     `(sml/vc-edited ((,class :inherit bold :foreground ,yellow-active)))
 ;;;;; smartparens
-    `(sp-pair-overlay-face ((,class :inherit modus-theme-special-warm)))
-    `(sp-show-pair-enclosing ((,class :inherit modus-theme-special-mild)))
+    `(sp-pair-overlay-face ((,class :inherit modus-themes-special-warm)))
+    `(sp-show-pair-enclosing ((,class :inherit modus-themes-special-mild)))
     `(sp-show-pair-match-face ((,class ,@(modus-themes--paren bg-paren-match
                                                               
bg-paren-match-intense)
                                        :foreground ,fg-main)))
-    `(sp-show-pair-mismatch-face ((,class :inherit modus-theme-intense-red)))
+    `(sp-show-pair-mismatch-face ((,class :inherit modus-themes-intense-red)))
     `(sp-wrap-overlay-closing-pair ((,class :inherit sp-pair-overlay-face)))
     `(sp-wrap-overlay-face ((,class :inherit sp-pair-overlay-face)))
     `(sp-wrap-overlay-opening-pair ((,class :inherit sp-pair-overlay-face)))
     `(sp-wrap-tag-overlay-face ((,class :inherit sp-pair-overlay-face)))
 ;;;;; smerge
-    `(smerge-base ((,class :inherit modus-theme-diff-changed)))
-    `(smerge-lower ((,class :inherit modus-theme-diff-added)))
-    `(smerge-markers ((,class :background ,bg-diff-neutral-2 :foreground 
,fg-diff-neutral-2)))
-    `(smerge-refined-added ((,class :inherit modus-theme-diff-refine-added)))
+    `(smerge-base ((,class :inherit modus-themes-diff-changed)))
+    `(smerge-lower ((,class :inherit modus-themes-diff-added)))
+    `(smerge-markers ((,class :inherit modus-themes-diff-heading)))
+    `(smerge-refined-added ((,class :inherit modus-themes-diff-refine-added)))
     `(smerge-refined-changed (()))
-    `(smerge-refined-removed ((,class :inherit 
modus-theme-diff-refine-removed)))
-    `(smerge-upper ((,class :inherit modus-theme-diff-removed)))
+    `(smerge-refined-removed ((,class :inherit 
modus-themes-diff-refine-removed)))
+    `(smerge-upper ((,class :inherit modus-themes-diff-removed)))
 ;;;;; solaire
     `(solaire-default-face ((,class :inherit default :background ,bg-alt 
:foreground ,fg-dim)))
     `(solaire-line-number-face ((,class :inherit solaire-default-face 
:foreground ,fg-unfocused)))
     `(solaire-hl-line-face ((,class :background ,bg-active)))
     `(solaire-org-hide-face ((,class :background ,bg-alt :foreground ,bg-alt)))
 ;;;;; spaceline
-    `(spaceline-evil-emacs ((,class :inherit modus-theme-active-magenta)))
-    `(spaceline-evil-insert ((,class :inherit modus-theme-active-green)))
-    `(spaceline-evil-motion ((,class :inherit modus-theme-active-blue)))
+    `(spaceline-evil-emacs ((,class :inherit modus-themes-active-magenta)))
+    `(spaceline-evil-insert ((,class :inherit modus-themes-active-green)))
+    `(spaceline-evil-motion ((,class :inherit modus-themes-active-blue)))
     `(spaceline-evil-normal ((,class :background ,fg-alt :foreground ,bg-alt)))
-    `(spaceline-evil-replace ((,class :inherit modus-theme-active-red)))
-    `(spaceline-evil-visual ((,class :inherit modus-theme-active-cyan)))
+    `(spaceline-evil-replace ((,class :inherit modus-themes-active-red)))
+    `(spaceline-evil-visual ((,class :inherit modus-themes-active-cyan)))
     `(spaceline-flycheck-error ((,class :foreground ,red-active)))
     `(spaceline-flycheck-info ((,class :foreground ,cyan-active)))
     `(spaceline-flycheck-warning ((,class :foreground ,yellow-active)))
-    `(spaceline-highlight-face ((,class :inherit modus-theme-fringe-blue)))
-    `(spaceline-modified ((,class :inherit modus-theme-fringe-magenta)))
+    `(spaceline-highlight-face ((,class :inherit modus-themes-fringe-blue)))
+    `(spaceline-modified ((,class :inherit modus-themes-fringe-magenta)))
     `(spaceline-python-venv ((,class :foreground ,magenta-active)))
-    `(spaceline-read-only ((,class :inherit modus-theme-fringe-red)))
-    `(spaceline-unmodified ((,class :inherit modus-theme-fringe-cyan)))
+    `(spaceline-read-only ((,class :inherit modus-themes-fringe-red)))
+    `(spaceline-unmodified ((,class :inherit modus-themes-fringe-cyan)))
 ;;;;; speedbar
     `(speedbar-button-face ((,class :inherit button)))
     `(speedbar-directory-face ((,class :inherit bold :foreground ,blue)))
     `(speedbar-file-face ((,class :foreground ,fg-main)))
-    `(speedbar-highlight-face ((,class :inherit modus-theme-subtle-blue)))
+    `(speedbar-highlight-face ((,class :inherit modus-themes-subtle-blue)))
     `(speedbar-selected-face ((,class :inherit bold :foreground ,cyan)))
-    `(speedbar-separator-face ((,class :inherit modus-theme-intense-neutral)))
+    `(speedbar-separator-face ((,class :inherit modus-themes-intense-neutral)))
     `(speedbar-tag-face ((,class :foreground ,yellow-alt-other)))
 ;;;;; spell-fu
-    `(spell-fu-incorrect-face ((,class :inherit modus-theme-lang-error)))
+    `(spell-fu-incorrect-face ((,class :inherit modus-themes-lang-error)))
 ;;;;; spray
     `(spray-accent-face ((,class :foreground ,red-intense)))
     `(spray-base-face ((,class :inherit default :foreground ,fg-special-cold)))
 ;;;;; stripes
-    `(stripes ((,class :inherit modus-theme-hl-line)))
+    `(stripes ((,class :inherit modus-themes-hl-line)))
 ;;;;; success
     `(suggest-heading ((,class :inherit bold :foreground ,yellow-alt-other)))
 ;;;;; switch-window
     `(switch-window-background ((,class :background ,bg-dim)))
     `(switch-window-label ((,class :height 3.0 :foreground ,blue-intense)))
 ;;;;; swiper
-    `(swiper-background-match-face-1 ((,class :inherit 
modus-theme-subtle-neutral)))
-    `(swiper-background-match-face-2 ((,class :inherit 
modus-theme-refine-cyan)))
-    `(swiper-background-match-face-3 ((,class :inherit 
modus-theme-refine-magenta)))
-    `(swiper-background-match-face-4 ((,class :inherit 
modus-theme-refine-yellow)))
-    `(swiper-line-face ((,class :inherit modus-theme-special-cold)))
-    `(swiper-match-face-1 ((,class :inherit (bold 
modus-theme-intense-neutral))))
-    `(swiper-match-face-2 ((,class :inherit (bold modus-theme-intense-green))))
-    `(swiper-match-face-3 ((,class :inherit (bold modus-theme-intense-blue))))
-    `(swiper-match-face-4 ((,class :inherit (bold modus-theme-intense-red))))
+    `(swiper-background-match-face-1 ((,class :inherit 
modus-themes-subtle-neutral)))
+    `(swiper-background-match-face-2 ((,class :inherit 
modus-themes-refine-cyan)))
+    `(swiper-background-match-face-3 ((,class :inherit 
modus-themes-refine-magenta)))
+    `(swiper-background-match-face-4 ((,class :inherit 
modus-themes-refine-yellow)))
+    `(swiper-line-face ((,class :inherit modus-themes-special-cold)))
+    `(swiper-match-face-1 ((,class :inherit (bold 
modus-themes-intense-neutral))))
+    `(swiper-match-face-2 ((,class :inherit (bold 
modus-themes-intense-green))))
+    `(swiper-match-face-3 ((,class :inherit (bold modus-themes-intense-blue))))
+    `(swiper-match-face-4 ((,class :inherit (bold modus-themes-intense-red))))
 ;;;;; swoop
     `(swoop-face-header-format-line ((,class :inherit bold :foreground ,red-alt
                                              ,@(modus-themes--scale 
modus-themes-scale-3))))
     `(swoop-face-line-buffer-name ((,class :inherit bold :foreground ,blue-alt
                                            ,@(modus-themes--scale 
modus-themes-scale-4))))
     `(swoop-face-line-number ((,class :foreground ,fg-special-warm)))
-    `(swoop-face-target-line ((,class :inherit modus-theme-intense-blue 
:extend t)))
-    `(swoop-face-target-words ((,class :inherit modus-theme-refine-cyan)))
+    `(swoop-face-target-line ((,class :inherit modus-themes-intense-blue 
:extend t)))
+    `(swoop-face-target-words ((,class :inherit modus-themes-refine-cyan)))
 ;;;;; sx
     `(sx-inbox-item-type ((,class :foreground ,magenta-alt-other)))
     `(sx-inbox-item-type-unread ((,class :inherit (sx-inbox-item-type bold))))
@@ -5964,7 +6114,7 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(sx-question-list-score-upvoted ((,class :inherit (sx-question-list-score 
bold))))
     `(sx-question-list-unread-question ((,class :inherit bold :foreground 
,fg-main)))
     `(sx-question-mode-accepted ((,class :inherit bold :height 1.3 :foreground 
,green)))
-    `(sx-question-mode-closed ((,class :inherit modus-theme-active-yellow :box 
(:line-width 2 :color nil))))
+    `(sx-question-mode-closed ((,class :inherit modus-themes-active-yellow 
:box (:line-width 2 :color nil))))
     `(sx-question-mode-closed-reason ((,class :box (:line-width 2 :color nil) 
:foreground ,fg-main)))
     `(sx-question-mode-content-face ((,class :background ,bg-dim)))
     `(sx-question-mode-date ((,class :foreground ,blue)))
@@ -5979,15 +6129,15 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(sx-user-name ((,class :foreground ,blue-alt)))
     `(sx-user-reputation ((,class :inherit shadow)))
 ;;;;; symbol-overlay
-    `(symbol-overlay-default-face ((,class :inherit modus-theme-special-warm)))
-    `(symbol-overlay-face-1 ((,class :inherit modus-theme-intense-blue)))
-    `(symbol-overlay-face-2 ((,class :inherit modus-theme-refine-magenta)))
-    `(symbol-overlay-face-3 ((,class :inherit modus-theme-intense-yellow)))
-    `(symbol-overlay-face-4 ((,class :inherit modus-theme-intense-magenta)))
-    `(symbol-overlay-face-5 ((,class :inherit modus-theme-intense-red)))
-    `(symbol-overlay-face-6 ((,class :inherit modus-theme-refine-red)))
-    `(symbol-overlay-face-7 ((,class :inherit modus-theme-intense-cyan)))
-    `(symbol-overlay-face-8 ((,class :inherit modus-theme-refine-cyan)))
+    `(symbol-overlay-default-face ((,class :inherit 
modus-themes-special-warm)))
+    `(symbol-overlay-face-1 ((,class :inherit modus-themes-intense-blue)))
+    `(symbol-overlay-face-2 ((,class :inherit modus-themes-refine-magenta)))
+    `(symbol-overlay-face-3 ((,class :inherit modus-themes-intense-yellow)))
+    `(symbol-overlay-face-4 ((,class :inherit modus-themes-intense-magenta)))
+    `(symbol-overlay-face-5 ((,class :inherit modus-themes-intense-red)))
+    `(symbol-overlay-face-6 ((,class :inherit modus-themes-refine-red)))
+    `(symbol-overlay-face-7 ((,class :inherit modus-themes-intense-cyan)))
+    `(symbol-overlay-face-8 ((,class :inherit modus-themes-refine-cyan)))
 ;;;;; syslog-mode
     `(syslog-debug ((,class :inherit bold :foreground ,cyan-alt-other)))
     `(syslog-error ((,class :inherit bold :foreground ,red)))
@@ -5998,6 +6148,23 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(syslog-ip ((,class :inherit bold :foreground ,fg-special-mild :underline 
t)))
     `(syslog-su ((,class :inherit bold :foreground ,red-alt)))
     `(syslog-warn ((,class :inherit bold :foreground ,yellow)))
+;;;;; tab-bar-groups
+    `(tab-bar-groups-1 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,blue-tab)))
+    `(tab-bar-groups-1-group-name ((,class :inherit tab-bar-groups-1 
:inverse-video t)))
+    `(tab-bar-groups-2 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,red-tab)))
+    `(tab-bar-groups-2-group-name ((,class :inherit tab-bar-groups-2 
:inverse-video t)))
+    `(tab-bar-groups-3 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,green-tab)))
+    `(tab-bar-groups-3-group-name ((,class :inherit tab-bar-groups-3 
:inverse-video t)))
+    `(tab-bar-groups-4 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,orange-tab)))
+    `(tab-bar-groups-4-group-name ((,class :inherit tab-bar-groups-4 
:inverse-video t)))
+    `(tab-bar-groups-5 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,purple-tab)))
+    `(tab-bar-groups-5-group-name ((,class :inherit tab-bar-groups-5 
:inverse-video t)))
+    `(tab-bar-groups-6 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,cyan-tab)))
+    `(tab-bar-groups-6-group-name ((,class :inherit tab-bar-groups-6 
:inverse-video t)))
+    `(tab-bar-groups-7 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,yellow-tab)))
+    `(tab-bar-groups-7-group-name ((,class :inherit tab-bar-groups-7 
:inverse-video t)))
+    `(tab-bar-groups-8 ((,class ,@(modus-themes--variable-pitch-ui) 
:foreground ,magenta-tab)))
+    `(tab-bar-groups-8-group-name ((,class :inherit tab-bar-groups-8 
:inverse-video t)))
 ;;;;; tab-bar-mode
     `(tab-bar ((,class ,@(modus-themes--variable-pitch-ui)
                        :background ,bg-tab-bar :foreground ,fg-main)))
@@ -6019,6 +6186,30 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
                                                :background 
,bg-tab-inactive-alt :foreground ,fg-main)))
 ;;;;; table (built-in table.el)
     `(table-cell ((,class :background ,blue-nuanced-bg)))
+;;;;; telega
+    ;; FIXME 2021-03-28: Some aspects of `telega' are not fully
+    ;; supported or have not been tested thoroughly.  Please understand
+    ;; that I do not use that service because it requires a smartphone
+    ;; and I have none.  Help with testing is appreciated.
+    `(telega-button ((,class :box t :foreground ,blue)))
+    `(telega-button-active ((,class :box ,blue-intense-bg :background 
,blue-intense-bg :foreground ,fg-main)))
+    `(telega-button-highlight ((,class :inherit modus-themes-subtle-magenta)))
+    `(telega-chat-prompt ((,class :inherit bold)))
+    `(telega-entity-type-code ((,class :inherit fixed-pitch)))
+    `(telega-entity-type-mention ((,class :foreground ,cyan)))
+    `(telega-entity-type-pre ((,class :inherit fixed-pitch)))
+    `(telega-msg-heading ((,class :background ,bg-alt)))
+    `(telega-msg-self-title ((,class :inherit bold)))
+    `(telega-root-heading ((,class :inherit modus-themes-subtle-neutral)))
+    `(telega-secret-title ((,class :foreground ,magenta-alt)))
+    `(telega-unmuted-count ((,class :foreground ,blue-alt-other)))
+    `(telega-user-online-status ((,class :foreground ,cyan-active)))
+    `(telega-username ((,class :foreground ,cyan-alt-other)))
+    `(telega-webpage-chat-link ((,class :background ,bg-alt)))
+    `(telega-webpage-fixed ((,class :inherit fixed-pitch :height 0.85)))
+    `(telega-webpage-header ((,class :inherit modus-themes-variable-pitch 
:height 1.3)))
+    `(telega-webpage-preformatted ((,class :inherit fixed-pitch :background 
,bg-alt)))
+    `(telega-webpage-subheader ((,class :inherit modus-themes-variable-pitch 
:height 1.15)))
 ;;;;; telephone-line
     `(telephone-line-accent-active ((,class :background ,fg-inactive 
:foreground ,bg-inactive)))
     `(telephone-line-accent-inactive ((,class :background ,bg-active 
:foreground ,fg-active)))
@@ -6058,16 +6249,16 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(tomatinho-pause-face ((,class :foreground ,yellow-intense)))
     `(tomatinho-reset-face ((,class :inherit shadow)))
 ;;;;; transient
-    `(transient-active-infix ((,class :inherit modus-theme-special-mild)))
+    `(transient-active-infix ((,class :inherit modus-themes-special-mild)))
     `(transient-amaranth ((,class :inherit bold :foreground ,yellow)))
     `(transient-argument ((,class :inherit bold :foreground ,red-alt)))
     `(transient-blue ((,class :inherit bold :foreground ,blue)))
-    `(transient-disabled-suffix ((,class :inherit modus-theme-intense-red)))
-    `(transient-enabled-suffix ((,class :inherit modus-theme-intense-green)))
+    `(transient-disabled-suffix ((,class :inherit modus-themes-intense-red)))
+    `(transient-enabled-suffix ((,class :inherit modus-themes-intense-green)))
     `(transient-heading ((,class :inherit bold :foreground ,fg-main)))
     `(transient-inactive-argument ((,class :inherit shadow)))
     `(transient-inactive-value ((,class :inherit shadow)))
-    `(transient-key ((,class :inherit bold :foreground ,blue)))
+    `(transient-key ((,class :inherit modus-themes-key-binding)))
     `(transient-mismatched-key ((,class :underline t)))
     `(transient-nonstandard-key ((,class :underline t)))
     `(transient-pink ((,class :inherit bold :foreground ,magenta)))
@@ -6077,11 +6268,11 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(transient-unreachable-key ((,class :foreground ,fg-unfocused)))
     `(transient-value ((,class :inherit bold :foreground ,magenta-alt-other)))
 ;;;;; trashed
-    `(trashed-deleted ((,class :inherit modus-theme-mark-del)))
+    `(trashed-deleted ((,class :inherit modus-themes-mark-del)))
     `(trashed-directory ((,class :foreground ,blue)))
-    `(trashed-mark ((,class :inherit modus-theme-mark-symbol)))
-    `(trashed-marked ((,class :inherit modus-theme-mark-alt)))
-    `(trashed-restored ((,class :inherit modus-theme-mark-sel)))
+    `(trashed-mark ((,class :inherit modus-themes-mark-symbol)))
+    `(trashed-marked ((,class :inherit modus-themes-mark-alt)))
+    `(trashed-restored ((,class :inherit modus-themes-mark-sel)))
     `(trashed-symlink ((,class :inherit button
                                ,@(modus-themes--link-color
                                   cyan-alt cyan-alt-faint))))
@@ -6091,16 +6282,16 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(treemacs-file-face ((,class :foreground ,fg-main)))
     `(treemacs-fringe-indicator-face ((,class :foreground ,fg-main)))
     `(treemacs-git-added-face ((,class :foreground ,green-intense)))
-    `(treemacs-git-conflict-face ((,class :inherit (modus-theme-intense-red 
bold))))
+    `(treemacs-git-conflict-face ((,class :inherit (modus-themes-intense-red 
bold))))
     `(treemacs-git-ignored-face ((,class :inherit shadow)))
     `(treemacs-git-modified-face ((,class :foreground ,yellow-alt-other)))
     `(treemacs-git-renamed-face ((,class :foreground ,cyan-alt-other)))
     `(treemacs-git-unmodified-face ((,class :foreground ,fg-main)))
     `(treemacs-git-untracked-face ((,class :foreground ,red-alt-other)))
-    `(treemacs-help-column-face ((,class :inherit modus-theme-bold :foreground 
,magenta-alt-other :underline t)))
+    `(treemacs-help-column-face ((,class :inherit modus-themes-bold 
:foreground ,magenta-alt-other :underline t)))
     `(treemacs-help-title-face ((,class :foreground ,blue-alt-other)))
-    `(treemacs-on-failure-pulse-face ((,class :inherit 
modus-theme-intense-red)))
-    `(treemacs-on-success-pulse-face ((,class :inherit 
modus-theme-intense-green)))
+    `(treemacs-on-failure-pulse-face ((,class :inherit 
modus-themes-intense-red)))
+    `(treemacs-on-success-pulse-face ((,class :inherit 
modus-themes-intense-green)))
     `(treemacs-root-face ((,class :inherit bold :foreground ,blue-alt-other 
:height 1.2 :underline t)))
     `(treemacs-root-remote-disconnected-face ((,class :inherit 
treemacs-root-remote-face :foreground ,yellow)))
     `(treemacs-root-remote-face ((,class :inherit treemacs-root-face 
:foreground ,magenta)))
@@ -6111,17 +6302,17 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;;; tty-menu
     `(tty-menu-disabled-face ((,class :background ,bg-alt :foreground 
,fg-alt)))
     `(tty-menu-enabled-face ((,class :inherit bold :background ,bg-alt 
:foreground ,fg-main)))
-    `(tty-menu-selected-face ((,class :inherit modus-theme-intense-blue)))
+    `(tty-menu-selected-face ((,class :inherit modus-themes-intense-blue)))
 ;;;;; tuareg
-    `(caml-types-def-face ((,class :inherit modus-theme-subtle-red)))
-    `(caml-types-expr-face ((,class :inherit modus-theme-subtle-green)))
-    `(caml-types-occ-face ((,class :inherit modus-theme-subtle-green)))
-    `(caml-types-scope-face ((,class :inherit modus-theme-subtle-blue)))
-    `(caml-types-typed-face ((,class :inherit modus-theme-subtle-magenta)))
+    `(caml-types-def-face ((,class :inherit modus-themes-subtle-red)))
+    `(caml-types-expr-face ((,class :inherit modus-themes-subtle-green)))
+    `(caml-types-occ-face ((,class :inherit modus-themes-subtle-green)))
+    `(caml-types-scope-face ((,class :inherit modus-themes-subtle-blue)))
+    `(caml-types-typed-face ((,class :inherit modus-themes-subtle-magenta)))
     `(tuareg-font-double-semicolon-face ((,class :inherit 
font-lock-preprocessor-face)))
     `(tuareg-font-lock-attribute-face ((,class :inherit 
font-lock-function-name-face)))
     `(tuareg-font-lock-constructor-face ((,class :foreground ,fg-main)))
-    `(tuareg-font-lock-error-face ((,class :inherit (modus-theme-intense-red 
bold))))
+    `(tuareg-font-lock-error-face ((,class :inherit (modus-themes-intense-red 
bold))))
     `(tuareg-font-lock-extension-node-face ((,class :background ,bg-alt 
:foreground ,magenta)))
     `(tuareg-font-lock-governing-face ((,class :inherit bold :foreground 
,fg-main)))
     `(tuareg-font-lock-infix-extension-node-face ((,class :inherit 
font-lock-function-name-face)))
@@ -6136,9 +6327,9 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(tuareg-opam-error-face ((,class :inherit error)))
     `(tuareg-opam-pkg-variable-name-face ((,class :inherit 
font-lock-variable-name-face)))
 ;;;;; typescript
-    `(typescript-jsdoc-tag ((,class :inherit modus-theme-slant :foreground 
,fg-special-mild)))
-    `(typescript-jsdoc-type ((,class :inherit modus-theme-slant :foreground 
,fg-special-calm)))
-    `(typescript-jsdoc-value ((,class :inherit modus-theme-slant :foreground 
,fg-special-cold)))
+    `(typescript-jsdoc-tag ((,class :inherit (font-lock-builtin-face 
font-lock-comment-face) :weight normal)))
+    `(typescript-jsdoc-type ((,class :inherit (font-lock-type-face 
font-lock-comment-face) :weight normal)))
+    `(typescript-jsdoc-value ((,class :inherit (font-lock-constant-face 
font-lock-comment-face) :weight normal)))
 ;;;;; undo-tree
     `(undo-tree-visualizer-active-branch-face ((,class :inherit bold 
:foreground ,fg-main)))
     `(undo-tree-visualizer-current-face ((,class :foreground ,blue-intense)))
@@ -6155,26 +6346,31 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(vc-dir-status-ignored ((,class :foreground ,fg-unfocused)))
     `(vc-dir-status-up-to-date ((,class :foreground ,cyan)))
     `(vc-dir-status-warning ((,class :foreground ,red)))
-    `(vc-conflict-state ((,class :inherit modus-theme-slant :foreground 
,red-active)))
+    `(vc-conflict-state ((,class :inherit modus-themes-slant :foreground 
,red-active)))
     `(vc-edited-state ((,class :foreground ,yellow-active)))
     `(vc-locally-added-state ((,class :foreground ,cyan-active)))
     `(vc-locked-state ((,class :foreground ,blue-active)))
-    `(vc-missing-state ((,class :inherit modus-theme-slant :foreground 
,magenta-active)))
-    `(vc-needs-update-state ((,class :inherit modus-theme-slant :foreground 
,green-active)))
+    `(vc-missing-state ((,class :inherit modus-themes-slant :foreground 
,magenta-active)))
+    `(vc-needs-update-state ((,class :inherit modus-themes-slant :foreground 
,green-active)))
     `(vc-removed-state ((,class :foreground ,red-active)))
     `(vc-state-base ((,class :foreground ,fg-active)))
     `(vc-up-to-date-state ((,class :foreground ,fg-special-cold)))
 ;;;;; vdiff
-    `(vdiff-addition-face ((,class :inherit modus-theme-diff-added)))
-    `(vdiff-change-face ((,class :inherit modus-theme-diff-changed)))
-    `(vdiff-closed-fold-face ((,class :background ,bg-diff-neutral-1 
:foreground ,fg-diff-neutral-1)))
-    `(vdiff-refine-added ((,class :inherit modus-theme-diff-refine-added)))
-    `(vdiff-refine-changed ((,class :inherit modus-theme-diff-refine-changed)))
-    `(vdiff-subtraction-face ((,class :inherit modus-theme-diff-removed)))
-    `(vdiff-target-face ((,class :inherit modus-theme-intense-blue)))
+    `(vdiff-addition-face ((,class :inherit modus-themes-diff-added)))
+    `(vdiff-change-face ((,class :inherit modus-themes-diff-changed)))
+    `(vdiff-closed-fold-face ((,class :inherit modus-themes-diff-heading)))
+    `(vdiff-refine-added ((,class :inherit modus-themes-diff-refine-added)))
+    `(vdiff-refine-changed ((,class :inherit 
modus-themes-diff-refine-changed)))
+    `(vdiff-subtraction-face ((,class :inherit modus-themes-diff-removed)))
+    `(vdiff-target-face ((,class :inherit modus-themes-intense-blue)))
+;;;;; vertico
+    `(vertico-current ((,class :inherit bold :foreground ,fg-main
+                               :background ,@(pcase modus-themes-completions
+                                               ('opinionated (list bg-active))
+                                               (_ (list bg-inactive))))))
 ;;;;; vimish-fold
     `(vimish-fold-fringe ((,class :foreground ,cyan-active)))
-    `(vimish-fold-mouse-face ((,class :inherit modus-theme-intense-blue)))
+    `(vimish-fold-mouse-face ((,class :inherit modus-themes-intense-blue)))
     `(vimish-fold-overlay ((,class :background ,bg-alt :foreground 
,fg-special-cold)))
 ;;;;; visible-mark
     `(visible-mark-active ((,class :background ,blue-intense-bg)))
@@ -6183,12 +6379,12 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(visible-mark-forward-face1 ((,class :background ,magenta-intense-bg)))
     `(visible-mark-forward-face2 ((,class :background ,green-intense-bg)))
 ;;;;; visual-regexp
-    `(vr/group-0 ((,class :inherit modus-theme-intense-blue)))
-    `(vr/group-1 ((,class :inherit modus-theme-intense-magenta)))
-    `(vr/group-2 ((,class :inherit modus-theme-intense-green)))
-    `(vr/match-0 ((,class :inherit modus-theme-refine-yellow)))
-    `(vr/match-1 ((,class :inherit modus-theme-refine-yellow)))
-    `(vr/match-separator-face ((,class :inherit (modus-theme-intense-neutral 
bold))))
+    `(vr/group-0 ((,class :inherit modus-themes-intense-blue)))
+    `(vr/group-1 ((,class :inherit modus-themes-intense-magenta)))
+    `(vr/group-2 ((,class :inherit modus-themes-intense-green)))
+    `(vr/match-0 ((,class :inherit modus-themes-refine-yellow)))
+    `(vr/match-1 ((,class :inherit modus-themes-refine-yellow)))
+    `(vr/match-separator-face ((,class :inherit (modus-themes-intense-neutral 
bold))))
 ;;;;; volatile-highlights
     `(vhl/default-face ((,class :background ,bg-alt :foreground 
,blue-nuanced-fg :extend t)))
 ;;;;; vterm
@@ -6232,9 +6428,9 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(web-mode-css-string-face ((,class :inherit web-mode-string-face)))
     `(web-mode-css-variable-face ((,class :foreground ,fg-special-warm)))
     `(web-mode-current-column-highlight-face ((,class :background ,bg-alt)))
-    `(web-mode-current-element-highlight-face ((,class :inherit 
modus-theme-special-mild)))
-    `(web-mode-doctype-face ((,class :inherit modus-theme-slant :foreground 
,fg-special-cold)))
-    `(web-mode-error-face ((,class :inherit modus-theme-intense-red)))
+    `(web-mode-current-element-highlight-face ((,class :inherit 
modus-themes-special-mild)))
+    `(web-mode-doctype-face ((,class :inherit modus-themes-slant :foreground 
,fg-special-cold)))
+    `(web-mode-error-face ((,class :inherit modus-themes-intense-red)))
     `(web-mode-filter-face ((,class :inherit font-lock-function-name-face)))
     `(web-mode-folded-face ((,class :underline t)))
     `(web-mode-function-call-face ((,class :inherit 
font-lock-function-name-face)))
@@ -6280,44 +6476,44 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(web-mode-warning-face ((,class :inherit font-lock-warning-face)))
     `(web-mode-whitespace-face ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
 ;;;;; wgrep
-    `(wgrep-delete-face ((,class :inherit modus-theme-refine-yellow)))
-    `(wgrep-done-face ((,class :inherit modus-theme-refine-blue)))
-    `(wgrep-face ((,class :inherit modus-theme-refine-green)))
+    `(wgrep-delete-face ((,class :inherit modus-themes-refine-yellow)))
+    `(wgrep-done-face ((,class :inherit modus-themes-refine-blue)))
+    `(wgrep-face ((,class :inherit modus-themes-refine-green)))
     `(wgrep-file-face ((,class :foreground ,fg-special-warm)))
-    `(wgrep-reject-face ((,class :inherit (modus-theme-intense-red bold))))
+    `(wgrep-reject-face ((,class :inherit (modus-themes-intense-red bold))))
 ;;;;; which-function-mode
     `(which-func ((,class :foreground ,magenta-active)))
 ;;;;; which-key
     `(which-key-command-description-face ((,class :foreground ,fg-main)))
     `(which-key-group-description-face ((,class :foreground ,magenta-alt)))
     `(which-key-highlighted-command-face ((,class :foreground ,yellow 
:underline t)))
-    `(which-key-key-face ((,class :inherit bold :foreground ,blue-intense)))
+    `(which-key-key-face ((,class :inherit modus-themes-key-binding)))
     `(which-key-local-map-description-face ((,class :foreground ,fg-main)))
     `(which-key-note-face ((,class :foreground ,fg-special-warm)))
     `(which-key-separator-face ((,class :inherit shadow)))
     `(which-key-special-key-face ((,class :inherit bold :foreground 
,orange-intense)))
 ;;;;; whitespace-mode
-    `(whitespace-big-indent ((,class :inherit modus-theme-subtle-red)))
-    `(whitespace-empty ((,class :inherit modus-theme-intense-magenta)))
+    `(whitespace-big-indent ((,class :inherit modus-themes-subtle-red)))
+    `(whitespace-empty ((,class :inherit modus-themes-intense-magenta)))
     `(whitespace-hspace ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
     `(whitespace-indentation ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
     `(whitespace-line ((,class :background ,bg-alt)))
     `(whitespace-newline ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
     `(whitespace-space ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
-    `(whitespace-space-after-tab ((,class :inherit 
modus-theme-subtle-magenta)))
-    `(whitespace-space-before-tab ((,class :inherit modus-theme-subtle-cyan)))
+    `(whitespace-space-after-tab ((,class :inherit 
modus-themes-subtle-magenta)))
+    `(whitespace-space-before-tab ((,class :inherit modus-themes-subtle-cyan)))
     `(whitespace-tab ((,class :background ,bg-whitespace :foreground 
,fg-whitespace)))
-    `(whitespace-trailing ((,class :inherit modus-theme-intense-red)))
+    `(whitespace-trailing ((,class :inherit modus-themes-intense-red)))
 ;;;;; window-divider-mode
     `(window-divider ((,class :foreground ,fg-window-divider-inner)))
     `(window-divider-first-pixel ((,class :foreground 
,fg-window-divider-outer)))
     `(window-divider-last-pixel ((,class :foreground 
,fg-window-divider-outer)))
 ;;;;; winum
-    `(winum-face ((,class :inherit modus-theme-bold :foreground ,cyan-active)))
+    `(winum-face ((,class :inherit modus-themes-bold :foreground 
,cyan-active)))
 ;;;;; writegood-mode
     `(writegood-duplicates-face ((,class :background ,bg-alt :foreground 
,red-alt :underline t)))
-    `(writegood-passive-voice-face ((,class :inherit 
modus-theme-lang-warning)))
-    `(writegood-weasels-face ((,class :inherit modus-theme-lang-error)))
+    `(writegood-passive-voice-face ((,class :inherit 
modus-themes-lang-warning)))
+    `(writegood-weasels-face ((,class :inherit modus-themes-lang-error)))
 ;;;;; woman
     `(woman-addition ((,class :foreground ,magenta-alt-other)))
     `(woman-bold ((,class :inherit bold :foreground ,magenta)))
@@ -6333,18 +6529,18 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(xref-line-number ((,class :inherit shadow)))
     `(xref-match ((,class :inherit match)))
 ;;;;; yaml-mode
-    `(yaml-tab-face ((,class :inherit modus-theme-intense-red)))
+    `(yaml-tab-face ((,class :inherit modus-themes-intense-red)))
 ;;;;; yasnippet
     `(yas-field-highlight-face ((,class :background ,bg-hl-alt-intense)))
 ;;;;; ztree
     `(ztreep-arrow-face ((,class :foreground ,fg-inactive)))
     `(ztreep-diff-header-face ((,class :inherit bold :height 1.2 :foreground 
,fg-special-cold)))
-    `(ztreep-diff-header-small-face ((,class :inherit bold :foreground 
,fg-special-mild)))
-    `(ztreep-diff-model-add-face ((,class :foreground ,green)))
+    `(ztreep-diff-header-small-face ((,class :foreground ,fg-main)))
+    `(ztreep-diff-model-add-face ((,class :foreground 
,@(modus-themes--diff-deuteran blue green))))
     `(ztreep-diff-model-diff-face ((,class :foreground ,red)))
     `(ztreep-diff-model-ignored-face ((,class :inherit shadow :strike-through 
t)))
     `(ztreep-diff-model-normal-face ((,class :inherit shadow)))
-    `(ztreep-expand-sign-face ((,class :foreground ,blue)))
+    `(ztreep-expand-sign-face ((,class :inherit ztreep-arrow-face)))
     `(ztreep-header-face ((,class :inherit bold :height 1.2 :foreground 
,fg-special-cold)))
     `(ztreep-leaf-face ((,class :foreground ,cyan)))
     `(ztreep-node-count-children-face ((,class :foreground ,fg-special-warm)))
@@ -6362,14 +6558,14 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
 ;;;; exwm
     `(exwm-floating-border-color ,fg-window-divider-inner)
 ;;;; flymake fringe indicators
-    `(flymake-error-bitmap '(flymake-double-exclamation-mark 
modus-theme-fringe-red))
-    `(flymake-warning-bitmap '(exclamation-mark modus-theme-fringe-yellow))
-    `(flymake-note-bitmap '(exclamation-mark modus-theme-fringe-cyan))
+    `(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))
 ;;;; ibuffer
-    `(ibuffer-deletion-face 'modus-theme-mark-del)
-    `(ibuffer-filter-group-name-face 'modus-theme-mark-symbol)
-    `(ibuffer-marked-face 'modus-theme-mark-sel)
-    `(ibuffer-title-face 'modus-theme-pseudo-header)
+    `(ibuffer-deletion-face 'modus-themes-mark-del)
+    `(ibuffer-filter-group-name-face 'modus-themes-mark-symbol)
+    `(ibuffer-marked-face 'modus-themes-mark-sel)
+    `(ibuffer-title-face 'modus-themes-pseudo-header)
 ;;;; highlight-tail
     `(highlight-tail-colors
       '((,green-subtle-bg . 0)
@@ -6425,24 +6621,24 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
     `(xterm-color-names-bright ["gray35" ,red-alt ,green-alt ,yellow-alt 
,blue-alt ,magenta-alt ,cyan-alt "white"])
     (if (eq modus-themes-org-blocks 'rainbow)
         `(org-src-block-faces              ; TODO this list should be expanded
-          `(("emacs-lisp" modus-theme-nuanced-magenta)
-            ("elisp" modus-theme-nuanced-magenta)
-            ("clojure" modus-theme-nuanced-magenta)
-            ("clojurescript" modus-theme-nuanced-magenta)
-            ("c" modus-theme-nuanced-blue)
-            ("c++" modus-theme-nuanced-blue)
-            ("sh" modus-theme-nuanced-green)
-            ("shell" modus-theme-nuanced-green)
-            ("html" modus-theme-nuanced-yellow)
-            ("xml" modus-theme-nuanced-yellow)
-            ("css" modus-theme-nuanced-red)
-            ("scss" modus-theme-nuanced-red)
-            ("python" modus-theme-nuanced-green)
-            ("ipython" modus-theme-nuanced-magenta)
-            ("r" modus-theme-nuanced-cyan)
-            ("yaml" modus-theme-nuanced-cyan)
-            ("conf" modus-theme-nuanced-cyan)
-            ("docker" modus-theme-nuanced-cyan)))
+          `(("emacs-lisp" modus-themes-nuanced-magenta)
+            ("elisp" modus-themes-nuanced-magenta)
+            ("clojure" modus-themes-nuanced-magenta)
+            ("clojurescript" modus-themes-nuanced-magenta)
+            ("c" modus-themes-nuanced-blue)
+            ("c++" modus-themes-nuanced-blue)
+            ("sh" modus-themes-nuanced-green)
+            ("shell" modus-themes-nuanced-green)
+            ("html" modus-themes-nuanced-yellow)
+            ("xml" modus-themes-nuanced-yellow)
+            ("css" modus-themes-nuanced-red)
+            ("scss" modus-themes-nuanced-red)
+            ("python" modus-themes-nuanced-green)
+            ("ipython" modus-themes-nuanced-magenta)
+            ("r" modus-themes-nuanced-cyan)
+            ("yaml" modus-themes-nuanced-cyan)
+            ("conf" modus-themes-nuanced-cyan)
+            ("docker" modus-themes-nuanced-cyan)))
       `(org-src-block-faces '())))
   "Custom variables for `modus-themes-theme'.")
 
@@ -6453,4 +6649,11 @@ by virtue of calling either of 
`modus-themes-load-operandi' and
       (add-to-list 'custom-theme-load-path dir))))
 
 (provide 'modus-themes)
+
+;; Local Variables:
+;; time-stamp-start: "Last-Modified:[ \t]+\\\\?[\"<]"
+;; time-stamp-end: "\\\\?[\">]"
+;; time-stamp-format: "%Y-%02m-%02d %02H:%02M:%02S %5z"
+;; End:
+
 ;;; modus-themes.el ends here
diff --git a/etc/themes/modus-vivendi-theme.el 
b/etc/themes/modus-vivendi-theme.el
index 814f10d..ff59d30 100644
--- a/etc/themes/modus-vivendi-theme.el
+++ b/etc/themes/modus-vivendi-theme.el
@@ -4,7 +4,7 @@
 
 ;; Author: Protesilaos Stavrou <info@protesilaos.com>
 ;; URL: https://gitlab.com/protesilaos/modus-themes
-;; Version: 1.2.3
+;; Version: 1.3.2
 ;; Package-Requires: ((emacs "26.1"))
 ;; Keywords: faces, theme, accessibility
 
@@ -52,6 +52,9 @@
 
 (eval-and-compile
   (unless (and (fboundp 'require-theme)
+               load-file-name
+               (equal (file-name-directory load-file-name)
+                      (expand-file-name "themes/" data-directory))
                (require-theme 'modus-themes t))
     (require 'modus-themes)))
 
diff --git a/leim/leim-ext.el b/leim/leim-ext.el
index 687379d..904675c 100644
--- a/leim/leim-ext.el
+++ b/leim/leim-ext.el
@@ -1,4 +1,4 @@
-;; leim-ext.el -- extra leim configuration     -*- lexical-binding: t; -*-
+;;; leim-ext.el --- extra leim configuration   -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 2004-2021 Free Software Foundation, Inc.
 ;; Copyright (C) 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
diff --git a/lib-src/seccomp-filter.c b/lib-src/seccomp-filter.c
index fc3c3a0..8f8a990 100644
--- a/lib-src/seccomp-filter.c
+++ b/lib-src/seccomp-filter.c
@@ -183,9 +183,9 @@ main (int argc, char **argv)
            some versions of the dynamic loader still use it.  Also
            allow allocating thread stacks.  */
         SCMP_A3_32 (SCMP_CMP_MASKED_EQ,
-                    ~(MAP_PRIVATE | MAP_FILE | MAP_ANONYMOUS
-                      | MAP_FIXED | MAP_DENYWRITE | MAP_STACK
-                      | MAP_NORESERVE),
+                    ~(MAP_SHARED | MAP_PRIVATE | MAP_FILE
+                      | MAP_ANONYMOUS | MAP_FIXED | MAP_DENYWRITE
+                      | MAP_STACK | MAP_NORESERVE),
                     0));
   RULE (SCMP_ACT_ALLOW, SCMP_SYS (mmap),
         SCMP_A2_32 (SCMP_CMP_MASKED_EQ,
diff --git a/lisp/align.el b/lisp/align.el
index 7ae067f..a0b626a 100644
--- a/lisp/align.el
+++ b/lisp/align.el
@@ -1587,8 +1587,6 @@ aligner would have dealt with are."
     (if report
        (message "Aligning...done"))))
 
-;; Provide:
-
 (provide 'align)
 
 (run-hooks 'align-load-hook)
diff --git a/lisp/allout-widgets.el b/lisp/allout-widgets.el
index 931dfbc..0e12704 100644
--- a/lisp/allout-widgets.el
+++ b/lisp/allout-widgets.el
@@ -1,4 +1,4 @@
-;; allout-widgets.el --- Visually highlight allout outline structure.  -*- 
lexical-binding: t; -*-
+;;; allout-widgets.el --- Visually highlight allout outline structure.  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 2005-2021 Free Software Foundation, Inc.
 
@@ -2290,10 +2290,11 @@ The elements of LIST are not copied, just the list 
structure itself."
 
 (define-obsolete-function-alias 'allout-frame-property #'frame-parameter 
"28.1")
 
-;;;_ : provide
 (provide 'allout-widgets)
 
 ;;;_ . Local emacs vars.
 ;;;_  , Local variables:
 ;;;_  , allout-layout: (-1 : 0)
 ;;;_  , End:
+
+;;; allout-widgets.el ends here
diff --git a/lisp/allout.el b/lisp/allout.el
index f50f5fd..1605ce2 100644
--- a/lisp/allout.el
+++ b/lisp/allout.el
@@ -6457,7 +6457,6 @@ If BEG is bigger than END we return 0."
     (isearch-repeat 'forward)
     (isearch-mode t)))
 
-;;;_ #11 Provide
 (provide 'allout)
 
 ;;;_* Local emacs vars.
diff --git a/lisp/autorevert.el b/lisp/autorevert.el
index 1bb40c9..edd4c7e 100644
--- a/lisp/autorevert.el
+++ b/lisp/autorevert.el
@@ -937,7 +937,6 @@ the timer when no buffers need to be checked."
           (cancel-timer auto-revert-timer))
        (setq auto-revert-timer nil)))))
 
-;; The end:
 (provide 'autorevert)
 
 (run-hooks 'auto-revert-load-hook)
diff --git a/lisp/bs.el b/lisp/bs.el
index 154e359..494bc42 100644
--- a/lisp/bs.el
+++ b/lisp/bs.el
@@ -1504,7 +1504,6 @@ name of buffer configuration."
   ;; continue standard unloading
   nil)
 
-;; Now provide feature bs
 (provide 'bs)
 
 ;;; bs.el ends here
diff --git a/lisp/calc/calc-menu.el b/lisp/calc/calc-menu.el
index ac14e36..516f62d 100644
--- a/lisp/calc/calc-menu.el
+++ b/lisp/calc/calc-menu.el
@@ -1669,3 +1669,5 @@
         ["Quit" calc-quit]))
 
 (provide 'calc-menu)
+
+;;; calc-menu.el ends here
diff --git a/lisp/calc/calc-nlfit.el b/lisp/calc/calc-nlfit.el
index 11867f1..f676b09 100644
--- a/lisp/calc/calc-nlfit.el
+++ b/lisp/calc/calc-nlfit.el
@@ -819,3 +819,5 @@
        (calc-record traillist "parm")))))
 
 (provide 'calc-nlfit)
+
+;;; calc-nlfit.el ends here
diff --git a/lisp/cedet/semantic/bovine/el.el b/lisp/cedet/semantic/bovine/el.el
index 1170e71..ebb2044 100644
--- a/lisp/cedet/semantic/bovine/el.el
+++ b/lisp/cedet/semantic/bovine/el.el
@@ -585,7 +585,7 @@ Overrides `semantic-nonterminal-static'."
 
 ;;; Context parsing
 ;;
-;; Emacs lisp is very different from C,C++ which most context parsing
+;; Emacs Lisp is very different from C,C++ which most context parsing
 ;; functions are written.  Support them here.
 (define-mode-local-override semantic-up-context emacs-lisp-mode
   (&optional _point _bounds-type)
diff --git a/lisp/cedet/semantic/db-ebrowse.el 
b/lisp/cedet/semantic/db-ebrowse.el
index efdf3df..682a4cc 100644
--- a/lisp/cedet/semantic/db-ebrowse.el
+++ b/lisp/cedet/semantic/db-ebrowse.el
@@ -222,7 +222,7 @@ warn instead."
 
 ;JAVE this just instantiates a default empty ebrowse struct?
 ; how would new instances wind up here?
-; the ebrowse class isn't singleton, unlike the emacs lisp one
+; the ebrowse class isn't singleton, unlike the Emacs Lisp one
 (defvar-mode-local c++-mode semanticdb-project-system-databases
   ()
   "Search Ebrowse for symbols.")
diff --git a/lisp/cus-edit.el b/lisp/cus-edit.el
index dde6e89..7627930 100644
--- a/lisp/cus-edit.el
+++ b/lisp/cus-edit.el
@@ -5155,8 +5155,6 @@ if that value is non-nil."
 
 (put 'Custom-mode 'mode-class 'special)
 
-;;; The End.
-
 (provide 'cus-edit)
 
 ;;; cus-edit.el ends here
diff --git a/lisp/cus-face.el b/lisp/cus-face.el
index 21fe89c..6c0052b 100644
--- a/lisp/cus-face.el
+++ b/lisp/cus-face.el
@@ -395,8 +395,6 @@ This means reset FACE to its value in FROM-THEME."
 
 (define-obsolete-function-alias 'custom-facep #'facep "28.1")
 
-;;; The End.
-
 (provide 'cus-face)
 
 ;;; cus-face.el ends here
diff --git a/lisp/cus-theme.el b/lisp/cus-theme.el
index a702fed..13fb9f3 100644
--- a/lisp/cus-theme.el
+++ b/lisp/cus-theme.el
@@ -1,7 +1,7 @@
-;;; cus-theme.el -- custom theme creation user interface  -*- lexical-binding: 
t -*-
-;;
+;;; cus-theme.el --- custom theme creation user interface  -*- 
lexical-binding: t -*-
+
 ;; Copyright (C) 2001-2021 Free Software Foundation, Inc.
-;;
+
 ;; Author: Alex Schroeder <alex@gnu.org>
 ;; Maintainer: emacs-devel@gnu.org
 ;; Keywords: help, faces
diff --git a/lisp/custom.el b/lisp/custom.el
index 85e5d65..2c9eadb 100644
--- a/lisp/custom.el
+++ b/lisp/custom.el
@@ -1623,8 +1623,6 @@ If a choice with the same tag already exists, no action 
is taken."
       (put variable 'custom-type
            (append choices (list choice))))))
 
-;;; The End.
-
 (provide 'custom)
 
 ;;; custom.el ends here
diff --git a/lisp/dframe.el b/lisp/dframe.el
index f4208f3..1ddf11a 100644
--- a/lisp/dframe.el
+++ b/lisp/dframe.el
@@ -1,4 +1,4 @@
-;;; dframe --- dedicate frame support modes  -*- lexical-binding:t -*-
+;;; dframe.el --- dedicate frame support modes  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1996-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/dos-w32.el b/lisp/dos-w32.el
index cf75321..45daaad 100644
--- a/lisp/dos-w32.el
+++ b/lisp/dos-w32.el
@@ -1,4 +1,4 @@
-;; dos-w32.el --- Functions shared among MS-DOS and W32 (NT/95) platforms  -*- 
lexical-binding: t; -*-
+;;; dos-w32.el --- Functions shared among MS-DOS and W32 (NT/95) platforms  
-*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1996, 2001-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/emacs-lisp/bindat.el b/lisp/emacs-lisp/bindat.el
index 9899496..247fb91 100644
--- a/lisp/emacs-lisp/bindat.el
+++ b/lisp/emacs-lisp/bindat.el
@@ -167,7 +167,7 @@
 
 (defun bindat--unpack-strz (len)
   (let ((i 0) s)
-    (while (and (< i len) (/= (aref bindat-raw (+ bindat-idx i)) 0))
+    (while (and (if len (< i len) t) (/= (aref bindat-raw (+ bindat-idx i)) 0))
       (setq i (1+ i)))
     (setq s (substring bindat-raw bindat-idx (+ bindat-idx i)))
     (setq bindat-idx (+ bindat-idx len))
@@ -439,6 +439,12 @@ e.g. corresponding to STRUCT.FIELD1[INDEX2].FIELD3..."
     (aset bindat-raw (+ bindat-idx i) (aref v i)))
   (setq bindat-idx (+ bindat-idx len)))
 
+(defun bindat--pack-strz (v)
+  (let ((len (length v)))
+    (dotimes (i len)
+      (aset bindat-raw (+ bindat-idx i) (aref v i)))
+    (setq bindat-idx (+ bindat-idx len 1))))
+
 (defun bindat--pack-bits (len v)
   (let ((bnum (1- (* 8 len))) j m)
     (while (>= bnum 0)
@@ -677,14 +683,23 @@ is the name of a variable that will hold the value we 
need to pack.")
     (`(length . ,_) `(cl-incf bindat-idx ,len))
     (`(pack . ,args) `(bindat--pack-str ,len . ,args))))
 
-(cl-defmethod bindat--type (op (_ (eql strz))  len)
+(cl-defmethod bindat--type (op (_ (eql strz))  &optional len)
   (bindat--pcase op
     ('unpack `(bindat--unpack-strz ,len))
-    (`(length . ,_) `(cl-incf bindat-idx ,len))
-    ;; Here we don't add the terminating zero because we rely
-    ;; on the fact that `bindat-raw' was presumably initialized with
-    ;; all-zeroes before we started.
-    (`(pack . ,args) `(bindat--pack-str ,len . ,args))))
+    (`(length ,val)
+     `(cl-incf bindat-idx ,(cond
+                            ((null len) `(length ,val))
+                            ((numberp len) len)
+                            (t `(or ,len (length ,val))))))
+    (`(pack . ,args)
+     (macroexp-let2 nil len len
+       `(if ,len
+            ;; Same as non-zero terminated strings since we don't actually add
+            ;; the terminating zero anyway (because we rely on the fact that
+            ;; `bindat-raw' was presumably initialized with all-zeroes before
+            ;; we started).
+            (bindat--pack-str ,len . ,args)
+          (bindat--pack-strz . ,args))))))
 
 (cl-defmethod bindat--type (op (_ (eql bits))  len)
   (bindat--pcase op
@@ -812,7 +827,7 @@ is the name of a variable that will hold the value we need 
to pack.")
   '(&or ["uint" def-form]
         ["uintr" def-form]
         ["str" def-form]
-        ["strz" def-form]
+        ["strz" &optional def-form]
         ["bits" def-form]
         ["fill" def-form]
         ["align" def-form]
@@ -832,7 +847,7 @@ TYPE is a Bindat type expression.  It can take the 
following forms:
   uint BITLEN          - Big-endian unsigned integer
   uintr BITLEN         - Little-endian unsigned integer
   str LEN              - Byte string
-  strz LEN             - Zero-terminated byte-string
+  strz [LEN]           - Zero-terminated byte-string
   bits LEN             - Bit vector (LEN is counted in bytes)
   fill LEN             - Just a filler
   align LEN            - Fill up to the next multiple of LEN bytes
diff --git a/lisp/emacs-lisp/bytecomp.el b/lisp/emacs-lisp/bytecomp.el
index 30d5913..9be54ca 100644
--- a/lisp/emacs-lisp/bytecomp.el
+++ b/lisp/emacs-lisp/bytecomp.el
@@ -4715,10 +4715,15 @@ binding slots have been popped."
 (defun byte-compile-condition-case (form)
   (let* ((var (nth 1 form))
          (body (nth 2 form))
+         (handlers (nthcdr 3 form))
          (depth byte-compile-depth)
+         (success-handler (assq :success handlers))
+         (failure-handlers (if success-handler
+                               (remq success-handler handlers)
+                             handlers))
          (clauses (mapcar (lambda (clause)
                             (cons (byte-compile-make-tag) clause))
-                          (nthcdr 3 form)))
+                          failure-handlers))
          (endtag (byte-compile-make-tag)))
     (byte-compile-set-symbol-position 'condition-case)
     (unless (symbolp var)
@@ -4744,30 +4749,40 @@ binding slots have been popped."
 
     (byte-compile-form body) ;; byte-compile--for-effect
     (dolist (_ clauses) (byte-compile-out 'byte-pophandler))
-    (byte-compile-goto 'byte-goto endtag)
 
-    (while clauses
-      (let ((clause (pop clauses))
-            (byte-compile-bound-variables byte-compile-bound-variables)
-            (byte-compile--lexical-environment
-             byte-compile--lexical-environment))
-        (setq byte-compile-depth (1+ depth))
-        (byte-compile-out-tag (pop clause))
-        (dolist (_ clauses) (byte-compile-out 'byte-pophandler))
-        (cond
-         ((null var) (byte-compile-discard))
-         (lexical-binding
-          (push (cons var (1- byte-compile-depth))
-                byte-compile--lexical-environment))
-         (t (byte-compile-dynamic-variable-bind var)))
-        (byte-compile-body (cdr clause)) ;; byte-compile--for-effect
-        (cond
-         ((null var) nil)
-         (lexical-binding (byte-compile-discard 1 'preserve-tos))
-         (t (byte-compile-out 'byte-unbind 1)))
-        (byte-compile-goto 'byte-goto endtag)))
-
-    (byte-compile-out-tag endtag)))
+    (let ((compile-handler-body
+           (lambda (body)
+             (let ((byte-compile-bound-variables byte-compile-bound-variables)
+                   (byte-compile--lexical-environment
+                    byte-compile--lexical-environment))
+               (cond
+                ((null var) (byte-compile-discard))
+                (lexical-binding
+                 (push (cons var (1- byte-compile-depth))
+                       byte-compile--lexical-environment))
+                (t (byte-compile-dynamic-variable-bind var)))
+
+               (byte-compile-body body) ;; byte-compile--for-effect
+
+               (cond
+                ((null var))
+                (lexical-binding (byte-compile-discard 1 'preserve-tos))
+                (t (byte-compile-out 'byte-unbind 1)))))))
+
+      (when success-handler
+        (funcall compile-handler-body (cdr success-handler)))
+
+      (byte-compile-goto 'byte-goto endtag)
+
+      (while clauses
+        (let ((clause (pop clauses)))
+          (setq byte-compile-depth (1+ depth))
+          (byte-compile-out-tag (pop clause))
+          (dolist (_ clauses) (byte-compile-out 'byte-pophandler))
+          (funcall compile-handler-body (cdr clause))
+          (byte-compile-goto 'byte-goto endtag)))
+
+      (byte-compile-out-tag endtag))))
 
 (defun byte-compile-save-excursion (form)
   (if (and (eq 'set-buffer (car-safe (car-safe (cdr form))))
diff --git a/lisp/emacs-lisp/cconv.el b/lisp/emacs-lisp/cconv.el
index b37cfeb..f663710 100644
--- a/lisp/emacs-lisp/cconv.el
+++ b/lisp/emacs-lisp/cconv.el
@@ -1,4 +1,4 @@
-;;; cconv.el --- Closure conversion for statically scoped Emacs lisp. -*- 
lexical-binding: t -*-
+;;; cconv.el --- Closure conversion for statically scoped Emacs Lisp. -*- 
lexical-binding: t -*-
 
 ;; Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/emacs-lisp/check-declare.el b/lisp/emacs-lisp/check-declare.el
index 7c2b23b..bec4ad9 100644
--- a/lisp/emacs-lisp/check-declare.el
+++ b/lisp/emacs-lisp/check-declare.el
@@ -328,4 +328,4 @@ Returns non-nil if any false statements are found."
 
 (provide 'check-declare)
 
-;;; check-declare.el ends here.
+;;; check-declare.el ends here
diff --git a/lisp/emacs-lisp/cl-indent.el b/lisp/emacs-lisp/cl-indent.el
index 7d0bfc8..c88e15d 100644
--- a/lisp/emacs-lisp/cl-indent.el
+++ b/lisp/emacs-lisp/cl-indent.el
@@ -27,7 +27,7 @@
 
 ;; This package supplies a single entry point, common-lisp-indent-function,
 ;; which performs indentation in the preferred style for Common Lisp code.
-;; It is also a suitable function for indenting Emacs lisp code.
+;; It is also a suitable function for indenting Emacs Lisp code.
 ;;
 ;; To enable it:
 ;;
diff --git a/lisp/emacs-lisp/cl-macs.el b/lisp/emacs-lisp/cl-macs.el
index 8b2d3c4..d7e6c30 100644
--- a/lisp/emacs-lisp/cl-macs.el
+++ b/lisp/emacs-lisp/cl-macs.el
@@ -2144,7 +2144,9 @@ Like `cl-flet' but the definitions can refer to previous 
ones.
             ((and `(condition-case ,err-var ,bodyform . ,handlers)
                   (guard (not (eq err-var var))))
              `(condition-case ,err-var
-                  (progn (setq ,retvar ,bodyform) nil)
+                  ,(if (assq :success handlers)
+                       bodyform
+                     `(progn (setq ,retvar ,bodyform) nil))
                 . ,(mapcar (lambda (h)
                              (cons (car h) (funcall opt-exps (cdr h))))
                            handlers)))
diff --git a/lisp/emacs-lisp/debug.el b/lisp/emacs-lisp/debug.el
index b2d54c7..069c7a9 100644
--- a/lisp/emacs-lisp/debug.el
+++ b/lisp/emacs-lisp/debug.el
@@ -213,7 +213,7 @@ the debugger will not be entered."
              last-input-event last-command-event last-nonmenu-event
              last-event-frame
              overriding-local-map
-             load-read-function
+             (load-read-function #'read)
              ;; If we are inside a minibuffer, allow nesting
              ;; so that we don't get an error from the `e' command.
              (enable-recursive-minibuffers
diff --git a/lisp/emacs-lisp/easy-mmode.el b/lisp/emacs-lisp/easy-mmode.el
index e23ff5a..2dd1524 100644
--- a/lisp/emacs-lisp/easy-mmode.el
+++ b/lisp/emacs-lisp/easy-mmode.el
@@ -116,7 +116,7 @@ it is disabled.")
                                   doc nil nil 1)))))
 
 ;;;###autoload
-(defalias 'easy-mmode-define-minor-mode 'define-minor-mode)
+(defalias 'easy-mmode-define-minor-mode #'define-minor-mode)
 ;;;###autoload
 (defmacro define-minor-mode (mode doc &optional init-value lighter keymap 
&rest body)
   "Define a new minor mode MODE.
@@ -143,9 +143,9 @@ BODY contains code to execute each time the mode is enabled 
or disabled.
   It is executed after toggling the mode, and before running MODE-hook.
   Before the actual body code, you can write keyword arguments, i.e.
   alternating keywords and values.  If you provide BODY, then you must
-  provide at least one keyword argument.  The following special
-  keywords are supported (other keywords are passed to `defcustom' if
-  the minor mode is global):
+  provide at least one keyword argument (e.g. `:lighter nil`).
+  The following special keywords are supported (other keywords are passed
+  to `defcustom' if the minor mode is global):
 
 :global GLOBAL If non-nil specifies that the minor mode is not meant to be
                buffer-local, so don't make the variable MODE buffer-local.
@@ -186,9 +186,11 @@ For example, you could write
     ...BODY CODE...)
 
 For backward compatibility with the Emacs<21 calling convention,
-BODY can also start with the triplet INIT-VALUE LIGHTER KEYMAP."
+the keywords can also be preceded by the obsolete triplet
+INIT-VALUE LIGHTER KEYMAP.
+
+\(fn MODE DOC [KEYWORD VAL ... &rest BODY])"
   (declare (doc-string 2)
-           (advertised-calling-convention (mode doc &rest body) "28.1")
            (debug (&define name string-or-null-p
                           [&optional [&not keywordp] sexp
                            &optional [&not keywordp] sexp
@@ -267,7 +269,7 @@ BODY can also start with the triplet INIT-VALUE LIGHTER 
KEYMAP."
     (unless set (setq set '(:set #'custom-set-minor-mode)))
 
     (unless initialize
-      (setq initialize '(:initialize 'custom-initialize-default)))
+      (setq initialize '(:initialize #'custom-initialize-default)))
 
     ;; TODO? Mark booleans as safe if booleanp?  Eg abbrev-mode.
     (unless type (setq type '(:type 'boolean)))
@@ -405,9 +407,9 @@ No problems result if this variable is not bound.
 ;;;
 
 ;;;###autoload
-(defalias 'easy-mmode-define-global-mode 'define-globalized-minor-mode)
+(defalias 'easy-mmode-define-global-mode #'define-globalized-minor-mode)
 ;;;###autoload
-(defalias 'define-global-minor-mode 'define-globalized-minor-mode)
+(defalias 'define-global-minor-mode #'define-globalized-minor-mode)
 ;;;###autoload
 (defmacro define-globalized-minor-mode (global-mode mode turn-on &rest body)
   "Make a global mode GLOBAL-MODE corresponding to buffer-local minor MODE.
@@ -509,12 +511,12 @@ disable it.  If called from Lisp, enable the mode if ARG 
is omitted or nil.\n\n"
         (if ,global-mode
             (progn
               (add-hook 'after-change-major-mode-hook
-                        ',MODE-enable-in-buffers)
-              (add-hook 'find-file-hook ',MODE-check-buffers)
-              (add-hook 'change-major-mode-hook ',MODE-cmhh))
-          (remove-hook 'after-change-major-mode-hook ',MODE-enable-in-buffers)
-          (remove-hook 'find-file-hook ',MODE-check-buffers)
-          (remove-hook 'change-major-mode-hook ',MODE-cmhh))
+                        #',MODE-enable-in-buffers)
+              (add-hook 'find-file-hook #',MODE-check-buffers)
+              (add-hook 'change-major-mode-hook #',MODE-cmhh))
+          (remove-hook 'after-change-major-mode-hook #',MODE-enable-in-buffers)
+          (remove-hook 'find-file-hook #',MODE-check-buffers)
+          (remove-hook 'change-major-mode-hook #',MODE-cmhh))
 
         ;; Go through existing buffers.
         (dolist (buf (buffer-list))
@@ -554,7 +556,7 @@ list."
 
        ;; A function which checks whether MODE has been disabled in the major
        ;; mode hook which has just been run.
-       (add-hook ',minor-MODE-hook ',MODE-set-explicitly)
+       (add-hook ',minor-MODE-hook #',MODE-set-explicitly)
 
        ;; List of buffers left to process.
        (defvar ,MODE-buffers nil)
@@ -581,13 +583,13 @@ list."
 
        (defun ,MODE-check-buffers ()
         (,MODE-enable-in-buffers)
-        (remove-hook 'post-command-hook ',MODE-check-buffers))
+        (remove-hook 'post-command-hook #',MODE-check-buffers))
        (put ',MODE-check-buffers 'definition-name ',global-mode)
 
        ;; The function that catches kill-all-local-variables.
        (defun ,MODE-cmhh ()
         (add-to-list ',MODE-buffers (current-buffer))
-        (add-hook 'post-command-hook ',MODE-check-buffers))
+        (add-hook 'post-command-hook #',MODE-check-buffers))
        (put ',MODE-cmhh 'definition-name ',global-mode))))
 
 (defun easy-mmode--globalized-predicate-p (predicate)
diff --git a/lisp/emacs-lisp/edebug.el b/lisp/emacs-lisp/edebug.el
index cbc4019..b08ee3c 100644
--- a/lisp/emacs-lisp/edebug.el
+++ b/lisp/emacs-lisp/edebug.el
@@ -459,6 +459,9 @@ invoked without a prefix argument.
 If acting on a `defun' for FUNCTION, and the function was instrumented,
 `Edebug: FUNCTION' is printed in the minibuffer.  If not instrumented,
 just FUNCTION is printed."
+  ;; Re-install our advice, in case `debug' re-bound `load-read-function' to
+  ;; its default value.
+  (add-function :around load-read-function #'edebug--read)
   (let* ((edebug-all-forms (not (eq (not edebug-it) (not edebug-all-defs))))
         (edebug-all-defs  edebug-all-forms))
     (funcall orig-fun nil)))
diff --git a/lisp/emacs-lisp/eieio-core.el b/lisp/emacs-lisp/eieio-core.el
index e7727fd..2923dff 100644
--- a/lisp/emacs-lisp/eieio-core.el
+++ b/lisp/emacs-lisp/eieio-core.el
@@ -169,7 +169,7 @@ Return nil if that option doesn't exist."
   (and (recordp obj)
        (eieio--class-p (eieio--object-class obj))))
 
-(define-obsolete-function-alias 'object-p 'eieio-object-p "25.1")
+(define-obsolete-function-alias 'object-p #'eieio-object-p "25.1")
 
 (defun class-abstract-p (class)
   "Return non-nil if CLASS is abstract.
@@ -242,9 +242,9 @@ use \\='%s or turn off `eieio-backward-compatibility' 
instead" cname)
 
 (cl-deftype list-of (elem-type)
   `(and list
-        (satisfies (lambda (list)
-                     (cl-every (lambda (elem) (cl-typep elem ',elem-type))
-                               list)))))
+        (satisfies ,(lambda (list)
+                      (cl-every (lambda (elem) (cl-typep elem elem-type))
+                                list)))))
 
 
 (defun eieio-make-class-predicate (class)
@@ -787,7 +787,7 @@ Fills in OBJ's SLOT with its default value."
   (cond
    ;; Is it a function call?  If so, evaluate it.
    ((eieio-eval-default-p val)
-    (eval val))
+    (eval val t))
    ;;;; check for quoted things, and unquote them
    ;;((and (consp val) (eq (car val) 'quote))
    ;; (car (cdr val)))
@@ -1029,7 +1029,7 @@ method invocation orders of the involved classes."
          (eieio--class-precedence-c3 class))))))
 
 (define-obsolete-function-alias
-  'class-precedence-list 'eieio--class-precedence-list "24.4")
+  'class-precedence-list #'eieio--class-precedence-list "24.4")
 
 
 ;;; Here are some special types of errors
diff --git a/lisp/emacs-lisp/eieio-custom.el b/lisp/emacs-lisp/eieio-custom.el
index 184b99f..8257f7a 100644
--- a/lisp/emacs-lisp/eieio-custom.el
+++ b/lisp/emacs-lisp/eieio-custom.el
@@ -1,4 +1,4 @@
-;;; eieio-custom.el -- eieio object customization  -*- lexical-binding:t -*-
+;;; eieio-custom.el --- eieio object customization  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1999-2001, 2005, 2007-2021 Free Software Foundation,
 ;; Inc.
diff --git a/lisp/emacs-lisp/eieio-opt.el b/lisp/emacs-lisp/eieio-opt.el
index e65f424..08a6deb 100644
--- a/lisp/emacs-lisp/eieio-opt.el
+++ b/lisp/emacs-lisp/eieio-opt.el
@@ -1,4 +1,4 @@
-;;; eieio-opt.el -- eieio optional functions (debug, printing, speedbar)  -*- 
lexical-binding: t; -*-
+;;; eieio-opt.el --- eieio optional functions (debug, printing, speedbar)  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 1996, 1998-2003, 2005, 2008-2021 Free Software
 ;; Foundation, Inc.
diff --git a/lisp/emacs-lisp/eieio-speedbar.el 
b/lisp/emacs-lisp/eieio-speedbar.el
index 8bf77e2..c25ea8a 100644
--- a/lisp/emacs-lisp/eieio-speedbar.el
+++ b/lisp/emacs-lisp/eieio-speedbar.el
@@ -1,4 +1,4 @@
-;;; eieio-speedbar.el -- Classes for managing speedbar displays.  -*- 
lexical-binding:t -*-
+;;; eieio-speedbar.el --- Classes for managing speedbar displays.  -*- 
lexical-binding:t -*-
 
 ;; Copyright (C) 1999-2002, 2005, 2007-2021 Free Software Foundation,
 ;; Inc.
diff --git a/lisp/emacs-lisp/eieio.el b/lisp/emacs-lisp/eieio.el
index 910023b..31b6b09 100644
--- a/lisp/emacs-lisp/eieio.el
+++ b/lisp/emacs-lisp/eieio.el
@@ -981,4 +981,4 @@ of `eq'."
 
 (provide 'eieio)
 
-;;; eieio ends here
+;;; eieio.el ends here
diff --git a/lisp/emacs-lisp/faceup.el b/lisp/emacs-lisp/faceup.el
index 6c3931f..162c396 100644
--- a/lisp/emacs-lisp/faceup.el
+++ b/lisp/emacs-lisp/faceup.el
@@ -1170,11 +1170,6 @@ Intended to be called when a file is loaded."
      ;; File is being evaluated using, for example, `eval-buffer'.
      default-directory)))
 
-
-;; ----------------------------------------------------------------------
-;; The end
-;;
-
 (provide 'faceup)
 
 ;;; faceup.el ends here
diff --git a/lisp/emacs-lisp/lisp-mnt.el b/lisp/emacs-lisp/lisp-mnt.el
index 6d9c8c3..73a33a5 100644
--- a/lisp/emacs-lisp/lisp-mnt.el
+++ b/lisp/emacs-lisp/lisp-mnt.el
@@ -109,11 +109,6 @@
 ;;    * Footer line --- marks end-of-file so it can be distinguished from
 ;; an expanded formfeed or the results of truncation.
 
-;;; Change Log:
-
-;; Tue Jul 14 23:44:17 1992    ESR
-;;     * Created.
-
 ;;; Code:
 
 ;;; Variables:
diff --git a/lisp/emacs-lisp/ring.el b/lisp/emacs-lisp/ring.el
index 9689465..ea27bb3 100644
--- a/lisp/emacs-lisp/ring.el
+++ b/lisp/emacs-lisp/ring.el
@@ -248,8 +248,6 @@ If SEQ is already a ring, return it."
          (ring-insert-at-beginning ring (elt seq count))))
       ring)))
 
-;;; provide ourself:
-
 (provide 'ring)
 
 ;;; ring.el ends here
diff --git a/lisp/emacs-lisp/tcover-ses.el b/lisp/emacs-lisp/tcover-ses.el
index d9db1d3..4460fef 100644
--- a/lisp/emacs-lisp/tcover-ses.el
+++ b/lisp/emacs-lisp/tcover-ses.el
@@ -1,4 +1,4 @@
-;;;; testcover-ses.el -- Example use of `testcover' to test "SES"  -*- 
lexical-binding: t; -*-
+;;; tcover-ses.el --- Example use of `testcover' to test "SES"  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
@@ -716,4 +716,4 @@ spreadsheet files with invalid formatting."
   ;;Could do this here: (testcover-end "ses.el")
   (message "Done"))
 
-;;; testcover-ses.el ends here.
+;;; tcover-ses.el ends here
diff --git a/lisp/emacs-lisp/testcover.el b/lisp/emacs-lisp/testcover.el
index 75b27d0..e75f151 100644
--- a/lisp/emacs-lisp/testcover.el
+++ b/lisp/emacs-lisp/testcover.el
@@ -1,4 +1,4 @@
-;;;; testcover.el -- Visual code-coverage tool  -*- lexical-binding:t -*-
+;;; testcover.el --- Visual code-coverage tool  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
@@ -675,4 +675,4 @@ The list is 1valued if all of its constituent elements are 
also 1valued."
     (testcover-analyze-coverage (cadr form)))
    (t (testcover-analyze-coverage-backquote form))))
 
-;; testcover.el ends here.
+;;; testcover.el ends here
diff --git a/lisp/emacs-lisp/text-property-search.el 
b/lisp/emacs-lisp/text-property-search.el
index e909e4b..69943a8 100644
--- a/lisp/emacs-lisp/text-property-search.el
+++ b/lisp/emacs-lisp/text-property-search.el
@@ -214,3 +214,5 @@ and if a matching region is found, place point at its end."
   (funcall predicate value prop-value))
 
 (provide 'text-property-search)
+
+;;; text-property-search.el ends here
diff --git a/lisp/emacs-lisp/unsafep.el b/lisp/emacs-lisp/unsafep.el
index d52a6c7..fa4e058 100644
--- a/lisp/emacs-lisp/unsafep.el
+++ b/lisp/emacs-lisp/unsafep.el
@@ -1,4 +1,4 @@
-;;;; unsafep.el -- Determine whether a Lisp form is safe to evaluate  -*- 
lexical-binding: t; -*-
+;;; unsafep.el --- Determine whether a Lisp form is safe to evaluate  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/emulation/edt-mapper.el b/lisp/emulation/edt-mapper.el
index 0b15278..a723dbd 100644
--- a/lisp/emulation/edt-mapper.el
+++ b/lisp/emulation/edt-mapper.el
@@ -26,7 +26,7 @@
 
 ;;  [Part of the GNU Emacs EDT Emulation.]
 
-;;  This emacs lisp program can be used to create an emacs lisp file
+;;  This Emacs Lisp program can be used to create an Emacs Lisp file
 ;;  that defines the mapping of the user's keyboard to the LK-201
 ;;  keyboard function keys and keypad keys (around which EDT has been
 ;;  designed).  Please read the "Usage" AND "Known Problems" sections
diff --git a/lisp/erc/erc-button.el b/lisp/erc/erc-button.el
index 044776c..cb9af92 100644
--- a/lisp/erc/erc-button.el
+++ b/lisp/erc/erc-button.el
@@ -1,4 +1,4 @@
-;; erc-button.el --- A way of buttonizing certain things in ERC buffers  -*- 
lexical-binding:t -*-
+;;; erc-button.el --- A way of buttonizing certain things in ERC buffers  -*- 
lexical-binding:t -*-
 
 ;; Copyright (C) 1996-2004, 2006-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/erc/erc-desktop-notifications.el 
b/lisp/erc/erc-desktop-notifications.el
index 990f013..9838b23 100644
--- a/lisp/erc/erc-desktop-notifications.el
+++ b/lisp/erc/erc-desktop-notifications.el
@@ -1,4 +1,4 @@
-;; erc-desktop-notifications.el -- Send notification on PRIVMSG or mentions 
-*- lexical-binding:t -*-
+;;; erc-desktop-notifications.el --- Send notification on PRIVMSG or mentions 
-*- lexical-binding:t -*-
 
 ;; Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/erc/erc-goodies.el b/lisp/erc/erc-goodies.el
index 1143faa..fc9a8d3 100644
--- a/lisp/erc/erc-goodies.el
+++ b/lisp/erc/erc-goodies.el
@@ -1,4 +1,4 @@
-;; erc-goodies.el --- Collection of ERC modules  -*- lexical-binding: t; -*-
+;;; erc-goodies.el --- Collection of ERC modules  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 2001-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/erc/erc-imenu.el b/lisp/erc/erc-imenu.el
index b2a2dc5..dcf6db7 100644
--- a/lisp/erc/erc-imenu.el
+++ b/lisp/erc/erc-imenu.el
@@ -1,4 +1,4 @@
-;;; erc-imenu.el -- Imenu support for ERC  -*- lexical-binding: t; -*-
+;;; erc-imenu.el --- Imenu support for ERC  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 2001-2002, 2004, 2006-2021 Free Software Foundation,
 ;; Inc.
diff --git a/lisp/erc/erc-menu.el b/lisp/erc/erc-menu.el
index 0dc819f..1bee6ff 100644
--- a/lisp/erc/erc-menu.el
+++ b/lisp/erc/erc-menu.el
@@ -1,4 +1,4 @@
-;; erc-menu.el -- Menu-bar definitions for ERC  -*- lexical-binding: t; -*-
+;;; erc-menu.el --- Menu-bar definitions for ERC  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 2001-2002, 2004-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/erc/erc-page.el b/lisp/erc/erc-page.el
index 4c244b7..457e8cd 100644
--- a/lisp/erc/erc-page.el
+++ b/lisp/erc/erc-page.el
@@ -1,4 +1,4 @@
-;; erc-page.el - CTCP PAGE support for ERC  -*- lexical-binding: t; -*-
+;;; erc-page.el --- CTCP PAGE support for ERC  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 2002, 2004, 2006-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/erc/erc-replace.el b/lisp/erc/erc-replace.el
index d08d985..3f69c4c 100644
--- a/lisp/erc/erc-replace.el
+++ b/lisp/erc/erc-replace.el
@@ -1,4 +1,4 @@
-;; erc-replace.el -- wash and massage messages inserted into the buffer  -*- 
lexical-binding: t; -*-
+;;; erc-replace.el --- wash and massage messages inserted into the buffer  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 2001-2002, 2004, 2006-2021 Free Software Foundation,
 ;; Inc.
diff --git a/lisp/erc/erc-ring.el b/lisp/erc/erc-ring.el
index 28299ae..666fd58 100644
--- a/lisp/erc/erc-ring.el
+++ b/lisp/erc/erc-ring.el
@@ -1,4 +1,4 @@
-;; erc-ring.el -- Command history handling for erc using ring.el  -*- 
lexical-binding: t; -*-
+;;; erc-ring.el --- Command history handling for erc using ring.el  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 2001-2004, 2006-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/eshell/em-xtra.el b/lisp/eshell/em-xtra.el
index fa3218b..f58e1b8 100644
--- a/lisp/eshell/em-xtra.el
+++ b/lisp/eshell/em-xtra.el
@@ -23,13 +23,10 @@
 
 ;;; Code:
 
+(require 'cl-lib)
 (require 'esh-util)
 (eval-when-compile
   (require 'eshell))
-;; Strictly speaking, should only be needed at compile time.
-;; Require at run-time too to silence compiler.
-(require 'pcomplete)
-(require 'compile)
 
 ;; There are no items in this custom group, but eshell modules (ab)use
 ;; custom groups.
@@ -49,50 +46,45 @@ naturally accessible within Emacs."
 
 (defun eshell/expr (&rest args)
   "Implementation of expr, using the calc package."
-  (if (not (fboundp 'calc-eval))
-      (throw 'eshell-replace-command
-            (eshell-parse-command "*expr" (flatten-tree args)))
-    ;; to fool the byte-compiler...
-    (let ((func 'calc-eval))
-      (funcall func (eshell-flatten-and-stringify args)))))
+  (calc-eval (eshell-flatten-and-stringify args)))
 
 (defun eshell/substitute (&rest args)
-  "Easy front-end to `intersection', for comparing lists of strings."
-  (apply 'substitute (car args) (cadr args) :test 'equal
+  "Easy front-end to `cl-substitute', for comparing lists of strings."
+  (apply #'cl-substitute (car args) (cadr args) :test #'equal
         (cddr args)))
 
 (defun eshell/count (&rest args)
-  "Easy front-end to `intersection', for comparing lists of strings."
-  (apply 'count (car args) (cadr args) :test 'equal
+  "Easy front-end to `cl-count', for comparing lists of strings."
+  (apply #'cl-count (car args) (cadr args) :test #'equal
         (cddr args)))
 
 (defun eshell/mismatch (&rest args)
-  "Easy front-end to `intersection', for comparing lists of strings."
-  (apply 'mismatch (car args) (cadr args) :test 'equal
+  "Easy front-end to `cl-mismatch', for comparing lists of strings."
+  (apply #'cl-mismatch (car args) (cadr args) :test #'equal
         (cddr args)))
 
 (defun eshell/union (&rest args)
-  "Easy front-end to `intersection', for comparing lists of strings."
-  (apply 'union (car args) (cadr args) :test 'equal
+  "Easy front-end to `cl-union', for comparing lists of strings."
+  (apply #'cl-union (car args) (cadr args) :test #'equal
         (cddr args)))
 
 (defun eshell/intersection (&rest args)
-  "Easy front-end to `intersection', for comparing lists of strings."
-  (apply 'intersection (car args) (cadr args) :test 'equal
+  "Easy front-end to `cl-intersection', for comparing lists of strings."
+  (apply #'cl-intersection (car args) (cadr args) :test #'equal
         (cddr args)))
 
 (defun eshell/set-difference (&rest args)
-  "Easy front-end to `intersection', for comparing lists of strings."
-  (apply 'set-difference (car args) (cadr args) :test 'equal
+  "Easy front-end to `cl-set-difference', for comparing lists of strings."
+  (apply #'cl-set-difference (car args) (cadr args) :test #'equal
         (cddr args)))
 
 (defun eshell/set-exclusive-or (&rest args)
-  "Easy front-end to `intersection', for comparing lists of strings."
-  (apply 'set-exclusive-or (car args) (cadr args) :test 'equal
+  "Easy front-end to `cl-set-exclusive-or', for comparing lists of strings."
+  (apply #'cl-set-exclusive-or (car args) (cadr args) :test #'equal
         (cddr args)))
 
-(defalias 'eshell/ff 'find-name-dired)
-(defalias 'eshell/gf 'find-grep-dired)
+(defalias 'eshell/ff #'find-name-dired)
+(defalias 'eshell/gf #'find-grep-dired)
 
 (provide 'em-xtra)
 
diff --git a/lisp/expand.el b/lisp/expand.el
index d11ae7c..1b72201 100644
--- a/lisp/expand.el
+++ b/lisp/expand.el
@@ -484,7 +484,6 @@ This is used only in conjunction with `expand-add-abbrevs'."
 
 (provide 'expand)
 
-;; run load hooks
 (run-hooks 'expand-load-hook)
 
 ;;; expand.el ends here
diff --git a/lisp/filecache.el b/lisp/filecache.el
index 67d2939..62184e1 100644
--- a/lisp/filecache.el
+++ b/lisp/filecache.el
@@ -674,10 +674,6 @@ match REGEXP."
         (insert (nth 1 item) (nth 0 item) "\n"))
       (pop-to-buffer buf))))
 
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-;; Keybindings
-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
-
 (provide 'filecache)
 
 ;;; filecache.el ends here
diff --git a/lisp/filenotify.el b/lisp/filenotify.el
index 07871bb..4fc7f0a 100644
--- a/lisp/filenotify.el
+++ b/lisp/filenotify.el
@@ -505,7 +505,6 @@ DESCRIPTOR should be an object returned by 
`file-notify-add-watch'."
 ;;   due to the way events are propagated during idle time.  Note: This
 ;;   may be perfectly acceptable.
 
-;; The end:
 (provide 'filenotify)
 
 ;;; filenotify.el ends here
diff --git a/lisp/files.el b/lisp/files.el
index ac50866..0d4018d 100644
--- a/lisp/files.el
+++ b/lisp/files.el
@@ -7676,7 +7676,7 @@ as in \"og+rX-w\"."
     num-rights))
 
 (defun file-modes-number-to-symbolic (mode &optional filetype)
-  "Return a string describing a a file's MODE.
+  "Return a string describing a file's MODE.
 For instance, if MODE is #o700, then it produces `-rwx------'.
 FILETYPE if provided should be a character denoting the type of file,
 such as `?d' for a directory, or `?l' for a symbolic link and will override
diff --git a/lisp/gnus/gnus-cus.el b/lisp/gnus/gnus-cus.el
index 0852f8e..e7af94f 100644
--- a/lisp/gnus/gnus-cus.el
+++ b/lisp/gnus/gnus-cus.el
@@ -1102,8 +1102,6 @@ articles in the thread.
       (widget-setup)
       (buffer-enable-undo))))
 
-;;; The End:
-
 (provide 'gnus-cus)
 
 ;;; gnus-cus.el ends here
diff --git a/lisp/gnus/gnus-diary.el b/lisp/gnus/gnus-diary.el
index 64eb639..e2cbca9 100644
--- a/lisp/gnus/gnus-diary.el
+++ b/lisp/gnus/gnus-diary.el
@@ -32,11 +32,6 @@
 ;; gnus-diary is a utility toolkit used on top of the nndiary back end. It is
 ;; now fully documented in the Gnus manual.
 
-
-;; Bugs / Todo:
-;; ===========
-
-
 ;;; Code:
 
 (require 'nndiary)
diff --git a/lisp/gnus/gnus-group.el b/lisp/gnus/gnus-group.el
index 423b180..8c62c94 100644
--- a/lisp/gnus/gnus-group.el
+++ b/lisp/gnus/gnus-group.el
@@ -2462,7 +2462,8 @@ the ephemeral group."
             (with-temp-file tmpfile
               (mm-disable-multibyte)
               (dolist (id ids)
-                (let ((file (concat "~/.emacs.d/debbugs-cache/" id)))
+                (let ((file (expand-file-name id (locate-user-emacs-file
+                                                  "debbugs-cache"))))
                   (if (and (not gnus-plugged)
                            (file-exists-p file))
                       (insert-file-contents file)
diff --git a/lisp/gnus/gnus-notifications.el b/lisp/gnus/gnus-notifications.el
index a4d198b..8646904 100644
--- a/lisp/gnus/gnus-notifications.el
+++ b/lisp/gnus/gnus-notifications.el
@@ -1,4 +1,4 @@
-;; gnus-notifications.el -- Send notification on new message in Gnus  -*- 
lexical-binding: t; -*-
+;;; gnus-notifications.el --- Send notification on new message in Gnus  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/gnus/gnus-registry.el b/lisp/gnus/gnus-registry.el
index 6ac646f..11b6f7d 100644
--- a/lisp/gnus/gnus-registry.el
+++ b/lisp/gnus/gnus-registry.el
@@ -1298,8 +1298,6 @@ from your existing entries."
                 (gnus-registry-insert db k newv)))
       (registry-reindex db))))
 
-;; TODO: a few things
-
 (provide 'gnus-registry)
 
 ;;; gnus-registry.el ends here
diff --git a/lisp/gnus/legacy-gnus-agent.el b/lisp/gnus/legacy-gnus-agent.el
index 091e389..4f80089 100644
--- a/lisp/gnus/legacy-gnus-agent.el
+++ b/lisp/gnus/legacy-gnus-agent.el
@@ -1,4 +1,4 @@
-;;; gnus-agent.el --- Legacy unplugged support for Gnus  -*- lexical-binding: 
t; -*-
+;;; legacy-gnus-agent.el --- Legacy unplugged support for Gnus  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 2004-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/gnus/message.el b/lisp/gnus/message.el
index f3b830c..02db387 100644
--- a/lisp/gnus/message.el
+++ b/lisp/gnus/message.el
@@ -187,22 +187,26 @@ Otherwise, most addresses look like `angles', but they 
look like
 
 (defcustom message-syntax-checks
   (if message-insert-canlock '((sender . disabled)) nil)
-  ;; Guess this one shouldn't be easy to customize...
   "Controls what syntax checks should not be performed on outgoing posts.
 To disable checking of long signatures, for instance, add
  `(signature . disabled)' to this list.
 
 Don't touch this variable unless you really know what you're doing.
 
-Checks include `approved', `bogus-recipient', `continuation-headers',
-`control-chars', `empty', `existing-newsgroups', `from', `illegible-text',
-`invisible-text', `long-header-lines', `long-lines', `message-id',
-`multiple-headers', `new-text', `newsgroups', `quoting-style',
-`repeated-newsgroups', `reply-to', `sender', `sendsys', `shoot',
-`shorten-followup-to', `signature', `size', `subject', `subject-cmsg'
-and `valid-newsgroups'."
-  :group 'message-news
-  :type '(repeat sexp))                        ; Fixme: improve this
+See the Message manual for the meanings of the valid syntax check
+types."
+  :group 'message-headers
+  :link '(custom-manual "(message)Message Headers")
+  :type '(alist
+         :key-type symbol
+         :value-type (const disabled)
+         :options (approved bogus-recipient continuation-headers
+                   control-chars empty existing-newsgroups from illegible-text
+                   invisible-text long-header-lines long-lines message-id
+                   multiple-headers new-text newgroups quoting-style
+                   repeated-newsgroups reply-to sender sendsys shoot
+                   shorten-followup-to signature size subject subject-cmsg
+                   valid-newsgroups)))
 
 (defcustom message-required-headers '((optional . References)
                                      From)
diff --git a/lisp/gnus/mm-archive.el b/lisp/gnus/mm-archive.el
index 1ecceee..fdc83e1 100644
--- a/lisp/gnus/mm-archive.el
+++ b/lisp/gnus/mm-archive.el
@@ -108,4 +108,4 @@
 
 (provide 'mm-archive)
 
-;; mm-archive.el ends here
+;;; mm-archive.el ends here
diff --git a/lisp/gnus/nnselect.el b/lisp/gnus/nnselect.el
index e314e1d..5ac4c3a 100644
--- a/lisp/gnus/nnselect.el
+++ b/lisp/gnus/nnselect.el
@@ -968,7 +968,6 @@ Pass NO-PARSE on to the search engine."
     (gnus-group-make-search-group no-parse spec)))
 
 
-;; The end.
 (provide 'nnselect)
 
 ;;; nnselect.el ends here
diff --git a/lisp/gnus/spam-report.el b/lisp/gnus/spam-report.el
index 7d93f8a..a4234f8 100644
--- a/lisp/gnus/spam-report.el
+++ b/lisp/gnus/spam-report.el
@@ -378,4 +378,4 @@ Process queued spam reports."
 
 (provide 'spam-report)
 
-;;; spam-report.el ends here.
+;;; spam-report.el ends here
diff --git a/lisp/icomplete.el b/lisp/icomplete.el
index d5b6f76..91bbb60 100644
--- a/lisp/icomplete.el
+++ b/lisp/icomplete.el
@@ -837,7 +837,6 @@ matches exist."
 ;;;###autoload  (make-obsolete 'iswitchb-mode
 ;;;###autoload    "use `icomplete-mode' or `ido-mode' instead." "24.4"))
 
-;;;_* Provide
 (provide 'icomplete)
 
 ;;_* Local emacs vars.
diff --git a/lisp/info.el b/lisp/info.el
index dd7e16f..5efac6f 100644
--- a/lisp/info.el
+++ b/lisp/info.el
@@ -1,4 +1,4 @@
-;; info.el --- Info package for Emacs  -*- lexical-binding:t -*-
+;;; info.el --- Info package for Emacs  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1985-1986, 1992-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/isearch.el b/lisp/isearch.el
index 5efac4c..69fdc9d 100644
--- a/lisp/isearch.el
+++ b/lisp/isearch.el
@@ -2561,7 +2561,9 @@ Otherwise invoke whatever the calling mouse-2 command 
sequence
 is bound to outside of Isearch."
   (interactive "e")
   (let ((w (posn-window (event-start click)))
-        (binding (let ((overriding-terminal-local-map nil))
+        (binding (let ((overriding-terminal-local-map nil)
+                       ;; Key search depends on mode (bug#47755)
+                       (isearch-mode nil))
                    (key-binding (this-command-keys-vector) t))))
     (if (and (window-minibuffer-p w)
             (not (minibuffer-window-active-p w))) ; in echo area
diff --git a/lisp/language/burmese.el b/lisp/language/burmese.el
index 373f25a..ade3566 100644
--- a/lisp/language/burmese.el
+++ b/lisp/language/burmese.el
@@ -55,3 +55,5 @@
                 (vector "." 0 #'font-shape-gstring))))
   (set-char-table-range composition-function-table '(#x1000 . #x107F) elt)
   (set-char-table-range composition-function-table '(#xAA60 . #xAA7B) elt))
+
+;;; burmese.el ends here
diff --git a/lisp/language/cham.el b/lisp/language/cham.el
index 3aac986..cbb3556 100644
--- a/lisp/language/cham.el
+++ b/lisp/language/cham.el
@@ -43,3 +43,5 @@ an Austronesian language spoken by some 245,000 Chams
 in Vietnam and Cambodia.")))
 
 (provide 'cham)
+
+;;; cham.el ends here
diff --git a/lisp/language/khmer.el b/lisp/language/khmer.el
index 6f08e60..471af40 100644
--- a/lisp/language/khmer.el
+++ b/lisp/language/khmer.el
@@ -35,4 +35,4 @@
   (set-char-table-range composition-function-table '(#x1780 . #x17FF) val)
   (set-char-table-range composition-function-table '(#x19E0 . #x19FF) val))
 
-;; khmer.el ends here
+;;; khmer.el ends here
diff --git a/lisp/language/sinhala.el b/lisp/language/sinhala.el
index 99a104e..89392ad 100644
--- a/lisp/language/sinhala.el
+++ b/lisp/language/sinhala.el
@@ -45,4 +45,4 @@
         "[\u0D80-\u0DFF]")
        0 #'font-shape-gstring)))
 
-;; sinhala.el ends here
+;;; sinhala.el ends here
diff --git a/lisp/language/tai-viet.el b/lisp/language/tai-viet.el
index 4549b11..366c392 100644
--- a/lisp/language/tai-viet.el
+++ b/lisp/language/tai-viet.el
@@ -56,3 +56,5 @@ The language name is spelled as \"ꪁꪫꪱꪣ ꪼꪕ\", and the script 
name is
 spelled as \"ꪎꪳ ꪼꪕ\".")))
 
 (provide 'tai-viet)
+
+;;; tai-viet.el ends here
diff --git a/lisp/language/thai-word.el b/lisp/language/thai-word.el
index ff1e802..5d0389c 100644
--- a/lisp/language/thai-word.el
+++ b/lisp/language/thai-word.el
@@ -1,4 +1,4 @@
-;;; thai-word.el -- find Thai word boundaries  -*- lexical-binding: t; -*-
+;;; thai-word.el --- find Thai word boundaries  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 
2010, 2011
 ;;   National Institute of Advanced Industrial Science and Technology (AIST)
@@ -11074,4 +11074,4 @@ With argument, do this that many times."
 ;; coding: utf-8
 ;; End:
 
-;; end of thai-word.el
+;;; thai-word.el ends here
diff --git a/lisp/language/tv-util.el b/lisp/language/tv-util.el
index 1a530d3..207d76f 100644
--- a/lisp/language/tv-util.el
+++ b/lisp/language/tv-util.el
@@ -136,5 +136,6 @@
     (if (looking-at tai-viet-re)
        (tai-viet-compose-region from (match-end 0)))))
 
-;;
 (provide 'tai-viet-util)
+
+;;; tv-util.el ends here
diff --git a/lisp/leim/quail/croatian.el b/lisp/leim/quail/croatian.el
index 08f1e47..7402b81 100644
--- a/lisp/leim/quail/croatian.el
+++ b/lisp/leim/quail/croatian.el
@@ -1,4 +1,4 @@
-;;; croatian.el -- Quail package for inputting Croatian  -*-coding: utf-8; 
lexical-binding:t -*-
+;;; croatian.el --- Quail package for inputting Croatian  -*-coding: utf-8; 
lexical-binding:t -*-
 
 ;; Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/leim/quail/hebrew.el b/lisp/leim/quail/hebrew.el
index fc6bb80..28b2eb3 100644
--- a/lisp/leim/quail/hebrew.el
+++ b/lisp/leim/quail/hebrew.el
@@ -1,4 +1,4 @@
-;; hebrew.el --- Quail package for inputting Hebrew characters  -*- coding: 
utf-8; lexical-binding: t -*-
+;;; hebrew.el --- Quail package for inputting Hebrew characters  -*- coding: 
utf-8; lexical-binding: t -*-
 
 ;; Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
 ;;   2008, 2009, 2010, 2011
diff --git a/lisp/leim/quail/persian.el b/lisp/leim/quail/persian.el
index 4157f88..cb1f6e3 100644
--- a/lisp/leim/quail/persian.el
+++ b/lisp/leim/quail/persian.el
@@ -1,4 +1,4 @@
-;;; persian.el  --- Quail package for inputting Persian/Farsi keyboard -*- 
coding: utf-8; lexical-binding: t -*-
+;;; persian.el --- Quail package for inputting Persian/Farsi keyboard  -*- 
coding: utf-8; lexical-binding: t -*-
 
 ;; Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/ls-lisp.el b/lisp/ls-lisp.el
index 3721e86..24d49ea 100644
--- a/lisp/ls-lisp.el
+++ b/lisp/ls-lisp.el
@@ -28,7 +28,7 @@
 ;; OVERVIEW ==========================================================
 
 ;; This file advises the function `insert-directory' to implement it
-;; directly from Emacs lisp, without running ls in a subprocess.
+;; directly from Emacs Lisp, without running ls in a subprocess.
 ;; This is useful if you don't have ls installed (ie, on MS Windows).
 
 ;; This function can use regexps instead of shell wildcards.  If you
diff --git a/lisp/mail/rmail-spam-filter.el b/lisp/mail/rmail-spam-filter.el
index d833685..fbac9e0 100644
--- a/lisp/mail/rmail-spam-filter.el
+++ b/lisp/mail/rmail-spam-filter.el
@@ -555,4 +555,4 @@ checks to see if the old format is used, and updates it if 
necessary."
 
 (provide 'rmail-spam-filter)
 
-;;; rmail-spam-filter ends here
+;;; rmail-spam-filter.el ends here
diff --git a/lisp/mail/uudecode.el b/lisp/mail/uudecode.el
index fdd402e..026356e 100644
--- a/lisp/mail/uudecode.el
+++ b/lisp/mail/uudecode.el
@@ -1,4 +1,4 @@
-;;; uudecode.el -- elisp native uudecode  -*- lexical-binding:t -*-
+;;; uudecode.el --- elisp native uudecode  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1998-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/mh-e/mh-acros.el b/lisp/mh-e/mh-acros.el
index dd953ee..8fdcf3c 100644
--- a/lisp/mh-e/mh-acros.el
+++ b/lisp/mh-e/mh-acros.el
@@ -36,8 +36,6 @@
 ;; because it's pointless to compile a file full of macros. But we
 ;; kept the name.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'cl-lib)
diff --git a/lisp/mh-e/mh-alias.el b/lisp/mh-e/mh-alias.el
index 67c019a..415e984 100644
--- a/lisp/mh-e/mh-alias.el
+++ b/lisp/mh-e/mh-alias.el
@@ -24,8 +24,6 @@
 
 ;;; Commentary:
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-buffers.el b/lisp/mh-e/mh-buffers.el
index a32f61c..ef21fdb 100644
--- a/lisp/mh-e/mh-buffers.el
+++ b/lisp/mh-e/mh-buffers.el
@@ -24,8 +24,6 @@
 
 ;;; Commentary:
 
-;;; Change Log:
-
 ;;; Code:
 
 ;; The names of ephemeral buffers have a " *mh-" prefix (so that they
diff --git a/lisp/mh-e/mh-comp.el b/lisp/mh-e/mh-comp.el
index c1cd6c1..b64bbfb 100644
--- a/lisp/mh-e/mh-comp.el
+++ b/lisp/mh-e/mh-comp.el
@@ -29,8 +29,6 @@
 ;; that are used to send the mail. Other that those, functions that
 ;; are needed in mh-letter.el should be found there.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-compat.el b/lisp/mh-e/mh-compat.el
index 0363c5a..ade80e8 100644
--- a/lisp/mh-e/mh-compat.el
+++ b/lisp/mh-e/mh-compat.el
@@ -23,8 +23,6 @@
 
 ;;; Commentary:
 
-;;; Change Log:
-
 ;;; Code:
 
 ;; This is a good place to gather code that is used for compatibility
diff --git a/lisp/mh-e/mh-folder.el b/lisp/mh-e/mh-folder.el
index 2e28806..ce77f9c 100644
--- a/lisp/mh-e/mh-folder.el
+++ b/lisp/mh-e/mh-folder.el
@@ -25,8 +25,6 @@
 
 ;; Mode for browsing folders
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-funcs.el b/lisp/mh-e/mh-funcs.el
index 38ba431..0e5ffc9 100644
--- a/lisp/mh-e/mh-funcs.el
+++ b/lisp/mh-e/mh-funcs.el
@@ -30,8 +30,6 @@
 ;; small support routines are needed, place them with the function;
 ;; otherwise, create a separate section for them.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-gnus.el b/lisp/mh-e/mh-gnus.el
index ac46cc6..cc60f7b 100644
--- a/lisp/mh-e/mh-gnus.el
+++ b/lisp/mh-e/mh-gnus.el
@@ -24,8 +24,6 @@
 
 ;;; Commentary:
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-identity.el b/lisp/mh-e/mh-identity.el
index aeab049..ceede0d 100644
--- a/lisp/mh-e/mh-identity.el
+++ b/lisp/mh-e/mh-identity.el
@@ -33,8 +33,6 @@
 ;; in MH-Letter mode. The command `mh-insert-identity' can be used
 ;; to manually insert an identity.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-inc.el b/lisp/mh-e/mh-inc.el
index 6a29195..83cfe4f 100644
--- a/lisp/mh-e/mh-inc.el
+++ b/lisp/mh-e/mh-inc.el
@@ -28,8 +28,6 @@
 ;; inc can also be used to incorporate mail from multiple spool files
 ;; into separate folders. See "C-h v mh-inc-spool-list".
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-junk.el b/lisp/mh-e/mh-junk.el
index 5a40794..e50bf8d 100644
--- a/lisp/mh-e/mh-junk.el
+++ b/lisp/mh-e/mh-junk.el
@@ -26,8 +26,6 @@
 
 ;; Spam handling in MH-E.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-letter.el b/lisp/mh-e/mh-letter.el
index 5979018..ae5b80d 100644
--- a/lisp/mh-e/mh-letter.el
+++ b/lisp/mh-e/mh-letter.el
@@ -31,8 +31,6 @@
 ;; mh-utils.el. That will help prevent the loading of this file until
 ;; a message is actually composed.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-limit.el b/lisp/mh-e/mh-limit.el
index 08f1b40..39cf7c5 100644
--- a/lisp/mh-e/mh-limit.el
+++ b/lisp/mh-e/mh-limit.el
@@ -25,8 +25,6 @@
 
 ;; "Poor man's threading" by psg.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-mime.el b/lisp/mh-e/mh-mime.el
index fec2293..ef70252 100644
--- a/lisp/mh-e/mh-mime.el
+++ b/lisp/mh-e/mh-mime.el
@@ -36,8 +36,6 @@
 ;;   MIME option to mh-forward command to move to content-description
 ;;   insertion point.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-print.el b/lisp/mh-e/mh-print.el
index d084cf6..2074ff6 100644
--- a/lisp/mh-e/mh-print.el
+++ b/lisp/mh-e/mh-print.el
@@ -24,8 +24,6 @@
 
 ;;; Commentary:
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-scan.el b/lisp/mh-e/mh-scan.el
index f00ab22..1504979 100644
--- a/lisp/mh-e/mh-scan.el
+++ b/lisp/mh-e/mh-scan.el
@@ -27,8 +27,6 @@
 ;; This file contains constants and a few functions for interpreting
 ;; scan lines.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-search.el b/lisp/mh-e/mh-search.el
index cb8f8e3..b3a250b 100644
--- a/lisp/mh-e/mh-search.el
+++ b/lisp/mh-e/mh-search.el
@@ -1,4 +1,4 @@
-;;; mh-search  ---  MH-Search mode  -*- lexical-binding: t; -*-
+;;; mh-search.el --- MH-Search mode  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1993, 1995, 2001-2021 Free Software Foundation, Inc.
 
@@ -39,8 +39,6 @@
 ;;      documentation will direct you to the specific instructions for
 ;;      your particular searcher.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
@@ -1945,4 +1943,4 @@ folder buffer."
 ;; sentence-end-double-space: nil
 ;; End:
 
-;;; mh-search ends here
+;;; mh-search.el ends here
diff --git a/lisp/mh-e/mh-seq.el b/lisp/mh-e/mh-seq.el
index 9b9675c..9cdf39f 100644
--- a/lisp/mh-e/mh-seq.el
+++ b/lisp/mh-e/mh-seq.el
@@ -26,8 +26,6 @@
 ;; Sequences are stored in the alist `mh-seq-list' in the form:
 ;;     ((seq-name msgs ...) (seq-name msgs ...) ...)
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-show.el b/lisp/mh-e/mh-show.el
index cb9819f..aa97f5c 100644
--- a/lisp/mh-e/mh-show.el
+++ b/lisp/mh-e/mh-show.el
@@ -26,8 +26,6 @@
 
 ;; Mode for showing messages.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
@@ -187,7 +185,7 @@ Sets the current buffer to the show buffer."
     (set-buffer folder)
     ;; When Gnus uses external displayers it has to keep handles longer. So
     ;; we will delete these handles when mh-quit is called on the folder. It
-    ;; would be nicer if there are weak pointers in emacs lisp, then we could
+    ;; would be nicer if there are weak pointers in Emacs Lisp, then we could
     ;; get the garbage collector to do this for us.
     (unless (mh-buffer-data)
       (setf (mh-buffer-data) (mh-make-buffer-data)))
diff --git a/lisp/mh-e/mh-speed.el b/lisp/mh-e/mh-speed.el
index b2deacf..3af840c 100644
--- a/lisp/mh-e/mh-speed.el
+++ b/lisp/mh-e/mh-speed.el
@@ -26,8 +26,6 @@
 
 ;; Future versions should only use flists.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-thread.el b/lisp/mh-e/mh-thread.el
index 01b6863..89b0dbd 100644
--- a/lisp/mh-e/mh-thread.el
+++ b/lisp/mh-e/mh-thread.el
@@ -69,8 +69,6 @@
 ;;  (5) Better canonicalizing for message identifier and subject
 ;;      strings.
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-tool-bar.el b/lisp/mh-e/mh-tool-bar.el
index 40a430b..94aa8dd 100644
--- a/lisp/mh-e/mh-tool-bar.el
+++ b/lisp/mh-e/mh-tool-bar.el
@@ -24,8 +24,6 @@
 
 ;;; Commentary:
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-utils.el b/lisp/mh-e/mh-utils.el
index e73c1db..8e900dc 100644
--- a/lisp/mh-e/mh-utils.el
+++ b/lisp/mh-e/mh-utils.el
@@ -24,8 +24,6 @@
 
 ;;; Commentary:
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/mh-e/mh-xface.el b/lisp/mh-e/mh-xface.el
index 0b53829..d4d5c5c 100644
--- a/lisp/mh-e/mh-xface.el
+++ b/lisp/mh-e/mh-xface.el
@@ -23,8 +23,6 @@
 
 ;;; Commentary:
 
-;;; Change Log:
-
 ;;; Code:
 
 (require 'mh-e)
diff --git a/lisp/misearch.el b/lisp/misearch.el
index 1f0dd31..335efb9 100644
--- a/lisp/misearch.el
+++ b/lisp/misearch.el
@@ -206,7 +206,7 @@ search status stack."
      (multi-isearch-pop-state cmd ,(current-buffer))))
 
 (defun multi-isearch-pop-state (_cmd buffer)
-  "Restore the multiple buffers search state.
+  "Restore the multiple buffers search state in BUFFER.
 Switch to the buffer restored from the search status stack."
   (unless (equal buffer (current-buffer))
     (switch-to-buffer (setq multi-isearch-current-buffer buffer))))
diff --git a/lisp/net/ange-ftp.el b/lisp/net/ange-ftp.el
index 86b5d44..04ea809 100644
--- a/lisp/net/ange-ftp.el
+++ b/lisp/net/ange-ftp.el
@@ -6258,10 +6258,6 @@ be recognized automatically (they are all valid BS2000 
hosts too)."
 ;; ange-ftp-bs2000-file-name-as-directory
 ;; ange-ftp-bs2000-make-compressed-filename
 ;; ange-ftp-bs2000-file-name-sans-versions
-
-;;;; ------------------------------------------------------------
-;;;; Finally provide package.
-;;;; ------------------------------------------------------------
 
 (provide 'ange-ftp)
 
diff --git a/lisp/net/newst-ticker.el b/lisp/net/newst-ticker.el
index 2f76470..8cfafb5 100644
--- a/lisp/net/newst-ticker.el
+++ b/lisp/net/newst-ticker.el
@@ -1,4 +1,4 @@
-;; newst-ticker.el --- mode line ticker for newsticker.  -*- lexical-binding: 
t; -*-
+;;; newst-ticker.el --- mode line ticker for newsticker.  -*- lexical-binding: 
t; -*-
 
 ;; Copyright (C) 2003-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/net/rcirc.el b/lisp/net/rcirc.el
index 7bb8ca6..7251640 100644
--- a/lisp/net/rcirc.el
+++ b/lisp/net/rcirc.el
@@ -1166,9 +1166,10 @@ If ALL is non-nil, update prompts in all IRC buffers."
        (or (eq (aref target 0) ?#)
            (eq (aref target 0) ?&))))
 
-(defcustom rcirc-log-directory "~/.emacs.d/rcirc-log"
+(defcustom rcirc-log-directory (locate-user-emacs-file "rcirc-log")
   "Directory to keep IRC logfiles."
-  :type 'directory)
+  :type 'directory
+  :version "28.1")
 
 (defcustom rcirc-log-flag nil
   "Non-nil means log IRC activity to disk.
diff --git a/lisp/net/secrets.el b/lisp/net/secrets.el
index 94db318..4102b9d 100644
--- a/lisp/net/secrets.el
+++ b/lisp/net/secrets.el
@@ -957,3 +957,5 @@ to their attributes."
 ;; * Check, whether the dh-ietf1024-aes128-cbc-pkcs7 algorithm can be
 ;;   used for the transfer of the secrets.  Currently, we use the
 ;;   plain algorithm.
+
+;;; secrets.el ends here
diff --git a/lisp/net/sieve-manage.el b/lisp/net/sieve-manage.el
index c4d6ec4..5dad5f4 100644
--- a/lisp/net/sieve-manage.el
+++ b/lisp/net/sieve-manage.el
@@ -580,4 +580,4 @@ to local variable `sieve-manage-capability'."
 
 (provide 'sieve-manage)
 
-;; sieve-manage.el ends here
+;;; sieve-manage.el ends here
diff --git a/lisp/net/sieve-mode.el b/lisp/net/sieve-mode.el
index 966f0f0..0e8fdc0 100644
--- a/lisp/net/sieve-mode.el
+++ b/lisp/net/sieve-mode.el
@@ -206,4 +206,4 @@ Turning on Sieve mode runs `sieve-mode-hook'."
 
 (provide 'sieve-mode)
 
-;; sieve-mode.el ends here
+;;; sieve-mode.el ends here
diff --git a/lisp/net/sieve.el b/lisp/net/sieve.el
index 595d633..6d571a0 100644
--- a/lisp/net/sieve.el
+++ b/lisp/net/sieve.el
@@ -379,4 +379,4 @@ Used to bracket operations which move point in the 
sieve-buffer."
 
 (provide 'sieve)
 
-;; sieve.el ends here
+;;; sieve.el ends here
diff --git a/lisp/net/tramp-cmds.el b/lisp/net/tramp-cmds.el
index d208f0e..6342cf5 100644
--- a/lisp/net/tramp-cmds.el
+++ b/lisp/net/tramp-cmds.el
@@ -472,6 +472,48 @@ For details, see `tramp-rename-files'."
 (function-put
  #'tramp-rename-these-files 'completion-predicate #'tramp-command-completion-p)
 
+;; This function takes action since Emacs 28.1, when
+;; `read-extended-command-predicate' is set to
+;; `command-completion-default-include-p'.
+;;;###tramp-autoload
+(defun tramp-recompile-elpa-command-completion-p (_symbol _buffer)
+  "A predicate for `tramp-recompile-elpa'.
+It is completed by \"M-x TAB\" only if package.el is loaded, and
+Tramp is an installed ELPA package."
+  ;; We cannot apply `package-installed-p', this would also return the
+  ;; builtin package.
+  (tramp-compat-funcall 'package--user-installed-p 'tramp))
+
+;;;###tramp-autoload
+(defun tramp-recompile-elpa ()
+  "Recompile the installed Tramp ELPA package.
+This is needed if there are compatibility problems."
+  ;; (declare (completion tramp-recompile-elpa-command-completion-p))
+  (interactive)
+  ;; We expect just one Tramp package is installed.
+  (when-let
+      ((dir (tramp-compat-funcall
+            'package-desc-dir
+            (car (alist-get 'tramp (bound-and-true-p package-alist))))))
+    (dolist (elc (directory-files dir 'full "\\.elc$"))
+      (delete-file elc))
+    (with-current-buffer (get-buffer-create byte-compile-log-buffer)
+      (let ((inhibit-read-only t))
+       (compilation-mode)
+       (goto-char (point-max))
+       (insert "\f\n")
+       (call-process
+        (expand-file-name invocation-name invocation-directory) nil t t
+        "-Q" "-batch" "-L" dir
+        "--eval" (format "(byte-recompile-directory %S 0 t)" dir))
+       (message "Package `tramp' recompiled.")))))
+
+;; Starting with Emacs 28.1, this can be replaced by the "(declare ...)" form.
+;;;###tramp-autoload
+(function-put
+ #'tramp-recompile-elpa 'completion-predicate
+ #'tramp-recompile-elpa-command-completion-p)
+
 ;; Tramp version is useful in a number of situations.
 
 ;;;###tramp-autoload
diff --git a/lisp/net/tramp-sh.el b/lisp/net/tramp-sh.el
index 0e6a2bb..df64d13 100644
--- a/lisp/net/tramp-sh.el
+++ b/lisp/net/tramp-sh.el
@@ -2218,7 +2218,7 @@ The method used must be an out-of-band method."
         (t2 (tramp-tramp-file-p newname))
         (orig-vec (tramp-dissect-file-name (if t1 filename newname)))
         copy-program copy-args copy-env copy-keep-date listener spec
-        options source target remote-copy-program remote-copy-args)
+        options source target remote-copy-program remote-copy-args p)
 
     (with-parsed-tramp-file-name (if t1 filename newname) nil
       (if (and t1 t2)
@@ -2253,10 +2253,10 @@ The method used must be an out-of-band method."
                        #'identity)
                      (if t1
                          (tramp-make-copy-program-file-name v)
-                       (tramp-unquote-shell-quote-argument filename)))
+                       (tramp-compat-file-name-unquote filename)))
              target (if t2
                         (tramp-make-copy-program-file-name v)
-                      (tramp-unquote-shell-quote-argument newname)))
+                      (tramp-compat-file-name-unquote newname)))
 
        ;; Check for user.  There might be an interactive setting.
        (setq user (or (tramp-file-name-user v)
@@ -2288,6 +2288,13 @@ The method used must be an out-of-band method."
              ;; keep-date argument is non-nil), or a replacement for
              ;; the whole keep-date sublist.
              (delete " " (apply #'tramp-expand-args v 'tramp-copy-args spec))
+             ;; `tramp-ssh-controlmaster-options' is a string instead
+             ;; of a list.  Unflatten it.
+             copy-args
+             (tramp-compat-flatten-tree
+              (mapcar
+               (lambda (x) (if (string-match-p " " x) (split-string x) x))
+               copy-args))
              copy-env (apply #'tramp-expand-args v 'tramp-copy-env spec)
              remote-copy-program
              (tramp-get-method-parameter v 'tramp-remote-copy-program)
@@ -2349,31 +2356,26 @@ The method used must be an out-of-band method."
                  copy-args
                  (if remote-copy-program
                      (list (if t1 (concat ">" target) (concat "<" source)))
-                   (list source target))))
-
-               ;; Use an asynchronous process.  By this, password can
-               ;; be handled.  We don't set a timeout, because the
-               ;; copying of large files can last longer than 60 secs.
-               (let* ((command
-                       (mapconcat
-                        #'identity (append (list copy-program) copy-args)
-                        " "))
-                      (p (let ((default-directory
-                                 (tramp-compat-temporary-file-directory)))
-                           (start-process-shell-command
-                            (tramp-get-connection-name v)
-                            (tramp-get-connection-buffer v)
-                            command))))
-                 (tramp-message orig-vec 6 "%s" command)
-                 (process-put p 'vector orig-vec)
-                 (process-put p 'adjust-window-size-function #'ignore)
-                 (set-process-query-on-exit-flag p nil)
-
-                 ;; We must adapt `tramp-local-end-of-line' for
-                 ;; sending the password.
-                 (let ((tramp-local-end-of-line tramp-rsh-end-of-line))
-                   (tramp-process-actions
-                    p v nil tramp-actions-copy-out-of-band))))
+                   (list source target)))
+                ;; Use an asynchronous process.  By this, password
+                ;; can be handled.  We don't set a timeout, because
+                ;; the copying of large files can last longer than 60
+                ;; secs.
+                p (apply
+                   #'start-process
+                   (tramp-get-connection-name v)
+                   (tramp-get-connection-buffer v)
+                   copy-program copy-args))
+               (tramp-message orig-vec 6 "%s" (string-join (process-command p) 
" "))
+               (process-put p 'vector orig-vec)
+               (process-put p 'adjust-window-size-function #'ignore)
+               (set-process-query-on-exit-flag p nil)
+
+               ;; We must adapt `tramp-local-end-of-line' for
+               ;; sending the password.
+               (let ((tramp-local-end-of-line tramp-rsh-end-of-line))
+                 (tramp-process-actions
+                  p v nil tramp-actions-copy-out-of-band)))
 
            ;; Reset the transfer process properties.
            (tramp-flush-connection-property v "process-name")
@@ -2921,15 +2923,19 @@ alternative implementation will be used."
                        ;; until the process is deleted.
                        (when (bufferp stderr)
                          (with-current-buffer stderr
-                           (insert-file-contents-literally remote-tmpstderr))
+                           ;; There's a mysterious error, see
+                           ;; <https://github.com/joaotavora/eglot/issues/662>.
+                           (ignore-errors
+                             (insert-file-contents-literally 
remote-tmpstderr)))
                          ;; Delete tmpstderr file.
                          (add-function
                           :after (process-sentinel p)
                           (lambda (_proc _msg)
                             (when (file-exists-p remote-tmpstderr)
                               (with-current-buffer stderr
-                                (insert-file-contents-literally
-                                 remote-tmpstderr nil nil nil 'replace))
+                                (ignore-errors
+                                  (insert-file-contents-literally
+                                   remote-tmpstderr nil nil nil 'replace)))
                               (delete-file remote-tmpstderr)))))
                        ;; Return process.
                        p)))
@@ -5221,15 +5227,17 @@ Return ATTR."
         (directory-file-name (tramp-file-name-unquote-localname vec))))
     (when (string-match-p tramp-ipv6-regexp host)
       (setq host (format "[%s]" host)))
+    ;; This does not work yet for MS Windows scp, if there are
+    ;; characters to be quoted.  Win32 OpenSSH 7.9 is said to support
+    ;; this, see
+    ;; 
<https://github.com/PowerShell/Win32-OpenSSH/releases/tag/v7.9.0.0p1-Beta>
     (unless (string-match-p "ftp$" method)
       (setq localname (tramp-shell-quote-argument localname)))
     (cond
      ((tramp-get-method-parameter vec 'tramp-remote-copy-program)
       localname)
-     ((not (zerop (length user)))
-      (format
-       "%s@%s:%s" user host (tramp-unquote-shell-quote-argument localname)))
-     (t (format "%s:%s" host (tramp-unquote-shell-quote-argument 
localname))))))
+     ((zerop (length user)) (format "%s:%s" host localname))
+     (t (format "%s@%s:%s" user host localname)))))
 
 (defun tramp-method-out-of-band-p (vec size)
   "Return t if this is an out-of-band method, nil otherwise."
diff --git a/lisp/net/tramp.el b/lisp/net/tramp.el
index 8da94ec..a411aaf 100644
--- a/lisp/net/tramp.el
+++ b/lisp/net/tramp.el
@@ -3888,8 +3888,7 @@ substitution.  SPEC-LIST is a list of char/value pairs 
used for
         (or (not (stringp stderr)) (not (tramp-tramp-file-p stderr))))))
 
 (defun tramp-handle-make-process (&rest args)
-  "An alternative `make-process' implementation for Tramp files.
-It does not support `:stderr'."
+  "An alternative `make-process' implementation for Tramp files."
   (when args
     (with-parsed-tramp-file-name (expand-file-name default-directory) nil
       (let ((default-directory (tramp-compat-temporary-file-directory))
diff --git a/lisp/notifications.el b/lisp/notifications.el
index b439d82..ebd74dd 100644
--- a/lisp/notifications.el
+++ b/lisp/notifications.el
@@ -420,3 +420,5 @@ version this library is compliant with."
                      notifications-get-server-information-method)))
 
 (provide 'notifications)
+
+;;; notifications.el ends here
diff --git a/lisp/nxml/rng-cmpct.el b/lisp/nxml/rng-cmpct.el
index 3d4b9f8..1314ade 100644
--- a/lisp/nxml/rng-cmpct.el
+++ b/lisp/nxml/rng-cmpct.el
@@ -922,4 +922,4 @@ Current token after parse is token following ]."
 
 (provide 'rng-cmpct)
 
-;;; rng-cmpct.el
+;;; rng-cmpct.el ends here
diff --git a/lisp/nxml/xmltok.el b/lisp/nxml/xmltok.el
index 8f89598..9824eeb 100644
--- a/lisp/nxml/xmltok.el
+++ b/lisp/nxml/xmltok.el
@@ -324,8 +324,8 @@ and VALUE-END, otherwise a STRING giving the value."
            (setq strs (cons (car arg) strs))
            (setq names (cons (cdr arg) names)))
          (setq args (cdr args))))
-      (cons (apply 'concat (nreverse strs))
-           (apply 'append (nreverse names))))))
+      (cons (apply #'concat (nreverse strs))
+           (apply #'append (nreverse names))))))
 
 (eval-when-compile
   ;; Make a symbolic group named NAME from the regexp R.
@@ -338,7 +338,7 @@ and VALUE-END, otherwise a STRING giving the value."
           (cons (concat "\\(" (car ,sym) "\\)") (cons ',name (cdr ,sym)))))))
 
   (defun xmltok-p (&rest r) (xmltok+ "\\(?:"
-                                    (apply 'xmltok+ r)
+                                    (apply #'xmltok+ r)
                                     "\\)"))
 
   ;; Get the group index of ELEM in a LIST of symbols.
@@ -372,22 +372,23 @@ and VALUE-END, otherwise a STRING giving the value."
   (defmacro xmltok-defregexp (sym r)
     `(defalias ',sym
        (let ((r ,r))
-        `(macro lambda (action &optional group-name)
-                (cond ((eq action 'regexp)
-                       ,(car r))
-                      ((or (eq action 'start) (eq action 'beginning))
-                       (list 'match-beginning (xmltok-get-index group-name
-                                                                ',(cdr r))))
-                      ((eq action 'end)
-                       (list 'match-end (xmltok-get-index group-name
-                                                          ',(cdr r))))
-                      ((eq action 'string)
-                       (list 'match-string
-                             (xmltok-get-index group-name ',(cdr r))))
-                      ((eq action 'string-no-properties)
-                       (list 'match-string-no-properties
-                             (xmltok-get-index group-name ',(cdr r))))
-                      (t (error "Invalid action: %s" action))))))))
+        `(macro
+          . ,(lambda (action &optional group-name)
+               (cond ((eq action 'regexp)
+                      (car r))
+                     ((or (eq action 'start) (eq action 'beginning))
+                      (list 'match-beginning (xmltok-get-index group-name
+                                                               (cdr r))))
+                     ((eq action 'end)
+                      (list 'match-end (xmltok-get-index group-name
+                                                         (cdr r))))
+                     ((eq action 'string)
+                      (list 'match-string
+                            (xmltok-get-index group-name (cdr r))))
+                     ((eq action 'string-no-properties)
+                      (list 'match-string-no-properties
+                            (xmltok-get-index group-name (cdr r))))
+                     (t (error "Invalid action: %s" action)))))))))
 
 
 (eval-when-compile
@@ -878,7 +879,7 @@ and VALUE-END, otherwise a STRING giving the value."
                                (cons " " value-parts)))))
               (< (point) end))))
     (when well-formed
-      (aset att 5 (apply 'concat (nreverse value-parts))))
+      (aset att 5 (apply #'concat (nreverse value-parts))))
     (aset att 6 (nreverse refs))))
 
 (defun xmltok-scan-after-amp (entity-handler)
@@ -1333,7 +1334,7 @@ If LIMIT is non-nil, then do not consider characters 
beyond LIMIT."
                 t))))
     (if (not well-formed)
        nil
-      (apply 'concat
+      (apply #'concat
             (nreverse (cons (buffer-substring-no-properties start lim)
                             value-parts))))))
 
@@ -1358,7 +1359,7 @@ If LIMIT is non-nil, then do not consider characters 
beyond LIMIT."
 
 (defun xmltok-require-next-token (&rest types)
   (xmltok-next-prolog-token)
-  (apply 'xmltok-require-token types))
+  (apply #'xmltok-require-token types))
 
 (defun xmltok-require-token (&rest types)
   ;; XXX Generate a more helpful error message
diff --git a/lisp/obsolete/fast-lock.el b/lisp/obsolete/fast-lock.el
index baed8be..960233d 100644
--- a/lisp/obsolete/fast-lock.el
+++ b/lisp/obsolete/fast-lock.el
@@ -752,8 +752,6 @@ See `fast-lock-get-face-properties'."
 (unless (assq 'fast-lock-mode minor-mode-alist)
   (setq minor-mode-alist (append minor-mode-alist '((fast-lock-mode nil)))))
 
-;; Provide ourselves:
-
 (provide 'fast-lock)
 
 ;;; fast-lock.el ends here
diff --git a/lisp/obsolete/info-edit.el b/lisp/obsolete/info-edit.el
index c53616d..1995897 100644
--- a/lisp/obsolete/info-edit.el
+++ b/lisp/obsolete/info-edit.el
@@ -1,4 +1,4 @@
-;; info-edit.el --- Editing info files  -*- lexical-binding:t -*-
+;;; info-edit.el --- Editing info files  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1985-1986, 1992-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/obsolete/lazy-lock.el b/lisp/obsolete/lazy-lock.el
index 34bf85f..13f14aa 100644
--- a/lisp/obsolete/lazy-lock.el
+++ b/lisp/obsolete/lazy-lock.el
@@ -1016,8 +1016,6 @@ verbosity is controlled via the variable 
`lazy-lock-stealth-verbose'."
 (unless (assq 'lazy-lock-mode minor-mode-alist)
   (setq minor-mode-alist (append minor-mode-alist '((lazy-lock-mode nil)))))
 
-;; Provide ourselves:
-
 (provide 'lazy-lock)
 
 ;; Local Variables:
diff --git a/lisp/obsolete/nnir.el b/lisp/obsolete/nnir.el
index f2ea5c6..40a8ec5 100644
--- a/lisp/obsolete/nnir.el
+++ b/lisp/obsolete/nnir.el
@@ -1339,7 +1339,6 @@ Query for the specs, or use SPECS."
 
 (define-obsolete-function-alias 'nnir-get-active #'gnus-server-get-active 
"28.1")
 
-;; The end.
 (provide 'nnir)
 
 ;;; nnir.el ends here
diff --git a/lisp/obsolete/old-emacs-lock.el b/lisp/obsolete/old-emacs-lock.el
index 90ff93e..ce4c60e 100644
--- a/lisp/obsolete/old-emacs-lock.el
+++ b/lisp/obsolete/old-emacs-lock.el
@@ -1,4 +1,4 @@
-;;; emacs-lock.el --- prevents you from exiting Emacs if a buffer is locked  
-*- lexical-binding: t; -*-
+;;; old-emacs-lock.el --- prevents you from exiting Emacs if a buffer is 
locked  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1994, 1997, 2001-2021 Free Software Foundation, Inc.
 
@@ -99,4 +99,4 @@ If the buffer is locked, signal error and display its name."
 
 (provide 'emacs-lock)
 
-;;; emacs-lock.el ends here
+;;; old-emacs-lock.el ends here
diff --git a/lisp/obsolete/otodo-mode.el b/lisp/obsolete/otodo-mode.el
index add17b2..47f5089 100644
--- a/lisp/obsolete/otodo-mode.el
+++ b/lisp/obsolete/otodo-mode.el
@@ -1,4 +1,4 @@
-;;; todo-mode.el --- major mode for editing TODO list files  -*- 
lexical-binding: t; -*-
+;;; otodo-mode.el --- major mode for editing TODO list files  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 1997, 1999, 2001-2021 Free Software Foundation, Inc.
 
@@ -963,4 +963,4 @@ If INCLUDE-SEP is non-nil, return point after the 
separator."
 
 (provide 'todo-mode)
 
-;;; todo-mode.el ends here
+;;; otodo-mode.el ends here
diff --git a/lisp/obsolete/sb-image.el b/lisp/obsolete/sb-image.el
index e9a507f..fc9e03e 100644
--- a/lisp/obsolete/sb-image.el
+++ b/lisp/obsolete/sb-image.el
@@ -1,4 +1,4 @@
-;;; sb-image --- Image management for speedbar  -*- lexical-binding: t; -*-
+;;; sb-image.el --- Image management for speedbar  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1999-2003, 2005-2019, 2021 Free Software Foundation,
 ;; Inc.
diff --git a/lisp/obsolete/sregex.el b/lisp/obsolete/sregex.el
index 96d6b7a..371dcbf 100644
--- a/lisp/obsolete/sregex.el
+++ b/lisp/obsolete/sregex.el
@@ -208,7 +208,7 @@
 ;;   This is a "trapdoor" for including ordinary regular expression
 ;;   strings in the result.  Some regular expressions are clearer when
 ;;   written the old way: "[a-z]" vs. (sregexq (char (?a . ?z))), for
-;;   instance.  However, see the note under "Bugs," below.
+;;   instance.
 
 ;; Each CHAR-CLAUSE that is passed to (char ...) and (not-char ...)
 ;; has one of the following forms:
@@ -236,8 +236,6 @@
 ;; - add support for non-greedy operators *? and +?
 ;; - bug: (sregexq (opt (opt ?a))) returns "a??" which is a non-greedy "a?"
 
-;;; Bugs:
-
 ;;; Code:
 
 (eval-when-compile (require 'cl-lib))
diff --git a/lisp/obsolete/tpu-mapper.el b/lisp/obsolete/tpu-mapper.el
index d23068a..5ae0a65 100644
--- a/lisp/obsolete/tpu-mapper.el
+++ b/lisp/obsolete/tpu-mapper.el
@@ -69,7 +69,7 @@
 
 ;;;###autoload
 (defun tpu-mapper ()
-  "Create an Emacs lisp file defining the TPU-edt keypad for X-windows.
+  "Create an Emacs Lisp file defining the TPU-edt keypad for X-windows.
 
 This command displays an instruction screen showing the TPU-edt keypad
 and asks you to press the TPU-edt editing keys.  It uses the keys you
diff --git a/lisp/org/ob-hledger.el b/lisp/org/ob-hledger.el
index 3d2f46c..48dcb8c 100644
--- a/lisp/org/ob-hledger.el
+++ b/lisp/org/ob-hledger.el
@@ -1,4 +1,4 @@
-;;  ob-hledger.el --- Babel Functions for hledger      -*- lexical-binding: t; 
-*-
+;;; ob-hledger.el --- Babel Functions for hledger      -*- lexical-binding: t; 
-*-
 
 ;; Copyright (C) 2010-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/org/ob-mscgen.el b/lisp/org/ob-mscgen.el
index 999d4f4..79c9f87 100644
--- a/lisp/org/ob-mscgen.el
+++ b/lisp/org/ob-mscgen.el
@@ -1,4 +1,4 @@
-;;; ob-msc.el --- Babel Functions for Mscgen         -*- lexical-binding: t; 
-*-
+;;; ob-mscgen.el --- Babel Functions for Mscgen         -*- lexical-binding: 
t; -*-
 
 ;; Copyright (C) 2010-2021 Free Software Foundation, Inc.
 
@@ -78,4 +78,4 @@ mscgen supported formats."
 
 (provide 'ob-mscgen)
 
-;;; ob-msc.el ends here
+;;; ob-mscgen.el ends here
diff --git a/lisp/org/ol-eshell.el b/lisp/org/ol-eshell.el
index 769e7ee..8920e0a 100644
--- a/lisp/org/ol-eshell.el
+++ b/lisp/org/ol-eshell.el
@@ -1,4 +1,4 @@
-;;; ol-eshell.el - Links to Working Directories in Eshell -*- lexical-binding: 
t; -*-
+;;; ol-eshell.el --- Links to Working Directories in Eshell  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/org/org-ctags.el b/lisp/org/org-ctags.el
index 1fca873..dc2b3be 100644
--- a/lisp/org/org-ctags.el
+++ b/lisp/org/org-ctags.el
@@ -1,5 +1,5 @@
-;;; org-ctags.el - Integrate Emacs "tags" Facility with Org -*- 
lexical-binding: t; -*-
-;;
+;;; org-ctags.el --- Integrate Emacs "tags" Facility with Org -*- 
lexical-binding: t; -*-
+
 ;; Copyright (C) 2007-2021 Free Software Foundation, Inc.
 
 ;; Author: Paul Sexton <eeeickythump@gmail.com>
diff --git a/lisp/org/ox-man.el b/lisp/org/ox-man.el
index 6cace7e..27d2ded 100644
--- a/lisp/org/ox-man.el
+++ b/lisp/org/ox-man.el
@@ -1,4 +1,4 @@
-;; ox-man.el --- Man Back-End for Org Export Engine -*- lexical-binding: t; -*-
+;;; ox-man.el --- Man Back-End for Org Export Engine -*- lexical-binding: t; 
-*-
 
 ;; Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/progmodes/bug-reference.el b/lisp/progmodes/bug-reference.el
index e467d98..0c5837c 100644
--- a/lisp/progmodes/bug-reference.el
+++ b/lisp/progmodes/bug-reference.el
@@ -1,4 +1,4 @@
-;; bug-reference.el --- buttonize bug references  -*- lexical-binding: t; -*-
+;;; bug-reference.el --- buttonize bug references  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/progmodes/cc-awk.el b/lisp/progmodes/cc-awk.el
index 84cc5b1..334e821 100644
--- a/lisp/progmodes/cc-awk.el
+++ b/lisp/progmodes/cc-awk.el
@@ -1227,4 +1227,4 @@ comment at the start of cc-engine.el for more info."
 ;; indent-tabs-mode: t
 ;; tab-width: 8
 ;; End:
-;;; awk-mode.el ends here
+;;; cc-awk.el ends here
diff --git a/lisp/progmodes/cc-bytecomp.el b/lisp/progmodes/cc-bytecomp.el
index 2963438..edbac64 100644
--- a/lisp/progmodes/cc-bytecomp.el
+++ b/lisp/progmodes/cc-bytecomp.el
@@ -86,6 +86,7 @@
 (defvar cc-bytecomp-environment-set nil)
 
 (defmacro cc-bytecomp-debug-msg (&rest _args) ; Change to ARGS when needed.
+  ;; (declare (debug t))
   ;;`(message ,@args)
   )
 
@@ -301,6 +302,7 @@ during compilation, but compile in a `require'.  Don't use 
within
 
 Having cyclic cc-require's will result in infinite recursion.  That's
 somewhat intentional."
+  (declare (debug t))
   `(progn
      (eval-when-compile
        (cc-bytecomp-load (symbol-name ,cc-part)))
@@ -313,6 +315,7 @@ time, (ii) generate code to load the file at load time.
 
 CC-PART will normally be a quoted name such as \\='cc-fix.
 CONDITION should not be quoted."
+  (declare (debug t))
   (if (eval condition)
       (progn
        (cc-bytecomp-load (symbol-name (eval cc-part)))
@@ -327,6 +330,7 @@ after the loading of FILE.
 
 CC-PART will normally be a quoted name such as \\='cc-fix.  FILE
 should be a string.  CONDITION should not be quoted."
+  (declare (debug t))
   (if (eval condition)
       (progn
        (cc-bytecomp-load (symbol-name (eval cc-part)))
@@ -337,6 +341,7 @@ should be a string.  CONDITION should not be quoted."
 (defmacro cc-provide (feature)
   "A replacement for the `provide' form that restores the environment
 after the compilation.  Don't use within `eval-when-compile'."
+  (declare (debug t))
   `(progn
      (eval-when-compile (cc-bytecomp-restore-environment))
      (provide ,feature)))
@@ -348,6 +353,7 @@ during compilation.  Don't use outside `eval-when-compile' 
or
 
 Having cyclic cc-load's will result in infinite recursion.  That's
 somewhat intentional."
+  (declare (debug t))
   `(or (and (featurep 'cc-bytecomp)
            (cc-bytecomp-load ,cc-part))
        (load ,cc-part nil t nil)))
@@ -356,6 +362,7 @@ somewhat intentional."
   "Force loading of the corresponding .el file in the current directory
 during compilation, but do a compile time `require' otherwise.  Don't
 use within `eval-when-compile'."
+  (declare (debug t))
   `(eval-when-compile
      (if (and (fboundp 'cc-bytecomp-is-compiling)
              (cc-bytecomp-is-compiling))
@@ -367,6 +374,7 @@ use within `eval-when-compile'."
   "Do a `require' of an external package.
 This restores and sets up the compilation environment before and
 afterwards.  Don't use within `eval-when-compile'."
+  (declare (debug t))
   `(progn
      (eval-when-compile (cc-bytecomp-restore-environment))
      (require ,feature)
@@ -375,6 +383,7 @@ afterwards.  Don't use within `eval-when-compile'."
 (defmacro cc-bytecomp-defvar (var)
   "Binds the symbol as a variable during compilation of the file,
 to silence the byte compiler.  Don't use within `eval-when-compile'."
+  (declare (debug nil))
   `(eval-when-compile
      (if (boundp ',var)
         (cc-bytecomp-debug-msg
@@ -402,6 +411,7 @@ definition.  That means that this macro will not shut up 
warnings
 about incorrect number of arguments.  It's dangerous to try to replace
 existing functions since the byte compiler might need the definition
 at compile time, e.g. for macros and inline functions."
+  (declare (debug nil))
   `(eval-when-compile
      (if (fboundp ',fun)
         (cc-bytecomp-debug-msg
@@ -423,6 +433,7 @@ at compile time, e.g. for macros and inline functions."
 (defmacro cc-bytecomp-put (symbol propname value)
   "Set a property on a symbol during compilation (and evaluation) of
 the file.  Don't use outside `eval-when-compile'."
+  (declare (debug t))
   `(eval-when-compile
      (if (not (assoc (cons ,symbol ,propname) cc-bytecomp-original-properties))
         (progn
@@ -443,6 +454,7 @@ the file.  Don't use outside `eval-when-compile'."
 the compilation.  This is the same as using `boundp' but additionally
 exclude any variables that have been bound during compilation with
 `cc-bytecomp-defvar'."
+  (declare (debug t))
   (if (and (cc-bytecomp-is-compiling)
           (memq (car (cdr symbol)) cc-bytecomp-unbound-variables))
       nil
@@ -453,6 +465,7 @@ exclude any variables that have been bound during 
compilation with
 the compilation.  This is the same as using `fboundp' but additionally
 exclude any functions that have been bound during compilation with
 `cc-bytecomp-defun'."
+  (declare (debug t))
   (let (fun-elem)
     (if (and (cc-bytecomp-is-compiling)
             (setq fun-elem (assq (car (cdr symbol))
diff --git a/lisp/progmodes/cc-cmds.el b/lisp/progmodes/cc-cmds.el
index bee87b6..bdfdf17 100644
--- a/lisp/progmodes/cc-cmds.el
+++ b/lisp/progmodes/cc-cmds.el
@@ -1835,6 +1835,7 @@ No indentation or other \"electric\" behavior is 
performed."
     ;; This is a very special purpose macro, which assumes the existence of
     ;; several variables.  It is for use only in c-beginning-of-defun and
     ;; c-end-of-defun.
+    (declare (debug t))
     `(while
         (and ,condition
              (eq c-defun-tactic 'go-outward)
diff --git a/lisp/progmodes/cc-defs.el b/lisp/progmodes/cc-defs.el
index 20dc97d..4f79fa9 100644
--- a/lisp/progmodes/cc-defs.el
+++ b/lisp/progmodes/cc-defs.el
@@ -125,7 +125,7 @@ The result of the body appears to the compiler as a quoted 
constant.
 
 This variant works around bugs in `eval-when-compile' in various
 \(X)Emacs versions.  See cc-defs.el for details."
-
+    (declare (indent 0) (debug t))
     (if c-inside-eval-when-compile
        ;; XEmacs 21.4.6 has a bug in `eval-when-compile' in that it
        ;; evaluates its body at macro expansion time if it's nested
@@ -170,9 +170,7 @@ This variant works around bugs in `eval-when-compile' in 
various
         ;; constant that we eval.  That otoh introduce a problem in
         ;; that a returned lambda expression doesn't get byte
         ;; compiled (even if `function' is used).
-        (eval '(let ((c-inside-eval-when-compile t)) ,@body)))))
-
-  (put 'cc-eval-when-compile 'lisp-indent-hook 0))
+        (eval '(let ((c-inside-eval-when-compile t)) ,@body))))))
 
 
 ;;; Macros.
@@ -181,6 +179,7 @@ This variant works around bugs in `eval-when-compile' in 
various
   ;; between the host [X]Emacsen."
   ;; The motivation for this macro is to avoid the irritating message
   ;; "function `mapcan' from cl package called at runtime" produced by Emacs.
+  (declare (debug t))
   (cond
    ((and (fboundp 'mapcan)
         (subrp (symbol-function 'mapcan)))
@@ -196,18 +195,21 @@ This variant works around bugs in `eval-when-compile' in 
various
 
 (defmacro c--set-difference (liszt1 liszt2 &rest other-args)
   ;; Macro to smooth out the renaming of `set-difference' in Emacs 24.3.
+  (declare (debug (form form &rest [symbolp form])))
   (if (eq c--cl-library 'cl-lib)
       `(cl-set-difference ,liszt1 ,liszt2 ,@other-args)
     `(set-difference ,liszt1 ,liszt2 ,@other-args)))
 
 (defmacro c--intersection (liszt1 liszt2 &rest other-args)
   ;; Macro to smooth out the renaming of `intersection' in Emacs 24.3.
+  (declare (debug (form form &rest [symbolp form])))
   (if (eq c--cl-library 'cl-lib)
       `(cl-intersection ,liszt1 ,liszt2 ,@other-args)
     `(intersection ,liszt1 ,liszt2 ,@other-args)))
 
 (eval-and-compile
   (defmacro c--macroexpand-all (form &optional environment)
+    (declare (debug t))
     ;; Macro to smooth out the renaming of `cl-macroexpand-all' in Emacs 24.3.
     (if (fboundp 'macroexpand-all)
        `(macroexpand-all ,form ,environment)
@@ -215,6 +217,7 @@ This variant works around bugs in `eval-when-compile' in 
various
 
   (defmacro c--delete-duplicates (cl-seq &rest cl-keys)
     ;; Macro to smooth out the renaming of `delete-duplicates' in Emacs 24.3.
+    (declare (debug (form &rest [symbolp form])))
     (if (eq c--cl-library 'cl-lib)
        `(cl-delete-duplicates ,cl-seq ,@cl-keys)
       `(delete-duplicates ,cl-seq ,@cl-keys))))
@@ -222,6 +225,7 @@ This variant works around bugs in `eval-when-compile' in 
various
 (defmacro c-font-lock-flush (beg end)
   "Declare the region BEG...END's fontification as out-of-date.
 On XEmacs and older Emacsen, this refontifies that region immediately."
+  (declare (debug t))
   (if (fboundp 'font-lock-flush)
       `(font-lock-flush ,beg ,end)
     `(font-lock-fontify-region ,beg ,end)))
@@ -249,6 +253,7 @@ one of the following symbols:
 If the referenced position doesn't exist, the closest accessible point
 to it is returned.  This function does not modify the point or the mark."
 
+  (declare (debug t))
   (if (eq (car-safe position) 'quote)
       (let ((position (eval position)))
        (cond
@@ -417,6 +422,7 @@ to it is returned.  This function does not modify the point 
or the mark."
 
 (defmacro c-is-escaped (pos)
   ;; Are there an odd number of backslashes before POS?
+  (declare (debug t))
   `(save-excursion
      (goto-char ,pos)
      (not (zerop (logand (skip-chars-backward "\\\\") 1)))))
@@ -424,6 +430,7 @@ to it is returned.  This function does not modify the point 
or the mark."
 (defmacro c-will-be-escaped (pos beg end)
   ;; Will the character after POS be escaped after the removal of (BEG END)?
   ;; It is assumed that (>= POS END).
+  (declare (debug t))
   `(save-excursion
      (let ((-end- ,end)
           count)
@@ -436,6 +443,7 @@ to it is returned.  This function does not modify the point 
or the mark."
 
 (defmacro c-will-be-unescaped (beg)
   ;; Would the character after BEG be unescaped?
+  (declare (debug t))
   `(save-excursion
     (let (count)
       (goto-char ,beg)
@@ -446,6 +454,7 @@ to it is returned.  This function does not modify the point 
or the mark."
 
 (defmacro c-next-single-property-change (position prop &optional object limit)
   ;; See the doc string for either of the defuns expanded to.
+  (declare (debug t))
   (if (and c-use-extents
           (fboundp 'next-single-char-property-change))
       ;; XEmacs >= 2005-01-25
@@ -455,6 +464,7 @@ to it is returned.  This function does not modify the point 
or the mark."
 
 (defmacro c-previous-single-property-change (position prop &optional object 
limit)
   ;; See the doc string for either of the defuns expanded to.
+  (declare (debug t))
   (if (and c-use-extents
           (fboundp 'previous-single-char-property-change))
       ;; XEmacs >= 2005-01-25
@@ -474,6 +484,7 @@ to it is returned.  This function does not modify the point 
or the mark."
 (defmacro c-set-region-active (activate)
   ;; Activate the region if ACTIVE is non-nil, deactivate it
   ;; otherwise.  Covers the differences between Emacs and XEmacs.
+  (declare (debug t))
   (if (fboundp 'zmacs-activate-region)
       ;; XEmacs.
       `(if ,activate
@@ -483,6 +494,7 @@ to it is returned.  This function does not modify the point 
or the mark."
     `(setq mark-active ,activate)))
 
 (defmacro c-set-keymap-parent (map parent)
+  (declare (debug t))
   (cond
    ;; XEmacs
    ((cc-bytecomp-fboundp 'set-keymap-parents)
@@ -495,6 +507,7 @@ to it is returned.  This function does not modify the point 
or the mark."
 
 (defmacro c-delete-and-extract-region (start end)
   "Delete the text between START and END and return it."
+  (declare (debug t))
   (if (cc-bytecomp-fboundp 'delete-and-extract-region)
       ;; Emacs 21.1 and later
       `(delete-and-extract-region ,start ,end)
@@ -505,15 +518,16 @@ to it is returned.  This function does not modify the 
point or the mark."
 
 (defmacro c-safe (&rest body)
   ;; safely execute BODY, return nil if an error occurred
+  (declare (indent 0) (debug t))
   `(condition-case nil
        (progn ,@body)
      (error nil)))
-(put 'c-safe 'lisp-indent-function 0)
 
 (defmacro c-int-to-char (integer)
   ;; In Emacs, a character is an integer.  In XEmacs, a character is a
   ;; type distinct from an integer.  Sometimes we need to convert integers to
   ;; characters.  `c-int-to-char' makes this conversion, if necessary.
+  (declare (debug t))
   (if (fboundp 'int-to-char)
       `(int-to-char ,integer)
     integer))
@@ -521,6 +535,7 @@ to it is returned.  This function does not modify the point 
or the mark."
 (defmacro c-characterp (arg)
   ;; Return t when ARG is a character (XEmacs) or integer (Emacs), otherwise
   ;; return nil.
+  (declare (debug t))
   (if (integerp ?c)
       `(integerp ,arg)
     `(characterp ,arg)))
@@ -567,6 +582,7 @@ to it is returned.  This function does not modify the point 
or the mark."
   ;; string opener, or after the introductory R of one.  The match data is
   ;; overwritten.  On success the opener's identifier will be (match-string
   ;; 1).  Text properties on any characters are ignored.
+  (declare (debug t))
   (if pos
       `(save-excursion
         (goto-char ,pos)
@@ -628,6 +644,7 @@ If BODY makes a change that unconditionally is undone then 
wrap this
 macro inside `c-save-buffer-state'.  That way the change can be done
 even when the buffer is read-only, and without interference from
 various buffer change hooks."
+  (declare (indent 0) (debug t))
   `(let (-tnt-chng-keep
         -tnt-chng-state)
      (unwind-protect
@@ -638,7 +655,6 @@ various buffer change hooks."
               -tnt-chng-state (c-tnt-chng-record-state)
               -tnt-chng-keep (progn ,@body))
        (c-tnt-chng-cleanup -tnt-chng-keep -tnt-chng-state))))
-(put 'c-tentative-buffer-changes 'lisp-indent-function 0)
 
 (defun c-tnt-chng-record-state ()
   ;; Used internally in `c-tentative-buffer-changes'.
@@ -696,6 +712,7 @@ on the wrong side of LIMIT, it stays unchanged.
 
 Note that this function might do hidden buffer changes.  See the
 comment at the start of cc-engine.el for more info."
+  (declare (debug t))
   (if limit
       `(when (< (point) (or ,limit (point-max)))
         (save-restriction
@@ -717,6 +734,7 @@ starts on the wrong side of LIMIT, it stays unchanged.
 
 Note that this function might do hidden buffer changes.  See the
 comment at the start of cc-engine.el for more info."
+  (declare (debug t))
   (if limit
       `(when (> (point) (or ,limit (point-min)))
         (save-restriction
@@ -733,11 +751,13 @@ This is like `forward-sexp' except that it isn't 
interactive and does
 not do any user friendly adjustments of the point and that it isn't
 susceptible to user configurations such as disabling of signals in
 certain situations."
+  (declare (debug t))
   (or count (setq count 1))
   `(goto-char (scan-sexps (point) ,count)))
 
 (defmacro c-backward-sexp (&optional count)
   "See `c-forward-sexp' and reverse directions."
+  (declare (debug t))
   (or count (setq count 1))
   `(c-forward-sexp ,(if (numberp count) (- count) `(- ,count))))
 
@@ -747,6 +767,7 @@ for unbalanced parens.
 
 A limit for the search may be given.  FROM is assumed to be on the
 right side of it."
+  (declare (debug t))
   (let ((res (if (featurep 'xemacs)
                 `(scan-lists ,from ,count ,depth nil t)
               `(c-safe (scan-lists ,from ,count ,depth)))))
@@ -774,6 +795,7 @@ leave point unmoved.
 
 A LIMIT for the search may be given.  The start position is assumed to be
 before it."
+  (declare (debug t))
   `(let ((dest (c-safe-scan-lists ,(or pos '(point)) 1 0 ,limit)))
      (when dest (goto-char dest) dest)))
 
@@ -784,6 +806,7 @@ leave point unmoved.
 
 A LIMIT for the search may be given.  The start position is assumed to be
 after it."
+  (declare (debug t))
   `(let ((dest (c-safe-scan-lists ,(or pos '(point)) -1 0 ,limit)))
      (when dest (goto-char dest) dest)))
 
@@ -793,6 +816,7 @@ or nil if no such position exists.  The point is used if 
POS is left out.
 
 A limit for the search may be given.  The start position is assumed to
 be before it."
+  (declare (debug t))
   `(c-safe-scan-lists ,(or pos '(point)) 1 1 ,limit))
 
 (defmacro c-up-list-backward (&optional pos limit)
@@ -801,6 +825,7 @@ or nil if no such position exists.  The point is used if 
POS is left out.
 
 A limit for the search may be given.  The start position is assumed to
 be after it."
+  (declare (debug t))
   `(c-safe-scan-lists ,(or pos '(point)) -1 1 ,limit))
 
 (defmacro c-down-list-forward (&optional pos limit)
@@ -809,6 +834,7 @@ or nil if no such position exists.  The point is used if 
POS is left out.
 
 A limit for the search may be given.  The start position is assumed to
 be before it."
+  (declare (debug t))
   `(c-safe-scan-lists ,(or pos '(point)) 1 -1 ,limit))
 
 (defmacro c-down-list-backward (&optional pos limit)
@@ -817,6 +843,7 @@ or nil if no such position exists.  The point is used if 
POS is left out.
 
 A limit for the search may be given.  The start position is assumed to
 be after it."
+  (declare (debug t))
   `(c-safe-scan-lists ,(or pos '(point)) -1 -1 ,limit))
 
 (defmacro c-go-up-list-forward (&optional pos limit)
@@ -826,6 +853,7 @@ position exists, otherwise nil is returned and the point 
isn't moved.
 
 A limit for the search may be given.  The start position is assumed to
 be before it."
+  (declare (debug t))
   `(let ((dest (c-up-list-forward ,pos ,limit)))
      (when dest (goto-char dest) t)))
 
@@ -836,6 +864,7 @@ position exists, otherwise nil is returned and the point 
isn't moved.
 
 A limit for the search may be given.  The start position is assumed to
 be after it."
+  (declare (debug t))
   `(let ((dest (c-up-list-backward ,pos ,limit)))
      (when dest (goto-char dest) t)))
 
@@ -846,6 +875,7 @@ exists, otherwise nil is returned and the point isn't moved.
 
 A limit for the search may be given.  The start position is assumed to
 be before it."
+  (declare (debug t))
   `(let ((dest (c-down-list-forward ,pos ,limit)))
      (when dest (goto-char dest) t)))
 
@@ -856,6 +886,7 @@ exists, otherwise nil is returned and the point isn't moved.
 
 A limit for the search may be given.  The start position is assumed to
 be after it."
+  (declare (debug t))
   `(let ((dest (c-down-list-backward ,pos ,limit)))
      (when dest (goto-char dest) t)))
 
@@ -967,6 +998,7 @@ be after it."
   ;; point)?  Always returns nil for languages which don't have Virtual
   ;; semicolons.
   ;; This macro might do hidden buffer changes.
+  (declare (debug t))
   `(if c-at-vsemi-p-fn
        (funcall c-at-vsemi-p-fn ,@(if pos `(,pos)))))
 
@@ -984,6 +1016,7 @@ be after it."
 (defmacro c-benign-error (format &rest args)
   ;; Formats an error message for the echo area and dings, i.e. like
   ;; `error' but doesn't abort.
+  (declare (debug t))
   `(progn
      (message ,format ,@args)
      (ding)))
@@ -993,18 +1026,19 @@ be after it."
   ;; way to execute code.
   ;; Maintainers' note: If TABLE is `c++-template-syntax-table', DON'T call
   ;; any forms inside this that call `c-parse-state'.  !!!!
+  (declare (indent 1) (debug t))
   `(let ((c-with-syntax-table-orig-table (syntax-table)))
      (unwind-protect
         (progn
           (set-syntax-table ,table)
           ,@code)
        (set-syntax-table c-with-syntax-table-orig-table))))
-(put 'c-with-syntax-table 'lisp-indent-function 1)
 
 (defmacro c-skip-ws-forward (&optional limit)
   "Skip over any whitespace following point.
 This function skips over horizontal and vertical whitespace and line
 continuations."
+  (declare (debug t))
   (if limit
       `(let ((limit (or ,limit (point-max))))
         (while (progn
@@ -1026,6 +1060,7 @@ continuations."
   "Skip over any whitespace preceding point.
 This function skips over horizontal and vertical whitespace and line
 continuations."
+  (declare (debug t))
   (if limit
       `(let ((limit (or ,limit (point-min))))
         (while (progn
@@ -1048,6 +1083,7 @@ continuations."
   "Return non-nil if the current CC Mode major mode is MODE.
 MODE is either a mode symbol or a list of mode symbols."
 
+  (declare (debug t))
   (if c-langs-are-parametric
       ;; Inside a `c-lang-defconst'.
       `(c-lang-major-mode-is ,mode)
@@ -1130,6 +1166,7 @@ MODE is either a mode symbol or a list of mode symbols."
   ;; 21) then it's assumed that the property is present on it.
   ;;
   ;; This macro does a hidden buffer change.
+  (declare (debug t))
   (setq property (eval property))
   (if (or c-use-extents
          (not (cc-bytecomp-boundp 'text-property-default-nonsticky)))
@@ -1147,6 +1184,7 @@ MODE is either a mode symbol or a list of mode symbols."
   ;; Get the value of the given property on the character at POS if
   ;; it's been put there by `c-put-char-property'.  PROPERTY is
   ;; assumed to be constant.
+  (declare (debug t))
   (setq property (eval property))
   (if c-use-extents
       ;; XEmacs.
@@ -1177,6 +1215,7 @@ MODE is either a mode symbol or a list of mode symbols."
   ;; constant.
   ;;
   ;; This macro does a hidden buffer change.
+  (declare (debug t))
   (setq property (eval property))
   (cond (c-use-extents
         ;; XEmacs.
@@ -1199,6 +1238,7 @@ MODE is either a mode symbol or a list of mode symbols."
   ;; Return the first position in the range [FROM to) where the text property
   ;; PROPERTY is set, or `most-positive-fixnum' if there is no such position.
   ;; PROPERTY should be a quoted constant.
+  (declare (debug t))
   `(let ((-from- ,from) (-to- ,to) pos)
      (cond
       ((and (< -from- -to-)
@@ -1220,6 +1260,7 @@ MODE is either a mode symbol or a list of mode symbols."
   ;; `syntax-table'.
   ;;
   ;; This macro does hidden buffer changes.
+  (declare (debug t))
   (setq property (eval property))
   (if c-use-extents
       ;; XEmacs.
@@ -1239,6 +1280,7 @@ MODE is either a mode symbol or a list of mode symbols."
 (defmacro c-clear-syn-tab-properties (from to)
   ;; Remove all occurrences of the `syntax-table' and `c-fl-syn-tab' text
   ;; properties between FROM and TO.
+  (declare (debug t))
   `(let ((-from- ,from) (-to- ,to))
      (when (and
            c-min-syn-tab-mkr c-max-syn-tab-mkr
@@ -1260,6 +1302,7 @@ LIMIT bounds the search.  The comparison is done with 
`equal'.
 Leave point just after the character, and set the match data on
 this character, and return point.  If VALUE isn't found, Return
 nil; point is then left undefined."
+  (declare (debug t))
   `(let ((place (point)))
      (while
         (and
@@ -1279,6 +1322,7 @@ LIMIT bounds the search.  The comparison is done with 
`equal'.
 Leave point just before the character, set the match data on this
 character, and return point.  If VALUE isn't found, Return nil;
 point is then left undefined."
+  (declare (debug t))
   `(let ((place (point)))
      (while
         (and
@@ -1322,6 +1366,7 @@ been put there by c-put-char-property.  POINT remains 
unchanged."
 which have the value VALUE, as tested by `equal'.  These
 properties are assumed to be over individual characters, having
 been put there by c-put-char-property.  POINT remains unchanged."
+  (declare (debug t))
   (if c-use-extents
     ;; XEmacs
       `(let ((-property- ,property))
@@ -1342,6 +1387,7 @@ PROPERTY must be a constant.
 Leave point just after the character, and set the match data on
 this character, and return point.  If the search fails, return
 nil; point is then left undefined."
+  (declare (debug t))
   `(let ((char-skip (concat "^" (char-to-string ,char)))
         (-limit- (or ,limit (point-max)))
         (-value- ,value))
@@ -1365,6 +1411,7 @@ PROPERTY must be a constant.
 Leave point just before the character, and set the match data on
 this character, and return point.  If the search fails, return
 nil; point is then left undefined."
+  (declare (debug t))
   `(let ((char-skip (concat "^" (char-to-string ,char)))
         (-limit- (or ,limit (point-min)))
         (-value- ,value))
@@ -1388,6 +1435,7 @@ PROPERTY must be a constant.
 Leave point just after the character, and set the match data on
 this character, and return point.  If the search fails, return
 nil; point is then left undefined."
+  (declare (debug t))
   `(let ((char-skip (concat "^" (char-to-string ,char)))
         (-limit- (or ,limit (point-max)))
         (-value- ,value))
@@ -1436,6 +1484,7 @@ by `equal'.  These properties are assumed to be over 
individual
 characters, having been put there by c-put-char-property.  POINT
 remains unchanged.  Return the position of the first removed
 property, or nil."
+  (declare (debug t))
   (if c-use-extents
       ;; XEmacs
       `(let ((-property- ,property)
@@ -1459,6 +1508,7 @@ property, or nil."
   ;; `c-put-char-property' must be a constant.
   "Put the text property PROPERTY with value VALUE on characters
 with value CHAR in the region [FROM to)."
+  (declare (debug t))
   `(let ((skip-string (concat "^" (list ,char)))
         (-to- ,to))
      (save-excursion
@@ -1481,6 +1531,7 @@ with value CHAR in the region [FROM to)."
   ;; Put an overlay/extent covering the given range in the current
   ;; buffer.  It's currently undefined whether it's front/end sticky
   ;; or not.  The overlay/extent object is returned.
+  (declare (debug t))
   (if (cc-bytecomp-fboundp 'make-overlay)
       ;; Emacs.
       `(let ((ol (make-overlay ,from ,to)))
@@ -1494,6 +1545,7 @@ with value CHAR in the region [FROM to)."
 (defmacro c-delete-overlay (overlay)
   ;; Deletes an overlay/extent object previously retrieved using
   ;; `c-put-overlay'.
+  (declare (debug t))
   (if (cc-bytecomp-fboundp 'make-overlay)
       ;; Emacs.
       `(delete-overlay ,overlay)
@@ -1501,80 +1553,6 @@ with value CHAR in the region [FROM to)."
     `(delete-extent ,overlay)))
 
 
-;; Make edebug understand the macros.
-;(eval-after-load "edebug" ; 2006-07-09: def-edebug-spec is now in subr.el.
-;  '(progn
-(def-edebug-spec cc-eval-when-compile (&rest def-form))
-(def-edebug-spec c-font-lock-flush t)
-(def-edebug-spec c--mapcan t)
-(def-edebug-spec c--set-difference (form form &rest [symbolp form]))
-(def-edebug-spec c--intersection (form form &rest [symbolp form]))
-(def-edebug-spec c--delete-duplicates (form &rest [symbolp form]))
-(def-edebug-spec c-point t)
-(def-edebug-spec c-is-escaped t)
-(def-edebug-spec c-will-be-escaped t)
-(def-edebug-spec c-next-single-property-change t)
-(def-edebug-spec c-delete-and-extract-region t)
-(def-edebug-spec c-set-region-active t)
-(def-edebug-spec c-set-keymap-parent t)
-(def-edebug-spec c-safe t)
-(def-edebug-spec c-int-to-char t)
-(def-edebug-spec c-characterp t)
-(def-edebug-spec c-save-buffer-state let*)
-(def-edebug-spec c-tentative-buffer-changes t)
-(def-edebug-spec c-forward-syntactic-ws t)
-(def-edebug-spec c-backward-syntactic-ws t)
-(def-edebug-spec c-forward-sexp t)
-(def-edebug-spec c-backward-sexp t)
-(def-edebug-spec c-safe-scan-lists t)
-(def-edebug-spec c-go-list-forward t)
-(def-edebug-spec c-go-list-backward t)
-(def-edebug-spec c-up-list-forward t)
-(def-edebug-spec c-up-list-backward t)
-(def-edebug-spec c-down-list-forward t)
-(def-edebug-spec c-down-list-backward t)
-(def-edebug-spec c-go-up-list-forward t)
-(def-edebug-spec c-go-up-list-backward t)
-(def-edebug-spec c-go-down-list-forward t)
-(def-edebug-spec c-go-down-list-backward t)
-(def-edebug-spec c-at-vsemi-p t)
-(def-edebug-spec c-add-syntax t)
-(def-edebug-spec c-add-class-syntax t)
-(def-edebug-spec c-benign-error t)
-(def-edebug-spec c-with-syntax-table t)
-(def-edebug-spec c-skip-ws-forward t)
-(def-edebug-spec c-skip-ws-backward t)
-(def-edebug-spec c-major-mode-is t)
-(def-edebug-spec c-search-forward-char-property t)
-(def-edebug-spec c-search-backward-char-property t)
-(def-edebug-spec c-put-char-property t)
-(def-edebug-spec c-put-syn-tab t)
-(def-edebug-spec c-get-char-property t)
-(def-edebug-spec c-clear-char-property t)
-(def-edebug-spec c-clear-syn-tab t)
-;;(def-edebug-spec c-min-property-position nil) ; invoked only by macros
-(def-edebug-spec c-min-property-position t) ; Now invoked from functions 
(2019-07)
-(def-edebug-spec c-clear-char-property-with-value t)
-(def-edebug-spec c-clear-char-property-with-value-on-char t)
-(def-edebug-spec c-put-char-properties-on-char t)
-(def-edebug-spec c-clear-char-properties t)
-(def-edebug-spec c-clear-syn-tab-properties t)
-(def-edebug-spec c-with-extended-string-fences (form form body))
-(def-edebug-spec c-put-overlay t)
-(def-edebug-spec c-delete-overlay t)
-(def-edebug-spec c-mark-<-as-paren t)
-(def-edebug-spec c-mark->-as-paren t)
-(def-edebug-spec c-unmark-<->-as-paren t)
-(def-edebug-spec c-with-<->-as-parens-suppressed (body))
-(def-edebug-spec c-self-bind-state-cache (body))
-(def-edebug-spec c-sc-scan-lists-no-category+1+1 t)
-(def-edebug-spec c-sc-scan-lists-no-category+1-1 t)
-(def-edebug-spec c-sc-scan-lists-no-category-1+1 t)
-(def-edebug-spec c-sc-scan-lists-no-category-1-1 t)
-(def-edebug-spec c-sc-scan-lists t)
-(def-edebug-spec c-sc-parse-partial-sexp t);))
-
-
 ;;; Functions.
 
 ;; Note: All these after the macros, to be on safe side in avoiding
@@ -1604,6 +1582,7 @@ with value CHAR in the region [FROM to)."
   ;; indirection through the `category' text property.  This allows us to
   ;; toggle the property in all template brackets simultaneously and
   ;; cheaply.  We use this, for instance, in `c-parse-state'.
+  (declare (debug t))
   (if c-use-category
       `(c-put-char-property ,pos 'category 'c-<-as-paren-syntax)
     `(c-put-char-property ,pos 'syntax-table c-<-as-paren-syntax)))
@@ -1618,6 +1597,7 @@ with value CHAR in the region [FROM to)."
   ;; indirection through the `category' text property.  This allows us to
   ;; toggle the property in all template brackets simultaneously and
   ;; cheaply.  We use this, for instance, in `c-parse-state'.
+  (declare (debug t))
   (if c-use-category
       `(c-put-char-property ,pos 'category 'c->-as-paren-syntax)
     `(c-put-char-property ,pos 'syntax-table c->-as-paren-syntax)))
@@ -1631,6 +1611,7 @@ with value CHAR in the region [FROM to)."
   ;; indirection through the `category' text property.  This allows us to
   ;; toggle the property in all template brackets simultaneously and
   ;; cheaply.  We use this, for instance, in `c-parse-state'.
+  (declare (debug t))
   `(c-clear-char-property ,pos ,(if c-use-category ''category ''syntax-table)))
 
 (defsubst c-suppress-<->-as-parens ()
@@ -1651,50 +1632,13 @@ with value CHAR in the region [FROM to)."
   ;; Like progn, except that the paren property is suppressed on all
   ;; template brackets whilst they are running.  This macro does a hidden
   ;; buffer change.
+  (declare (debug (body)))
   `(unwind-protect
        (progn
         (c-suppress-<->-as-parens)
         ,@forms)
      (c-restore-<->-as-parens)))
 
-;;;;;;;;;;;;;;;
-
-(defmacro c-self-bind-state-cache (&rest forms)
-  ;; Bind the state cache to itself and execute the FORMS.  Return the result
-  ;; of the last FORM executed.  It is assumed that no buffer changes will
-  ;; happen in FORMS, and no hidden buffer changes which could affect the
-  ;; parsing will be made by FORMS.
-  `(let* ((c-state-cache (copy-tree c-state-cache))
-         (c-state-cache-good-pos c-state-cache-good-pos)
-         ;(c-state-nonlit-pos-cache (copy-tree c-state-nonlit-pos-cache))
-          ;(c-state-nonlit-pos-cache-limit c-state-nonlit-pos-cache-limit)
-          ;(c-state-semi-nonlit-pos-cache (copy-tree 
c-state-semi-nonlit-pos-cache))
-          ;(c-state-semi-nonlit-pos-cache-limit c-state-semi-nonlit-pos-cache)
-         (c-state-brace-pair-desert (copy-tree c-state-brace-pair-desert))
-         (c-state-point-min c-state-point-min)
-         (c-state-point-min-lit-type c-state-point-min-lit-type)
-         (c-state-point-min-lit-start c-state-point-min-lit-start)
-         (c-state-min-scan-pos c-state-min-scan-pos)
-         (c-state-old-cpp-beg-marker (if (markerp c-state-old-cpp-beg-marker)
-                                         (copy-marker 
c-state-old-cpp-beg-marker)
-                                       c-state-old-cpp-beg-marker))
-         (c-state-old-cpp-beg (if (markerp c-state-old-cpp-beg)
-                                  c-state-old-cpp-beg-marker
-                                c-state-old-cpp-beg))
-         (c-state-old-cpp-end-marker (if (markerp c-state-old-cpp-end-marker)
-                                         (copy-marker 
c-state-old-cpp-end-marker)
-                                       c-state-old-cpp-end-marker))
-         (c-state-old-cpp-end (if (markerp c-state-old-cpp-end)
-                                  c-state-old-cpp-end-marker
-                                c-state-old-cpp-end))
-         (c-parse-state-state c-parse-state-state))
-     (prog1
-        (progn ,@forms)
-       (if (markerp c-state-old-cpp-beg-marker)
-          (move-marker c-state-old-cpp-beg-marker nil))
-       (if (markerp c-state-old-cpp-end-marker)
-          (move-marker c-state-old-cpp-end-marker nil)))))
-
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;; The following macros are to be used only in `c-parse-state' and its
 ;; subroutines.  Their main purpose is to simplify the handling of C++/Java
@@ -1708,6 +1652,7 @@ with value CHAR in the region [FROM to)."
   ;; Do a (scan-lists FROM 1 1).  Any finishing position which either (i) is
   ;; determined by and angle bracket; or (ii) is inside a macro whose start
   ;; isn't POINT-MACRO-START doesn't count as a finishing position.
+  (declare (debug t))
   `(let ((here (point))
         (pos (scan-lists ,from 1 1)))
      (while (eq (char-before pos) ?>)
@@ -1718,6 +1663,7 @@ with value CHAR in the region [FROM to)."
   ;; Do a (scan-lists FROM 1 -1).  Any finishing position which either (i) is
   ;; determined by an angle bracket; or (ii) is inside a macro whose start
   ;; isn't POINT-MACRO-START doesn't count as a finishing position.
+  (declare (debug t))
   `(let ((here (point))
         (pos (scan-lists ,from 1 -1)))
      (while (eq (char-before pos) ?<)
@@ -1729,6 +1675,7 @@ with value CHAR in the region [FROM to)."
   ;; Do a (scan-lists FROM -1 1).  Any finishing position which either (i) is
   ;; determined by and angle bracket; or (ii) is inside a macro whose start
   ;; isn't POINT-MACRO-START doesn't count as a finishing position.
+  (declare (debug t))
   `(let ((here (point))
         (pos (scan-lists ,from -1 1)))
      (while (eq (char-after pos) ?<)
@@ -1739,6 +1686,7 @@ with value CHAR in the region [FROM to)."
   ;; Do a (scan-lists FROM -1 -1).  Any finishing position which either (i) is
   ;; determined by and angle bracket; or (ii) is inside a macro whose start
   ;; isn't POINT-MACRO-START doesn't count as a finishing position.
+  (declare (debug t))
   `(let ((here (point))
         (pos (scan-lists ,from -1 -1)))
      (while (eq (char-after pos) ?>)
@@ -1747,6 +1695,7 @@ with value CHAR in the region [FROM to)."
      pos))
 
 (defmacro c-sc-scan-lists (from count depth)
+  (declare (debug t))
   (if c-use-category
       `(scan-lists ,from ,count ,depth)
     (cond
@@ -1794,6 +1743,7 @@ with value CHAR in the region [FROM to)."
 
 (defmacro c-sc-parse-partial-sexp (from to &optional targetdepth stopbefore
                                        oldstate)
+  (declare (debug t))
   (if c-use-category
       `(parse-partial-sexp ,from ,to ,targetdepth ,stopbefore ,oldstate)
     `(c-sc-parse-partial-sexp-no-category ,from ,to ,targetdepth ,stopbefore
@@ -2354,6 +2304,7 @@ system."
   "Can be used inside a VAL in `c-lang-defconst' to evaluate FORM
 immediately, i.e. at the same time as the `c-lang-defconst' form
 itself is evaluated."
+  (declare (debug t))
   ;; Evaluate at macro expansion time, i.e. in the
   ;; `c--macroexpand-all' inside `c-lang-defconst'.
   (eval form))
@@ -2396,7 +2347,8 @@ one `c-lang-defconst' for each NAME is permitted per 
file.  If there
 already is one it will be completely replaced; the value in the
 earlier definition will not affect `c-lang-const' on the same
 constant.  A file is identified by its base name."
-
+  (declare (indent 1)
+          (debug (&define name [&optional stringp] [&rest sexp def-form])))
   (let* ((sym (intern (symbol-name name) c-lang-constants))
         ;; Make `c-lang-const' expand to a straightforward call to
         ;; `c-get-lang-constant' in `c--macroexpand-all' below.
@@ -2487,12 +2439,6 @@ constant.  A file is identified by its base name."
        (c-define-lang-constant ',name ,bindings
                               ,@(and pre-files `(',pre-files))))))
 
-(put 'c-lang-defconst 'lisp-indent-function 1)
-;(eval-after-load "edebug" ; 2006-07-09: def-edebug-spec is now in subr.el.
-;  '
-(def-edebug-spec c-lang-defconst
-  (&define name [&optional stringp] [&rest sexp def-form]))
-
 (defun c-define-lang-constant (name bindings &optional pre-files)
   ;; Used by `c-lang-defconst'.
 
@@ -2548,6 +2494,7 @@ LANG is the name of the language, i.e. the mode name 
without the
 language.  NAME and LANG are not evaluated so they should not be
 quoted."
 
+  (declare (debug (name &optional symbolp)))
   (or (symbolp name)
       (error "Not a symbol: %S" name))
   (or (symbolp lang)
diff --git a/lisp/progmodes/cc-engine.el b/lisp/progmodes/cc-engine.el
index 747a6fd..622d951 100644
--- a/lisp/progmodes/cc-engine.el
+++ b/lisp/progmodes/cc-engine.el
@@ -737,6 +737,7 @@ comment at the start of cc-engine.el for more info."
   '(setq stack (cons (cons state saved-pos)
                     stack)))
 (defmacro c-bos-pop-state (&optional do-if-done)
+  (declare (debug t))
   `(if (setq state (car (car stack))
             saved-pos (cdr (car stack))
             stack (cdr stack))
@@ -761,6 +762,7 @@ comment at the start of cc-engine.el for more info."
      (goto-char pos)
      (setq sym nil)))
 (defmacro c-bos-save-error-info (missing got)
+  (declare (debug t))
   `(setq saved-pos (vector pos ,missing ,got)))
 (defmacro c-bos-report-error ()
   '(unless noerror
@@ -1871,51 +1873,51 @@ comment at the start of cc-engine.el for more info."
 ;               (setq in-face (point)))
 ;             (not (eobp)))))))
 
-(defmacro c-debug-sws-msg (&rest args)
-  (ignore args)
+(defmacro c-debug-sws-msg (&rest _args)
+  ;; (declare (debug t))
   ;;`(message ,@args)
   )
 
 (defmacro c-put-is-sws (beg end)
   ;; This macro does a hidden buffer change.
+  (declare (debug t))
   `(let ((beg ,beg) (end ,end))
      (put-text-property beg end 'c-is-sws t)
      ,@(when (facep 'c-debug-is-sws-face)
         '((c-debug-add-face beg end 'c-debug-is-sws-face)))))
-(def-edebug-spec c-put-is-sws t)
 
 (defmacro c-put-in-sws (beg end)
   ;; This macro does a hidden buffer change.
+  (declare (debug t))
   `(let ((beg ,beg) (end ,end))
      (put-text-property beg end 'c-in-sws t)
      ,@(when (facep 'c-debug-is-sws-face)
         '((c-debug-add-face beg end 'c-debug-in-sws-face)))))
-(def-edebug-spec c-put-in-sws t)
 
 (defmacro c-remove-is-sws (beg end)
   ;; This macro does a hidden buffer change.
+  (declare (debug t))
   `(let ((beg ,beg) (end ,end))
      (remove-text-properties beg end '(c-is-sws nil))
      ,@(when (facep 'c-debug-is-sws-face)
         '((c-debug-remove-face beg end 'c-debug-is-sws-face)))))
-(def-edebug-spec c-remove-is-sws t)
 
 (defmacro c-remove-in-sws (beg end)
   ;; This macro does a hidden buffer change.
+  (declare (debug t))
   `(let ((beg ,beg) (end ,end))
      (remove-text-properties beg end '(c-in-sws nil))
      ,@(when (facep 'c-debug-is-sws-face)
         '((c-debug-remove-face beg end 'c-debug-in-sws-face)))))
-(def-edebug-spec c-remove-in-sws t)
 
 (defmacro c-remove-is-and-in-sws (beg end)
   ;; This macro does a hidden buffer change.
+  (declare (debug t))
   `(let ((beg ,beg) (end ,end))
      (remove-text-properties beg end '(c-is-sws nil c-in-sws nil))
      ,@(when (facep 'c-debug-is-sws-face)
         '((c-debug-remove-face beg end 'c-debug-is-sws-face)
           (c-debug-remove-face beg end 'c-debug-in-sws-face)))))
-(def-edebug-spec c-remove-is-and-in-sws t)
 
 ;; The type of literal position `end' is in a `before-change-functions'
 ;; function - one of `c', `c++', `pound', `noise', `attribute' or nil (but NOT
@@ -3517,6 +3519,7 @@ mhtml-mode."
 (defmacro c-state-cache-top-lparen (&optional cache)
   ;; Return the address of the top left brace/bracket/paren recorded in CACHE
   ;; (default `c-state-cache') (or nil).
+  (declare (debug t))
   (let ((cash (or cache 'c-state-cache)))
     `(if (consp (car ,cash))
         (caar ,cash)
@@ -3525,6 +3528,7 @@ mhtml-mode."
 (defmacro c-state-cache-top-paren (&optional cache)
   ;; Return the address of the latest brace/bracket/paren (whether left or
   ;; right) recorded in CACHE (default `c-state-cache') or nil.
+  (declare (debug t))
   (let ((cash (or cache 'c-state-cache)))
     `(if (consp (car ,cash))
         (cdar ,cash)
@@ -3533,6 +3537,7 @@ mhtml-mode."
 (defmacro c-state-cache-after-top-paren (&optional cache)
   ;; Return the position just after the latest brace/bracket/paren (whether
   ;; left or right) recorded in CACHE (default `c-state-cache') or nil.
+  (declare (debug t))
   (let ((cash (or cache 'c-state-cache)))
     `(if (consp (car ,cash))
         (cdar ,cash)
@@ -4487,6 +4492,7 @@ mhtml-mode."
 (defmacro c-state-maybe-marker (place marker)
   ;; If PLACE is non-nil, return a marker marking it, otherwise nil.
   ;; We (re)use MARKER.
+  (declare (debug (form symbolp)))
   `(let ((-place- ,place))
      (and -place-
          (or ,marker (setq ,marker (make-marker)))
@@ -5973,6 +5979,7 @@ comment at the start of cc-engine.el for more info."
 ; spots and the preceding token end.")
 
 (defmacro c-debug-put-decl-spot-faces (match-pos decl-pos)
+  (declare (debug t))
   (when (facep 'c-debug-decl-spot-face)
     `(c-save-buffer-state ((match-pos ,match-pos) (decl-pos ,decl-pos))
        (c-debug-add-face (max match-pos (point-min)) decl-pos
@@ -5980,6 +5987,7 @@ comment at the start of cc-engine.el for more info."
        (c-debug-add-face decl-pos (min (1+ decl-pos) (point-max))
                         'c-debug-decl-spot-face))))
 (defmacro c-debug-remove-decl-spot-faces (beg end)
+  (declare (debug t))
   (when (facep 'c-debug-decl-spot-face)
     `(c-save-buffer-state ()
        (c-debug-remove-face ,beg ,end 'c-debug-decl-spot-face)
@@ -7774,6 +7782,7 @@ comment at the start of cc-engine.el for more info."
 (defvar c-last-identifier-range nil)
 
 (defmacro c-record-type-id (range)
+  (declare (debug t))
   (if (eq (car-safe range) 'cons)
       ;; Always true.
       `(setq c-record-type-identifiers
@@ -7784,6 +7793,7 @@ comment at the start of cc-engine.el for more info."
                 (cons range c-record-type-identifiers))))))
 
 (defmacro c-record-ref-id (range)
+  (declare (debug t))
   (if (eq (car-safe range) 'cons)
       ;; Always true.
       `(setq c-record-ref-identifiers
@@ -7809,6 +7819,7 @@ comment at the start of cc-engine.el for more info."
   ;; if TYPE is 'type or as a reference if TYPE is 'ref.
   ;;
   ;; This macro might do hidden buffer changes.
+  (declare (debug t))
   `(let (res)
      (setq c-last-identifier-range nil)
      (while (if (setq res ,(if (eq type 'type)
@@ -7833,6 +7844,7 @@ comment at the start of cc-engine.el for more info."
   ;; `c-forward-keyword-prefixed-id'.
   ;;
   ;; This macro might do hidden buffer changes.
+  (declare (debug t))
   `(while (and (progn
                 ,(when update-safe-pos
                    '(setq safe-pos (point)))
@@ -8776,6 +8788,7 @@ comment at the start of cc-engine.el for more info."
 (defmacro c-pull-open-brace (ps)
   ;; Pull the next open brace from PS (which has the form of paren-state),
   ;; skipping over any brace pairs.  Returns NIL when PS is exhausted.
+  (declare (debug (symbolp)))
   `(progn
      (while (consp (car ,ps))
        (setq ,ps (cdr ,ps)))
@@ -8891,6 +8904,7 @@ comment at the start of cc-engine.el for more info."
   ;; a comma.  If either of <symbol> or bracketed <expression> is missing,
   ;; throw nil to 'level.  If the terminating } or ) is unmatched, throw nil
   ;; to 'done.  This is not a general purpose macro!
+  (declare (debug t))
   `(while (eq (char-before) ?,)
      (backward-char)
      (c-backward-syntactic-ws ,limit)
@@ -9284,6 +9298,7 @@ This function might do hidden buffer changes."
   ;; sometimes consumes the identifier in the declaration as a type.
   ;; This is used to "backtrack" and make the last type be treated as
   ;; an identifier instead.
+  (declare (debug nil))
   `(progn
      ,(unless short
        ;; These identifiers are bound only in the inner let.
@@ -14687,18 +14702,6 @@ Cannot combine absolute offsets %S and %S in `add' 
method"
       indent)))
 
 
-(def-edebug-spec c-bos-pop-state t)
-(def-edebug-spec c-bos-save-error-info t)
-(def-edebug-spec c-state-cache-top-lparen t)
-(def-edebug-spec c-state-cache-top-paren t)
-(def-edebug-spec c-state-cache-after-top-paren t)
-(def-edebug-spec c-state-maybe-marker (form symbolp))
-(def-edebug-spec c-record-type-id t)
-(def-edebug-spec c-record-ref-id t)
-(def-edebug-spec c-forward-keyword-prefixed-id t)
-(def-edebug-spec c-forward-id-comma-list t)
-(def-edebug-spec c-pull-open-brace (symbolp))
-
 (cc-provide 'cc-engine)
 
 ;; Local Variables:
diff --git a/lisp/progmodes/cc-fonts.el b/lisp/progmodes/cc-fonts.el
index 433b4dc..fdef084 100644
--- a/lisp/progmodes/cc-fonts.el
+++ b/lisp/progmodes/cc-fonts.el
@@ -218,6 +218,7 @@
     ;; incorrectly.
     ;;
     ;; This function does a hidden buffer change.
+    (declare (debug t))
     (if (fboundp 'font-lock-set-face)
        ;; Note: This function has no docstring in XEmacs so it might be
        ;; considered internal.
@@ -228,6 +229,7 @@
     ;; This is the inverse of `c-put-font-lock-face'.
     ;;
     ;; This function does a hidden buffer change.
+    (declare (debug t))
     (if (fboundp 'font-lock-remove-face)
        `(font-lock-remove-face ,from ,to)
       `(remove-text-properties ,from ,to '(face nil))))
@@ -238,11 +240,13 @@
     ;; region should include them.
     ;;
     ;; This function does a hidden buffer change.
+    (declare (debug t))
     (if (featurep 'xemacs)
        `(c-put-font-lock-face (1+ ,from) (1- ,to) 'font-lock-string-face)
       `(c-put-font-lock-face ,from ,to 'font-lock-string-face)))
 
   (defmacro c-fontify-types-and-refs (varlist &rest body)
+    (declare (indent 1) (debug let*))
     ;; Like `let', but additionally activates `c-record-type-identifiers'
     ;; and `c-record-ref-identifiers', and fontifies the recorded ranges
     ;; accordingly on exit.
@@ -253,7 +257,6 @@
           ,@varlist)
        (prog1 (progn ,@body)
         (c-fontify-recorded-types-and-refs))))
-  (put 'c-fontify-types-and-refs 'lisp-indent-function 1)
 
   (defun c-skip-comments-and-strings (limit)
     ;; If the point is within a region fontified as a comment or
@@ -482,20 +485,7 @@
          ;; In the next form, check that point hasn't been moved beyond
          ;; `limit' in any of the above stanzas.
          ,(c-make-font-lock-search-form (car normal) (cdr normal) t)
-         nil))))
-
-;  (eval-after-load "edebug" ; 2006-07-09: def-edebug-spec is now in subr.el.
-;    '(progn
-(def-edebug-spec c-put-font-lock-face t)
-(def-edebug-spec c-remove-font-lock-face t)
-(def-edebug-spec c-put-font-lock-string-face t)
-  (def-edebug-spec c-fontify-types-and-refs let*)
-  (def-edebug-spec c-make-syntactic-matcher t)
-  ;; If there are literal quoted or backquoted highlight specs in
-  ;; the call to `c-make-font-lock-search-function' then let's
-  ;; instrument the forms in them.
-  (def-edebug-spec c-make-font-lock-search-function
-    (form &rest &or ("quote" (&rest form)) ("`" (&rest form)) form)));))
+         nil)))))
 
 (defun c-fontify-recorded-types-and-refs ()
   ;; Convert the ranges recorded on `c-record-type-identifiers' and
@@ -2712,6 +2702,7 @@ need for `pike-font-lock-extra-types'.")
 (defmacro c-set-doc-comment-re-element (suffix)
   ;; Set the variable `c-doc-line-join-re' to a buffer local value suitable
   ;; for the current doc comment style, or kill the local value.
+  (declare (debug t))
   (let ((var (intern (concat "c-doc" suffix))))
     `(let* ((styles (c-get-doc-comment-style))
            elts)
@@ -2738,6 +2729,7 @@ need for `pike-font-lock-extra-types'.")
 (defmacro c-set-doc-comment-char-list (suffix)
   ;; Set the variable 'c-doc-<suffix>' to the list of *-<suffix>, which must
   ;; be characters, and * represents the doc comment style.
+  (declare (debug t))
   (let ((var (intern (concat "c-doc" suffix))))
     `(let* ((styles (c-get-doc-comment-style))
            elts)
@@ -2783,7 +2775,7 @@ need for `pike-font-lock-extra-types'.")
   ;; is used as a flag in other code to skip comments.
   ;;
   ;; This function might do hidden buffer changes.
-
+  (declare (indent 2))
   (let (comment-beg region-beg)
     (if (memq (get-text-property (point) 'face)
              '(font-lock-comment-face font-lock-comment-delimiter-face))
@@ -2866,7 +2858,6 @@ need for `pike-font-lock-extra-types'.")
 
          (goto-char region-end)))))
   nil)
-(put 'c-font-lock-doc-comments 'lisp-indent-function 2)
 
 (defun c-find-invalid-doc-markup (regexp limit)
   ;; Used to fontify invalid markup in doc comments after the correct
diff --git a/lisp/progmodes/cc-guess.el b/lisp/progmodes/cc-guess.el
index 0824af6..9c88c14 100644
--- a/lisp/progmodes/cc-guess.el
+++ b/lisp/progmodes/cc-guess.el
@@ -58,7 +58,7 @@
 ;;
 ;; If you want to reuse the guessed style in future emacs sessions,
 ;; you may want to put it to your .emacs. `c-guess-view' is for
-;; you. It emits emacs lisp code which defines the last guessed
+;; you. It emits Emacs Lisp code which defines the last guessed
 ;; style, in a temporary buffer. You can put the emitted code into
 ;; your .emacs. This command was suggested by Alan Mackenzie.
 
@@ -527,7 +527,7 @@ is called with one argument, the guessed style."
            (cdr needs-markers)))))
 
 (defun c-guess-view (&optional with-name)
-  "Emit emacs lisp code which defines the last guessed style.
+  "Emit Emacs Lisp code which defines the last guessed style.
 So you can put the code into .emacs if you prefer the
 guessed code.
 \"STYLE NAME HERE\" is used as the name for the style in the
diff --git a/lisp/progmodes/cc-langs.el b/lisp/progmodes/cc-langs.el
index 4266600..f664849 100644
--- a/lisp/progmodes/cc-langs.el
+++ b/lisp/progmodes/cc-langs.el
@@ -159,7 +159,9 @@ evaluated and bound to VAR when the result from the macro
 `c-lang-const' is typically used in VAL to get the right value for the
 language being initialized, and such calls will be macro expanded to
 the evaluated constant value at compile time."
-
+  (declare (indent defun)
+          (debug (&define name def-form
+                          &optional &or ("quote" symbolp) stringp)))
   (when (and (not doc)
             (eq (car-safe val) 'c-lang-const)
             (eq (nth 1 val) var)
@@ -191,6 +193,7 @@ Emacs variable like `comment-start'.
 `c-lang-const' is typically used in VAL to get the right value for the
 language being initialized, and such calls will be macro expanded to
 the evaluated constant value at compile time."
+  (declare (debug (&define name def-form)))
   (let ((elem (assq var (cdr c-emacs-variable-inits))))
     (if elem
        (setcdr elem (list val)) ; Maybe remove "list", sometime. 2006-07-19
@@ -200,13 +203,6 @@ the evaluated constant value at compile time."
   ;; Return the symbol, like the other def* forms.
   `',var)
 
-(put 'c-lang-defvar 'lisp-indent-function 'defun)
-; (eval-after-load "edebug" ; 2006-07-09: def-edebug-spec is now in subr.el.
-;  '
-(def-edebug-spec c-lang-defvar
-  (&define name def-form &optional &or ("quote" symbolp) stringp))
-(def-edebug-spec c-lang-setvar (&define name def-form))
-
 ;; Suppress "might not be defined at runtime" warning.
 ;; This file is only used when compiling other cc files.
 (declare-function cl-delete-duplicates "cl-seq" (cl-seq &rest cl-keys))
@@ -379,12 +375,14 @@ The syntax tables aren't stored directly since they're 
quite large."
        (let ((table (make-syntax-table)))
         (c-populate-syntax-table table)
         ;; Mode specific syntaxes.
-        ,(cond ((or (c-major-mode-is 'objc-mode) (c-major-mode-is 'java-mode))
+        ,(cond ((c-major-mode-is 'objc-mode)
                 ;; Let '@' be part of symbols in ObjC to cope with
                 ;; its compiler directives as single keyword tokens.
                 ;; This is then necessary since it's assumed that
                 ;; every keyword is a single symbol.
                 '(modify-syntax-entry ?@ "_" table))
+               ((c-major-mode-is 'java-mode)
+                '(modify-syntax-entry ?@ "'" table))
                ((c-major-mode-is 'pike-mode)
                 '(modify-syntax-entry ?@ "." table)))
         table)))
@@ -4092,6 +4090,7 @@ accomplish that conveniently."
 This macro is expanded at compile time to a form tailored for the mode
 in question, so MODE must be a constant.  Therefore MODE is not
 evaluated and should not be quoted."
+  (declare (debug nil))
   `(funcall ,(c-make-init-lang-vars-fun mode)))
 
 
diff --git a/lisp/progmodes/cc-mode.el b/lisp/progmodes/cc-mode.el
index dae0062..a8f1662 100644
--- a/lisp/progmodes/cc-mode.el
+++ b/lisp/progmodes/cc-mode.el
@@ -969,6 +969,7 @@ Note that the style variables are always made local to the 
buffer."
 (defmacro c-run-mode-hooks (&rest hooks)
   ;; Emacs 21.1 has introduced a system with delayed mode hooks that
   ;; requires the use of the new function `run-mode-hooks'.
+  (declare (debug t))
   (if (cc-bytecomp-fboundp 'run-mode-hooks)
       `(run-mode-hooks ,@hooks)
     `(progn ,@(mapcar (lambda (hook) `(run-hooks ,hook)) hooks))))
@@ -2503,6 +2504,7 @@ This function is called from `c-common-init', once per 
mode initialization."
 
 ;; Emacs < 22 and XEmacs
 (defmacro c-advise-fl-for-region (function)
+  (declare (debug t))
   `(defadvice ,function (before get-awk-region activate)
      ;; Make sure that any string/regexp is completely font-locked.
      (when c-buffer-is-cc-mode
diff --git a/lisp/progmodes/glasses.el b/lisp/progmodes/glasses.el
index a0f5d36..cd92175 100644
--- a/lisp/progmodes/glasses.el
+++ b/lisp/progmodes/glasses.el
@@ -321,10 +321,6 @@ separators (like underscores) at places they belong to."
        (remove-hook 'write-file-functions
                     'glasses-convert-to-unreadable t)))))
 
-
-;;; Announce
-
 (provide 'glasses)
 
-
 ;;; glasses.el ends here
diff --git a/lisp/progmodes/gud.el b/lisp/progmodes/gud.el
index b105cba..a37477d 100644
--- a/lisp/progmodes/gud.el
+++ b/lisp/progmodes/gud.el
@@ -293,6 +293,10 @@ Used to gray out relevant toolbar icons.")
       (tool-bar-local-item-from-menu
        (car x) (cdr x) map gud-minor-mode-map))))
 
+(defvar gud-repeat-map (make-sparse-keymap)
+  "Keymap to repeat gud stepping instructions `C-x C-a C-n n n'.
+Used in `repeat-mode'.")
+
 (defun gud-file-name (f)
   "Transform a relative file name to an absolute file name.
 Uses `gud-<MINOR-MODE>-directories' to find the source files."
@@ -784,6 +788,17 @@ the buffer in which this command was invoked."
   (gud-def gud-until  "until %l" "\C-u" "Continue to current line.")
   (gud-def gud-run    "run"     nil    "Run the program.")
 
+  (dolist (cmd '(("n" . gud-next)
+                 ("s" . gud-step)
+                 ("i" . gud-stepi)
+                 ("c" . gud-cont)
+                 ("l" . gud-refresh)
+                 ("f" . gud-finish)
+                 ("<" . gud-up)
+                 (">" . gud-down)))
+    (define-key gud-repeat-map (car cmd) (cdr cmd))
+    (put (cdr cmd) 'repeat-map 'gud-repeat-map))
+
   (add-hook 'completion-at-point-functions #'gud-gdb-completion-at-point
             nil 'local)
   (setq-local gud-gdb-completion-function 'gud-gdb-completions)
diff --git a/lisp/progmodes/idlw-shell.el b/lisp/progmodes/idlw-shell.el
index 134a6c6..ad8feb9 100644
--- a/lisp/progmodes/idlw-shell.el
+++ b/lisp/progmodes/idlw-shell.el
@@ -1,4 +1,4 @@
-;; idlw-shell.el --- run IDL as an inferior process of Emacs.  -*- 
lexical-binding:t -*-
+;;; idlw-shell.el --- run IDL as an inferior process of Emacs.  -*- 
lexical-binding:t -*-
 
 ;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/progmodes/idlwave.el b/lisp/progmodes/idlwave.el
index 75f2016..b55a98a 100644
--- a/lisp/progmodes/idlwave.el
+++ b/lisp/progmodes/idlwave.el
@@ -1,4 +1,4 @@
-;; idlwave.el --- IDL editing mode for GNU Emacs  -*- lexical-binding: t; -*-
+;;; idlwave.el --- IDL editing mode for GNU Emacs  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/progmodes/js.el b/lisp/progmodes/js.el
index eb690a7..a942235 100644
--- a/lisp/progmodes/js.el
+++ b/lisp/progmodes/js.el
@@ -494,10 +494,11 @@ for preventing Firefox from stealing the keyboard focus."
   :type 'boolean)
 
 (defcustom js-js-tmpdir
-  "~/.emacs.d/js/js"
+  (locate-user-emacs-file "js/js")
   "Temporary directory used by `js-mode' to communicate with Mozilla.
 This directory must be readable and writable by both Mozilla and Emacs."
-  :type 'directory)
+  :type 'directory
+  :version "28.1")
 
 (defcustom js-js-timeout 5
   "Reply timeout for executing commands in Mozilla via `js-mode'.
@@ -4654,4 +4655,4 @@ one of the aforementioned options instead of using this 
mode."
 
 (provide 'js)
 
-;; js.el ends here
+;;; js.el ends here
diff --git a/lisp/progmodes/meta-mode.el b/lisp/progmodes/meta-mode.el
index a590148..5026844 100644
--- a/lisp/progmodes/meta-mode.el
+++ b/lisp/progmodes/meta-mode.el
@@ -942,9 +942,6 @@ The environment marked is the one that contains point or 
follows point."
               (list (list "\\<\\(\\sw+\\)" 1 'meta-symbol-list)
                     (list "" 'ispell-complete-word))))
 
-
-;;; Just in case ...
-
 (provide 'meta-mode)
 (run-hooks 'meta-mode-load-hook)
 
diff --git a/lisp/progmodes/project.el b/lisp/progmodes/project.el
index a819e72..1d0d1bc 100644
--- a/lisp/progmodes/project.el
+++ b/lisp/progmodes/project.el
@@ -296,7 +296,7 @@ to find the list of ignores for each directory."
          ;; Make sure ~/ etc. in local directory name is
          ;; expanded and not left for the shell command
          ;; to interpret.
-         (localdir (file-local-name (expand-file-name dir)))
+         (localdir (file-name-unquote (file-local-name (expand-file-name 
dir))))
          (command (format "%s %s %s -type f %s -print0"
                           find-program
                           ;; In case DIR is a symlink.
@@ -311,16 +311,25 @@ to find the list of ignores for each directory."
                                        (concat " -o " find-name-arg " "))
                                       " "
                                       (shell-quote-argument ")"))
-                            ""))))
+                            "")))
+         (output (with-output-to-string
+                   (with-current-buffer standard-output
+                     (let ((status
+                            (process-file-shell-command command nil t)))
+                       (unless (zerop status)
+                         (error "File listing failed: %s" 
(buffer-string))))))))
     (project--remote-file-names
-     (sort (split-string (shell-command-to-string command) "\0" t)
+     (sort (split-string output "\0" t)
            #'string<))))
 
 (defun project--remote-file-names (local-files)
-  "Return LOCAL-FILES as if they were on the system of `default-directory'."
+  "Return LOCAL-FILES as if they were on the system of `default-directory'.
+Also quote LOCAL-FILES if `default-directory' is quoted."
   (let ((remote-id (file-remote-p default-directory)))
     (if (not remote-id)
-        local-files
+        (if (file-name-quoted-p default-directory)
+            (mapcar #'file-name-quote local-files)
+          local-files)
       (mapcar (lambda (file)
                 (concat remote-id file))
               local-files))))
@@ -778,7 +787,11 @@ pattern to search for."
 (defun project--find-regexp-in-files (regexp files)
   (unless files
     (user-error "Empty file list"))
-  (let ((xrefs (xref-matches-in-files regexp files)))
+  (let ((xrefs (xref-matches-in-files
+                regexp
+                ;; FIXME: `xref-matches-in-files' should work with
+                ;; quoted filenames.
+                (mapcar #'file-name-unquote files))))
     (unless xrefs
       (user-error "No matches for: %s" regexp))
     xrefs))
diff --git a/lisp/progmodes/python.el b/lisp/progmodes/python.el
index 30721c7..20ec339 100644
--- a/lisp/progmodes/python.el
+++ b/lisp/progmodes/python.el
@@ -247,8 +247,6 @@
 ;; I'd recommend the first one since you'll get the same behavior for
 ;; all modes out-of-the-box.
 
-;;; TODO:
-
 ;;; Code:
 
 (require 'ansi-color)
diff --git a/lisp/progmodes/sql.el b/lisp/progmodes/sql.el
index 6e53a04..65a4094 100644
--- a/lisp/progmodes/sql.el
+++ b/lisp/progmodes/sql.el
@@ -5606,7 +5606,7 @@ The default value disables the internal pager."
 
 (provide 'sql)
 
-;;; sql.el ends here
-
 ; LocalWords:  sql SQL SQLite sqlite Sybase Informix MySQL
 ; LocalWords:  Postgres SQLServer SQLi
+
+;;; sql.el ends here
diff --git a/lisp/progmodes/xref.el b/lisp/progmodes/xref.el
index cada1f1..3d2f21a 100644
--- a/lisp/progmodes/xref.el
+++ b/lisp/progmodes/xref.el
@@ -1416,7 +1416,8 @@ IGNORES is a list of glob patterns for files to ignore."
        (command (xref--rgrep-command (xref--regexp-to-extended regexp)
                                      files
                                      (file-name-as-directory
-                                      (file-local-name (expand-file-name dir)))
+                                      (file-name-unquote
+                                       (file-local-name (expand-file-name 
dir))))
                                      ignores))
        (def default-directory)
        (buf (get-buffer-create " *xref-grep*"))
diff --git a/lisp/repeat.el b/lisp/repeat.el
index f1b20d3..b7118cc 100644
--- a/lisp/repeat.el
+++ b/lisp/repeat.el
@@ -348,17 +348,22 @@ For example, you can set it to <return> like 
`isearch-exit'."
   :group 'convenience
   :version "28.1")
 
-(defcustom repeat-mode-echo #'repeat-mode-message
+(defcustom repeat-echo-function #'repeat-echo-message
   "Function to display a hint about available keys.
 Function is called after every repeatable command with one argument:
-a string with a list of keys."
+a repeating map, or nil after deactivating the repeat mode."
   :type '(choice (const :tag "Show hints in the echo area"
-                        repeat-mode-message)
-                 (const :tag "Don't show hints" ignore)
+                        repeat-echo-message)
+                 (const :tag "Show indicator in the mode line"
+                        repeat-echo-mode-line)
+                 (const :tag "No visual feedback" ignore)
                  (function :tag "Function"))
   :group 'convenience
   :version "28.1")
 
+(defvar repeat-in-progress nil
+  "Non-nil when the repeating map is active.")
+
 ;;;###autoload
 (defvar repeat-map nil
   "The value of the repeating map for the next command.
@@ -386,51 +391,73 @@ When Repeat mode is enabled, and the command symbol has 
the property named
 
 (defun repeat-post-hook ()
   "Function run after commands to set transient keymap for repeatable keys."
-  (when repeat-mode
-    (let ((rep-map (or repeat-map
-                       (and (symbolp real-this-command)
-                            (get real-this-command 'repeat-map)))))
-      (when rep-map
-        (when (boundp rep-map)
-          (setq rep-map (symbol-value rep-map)))
-        (let ((map (copy-keymap rep-map))
-              keys)
-
-          ;; Exit when the last char is not among repeatable keys,
-          ;; so e.g. `C-x u u' repeats undo, whereas `C-/ u' doesn't.
-          (when (and (zerop (minibuffer-depth)) ; avoid remapping in prompts
-                     (or (lookup-key map (this-command-keys-vector))
-                         prefix-arg))
-
-            ;; Messaging
-            (unless prefix-arg
-              (map-keymap (lambda (key _) (push key keys)) map)
-              (let ((mess (format-message
-                           "Repeat with %s%s"
-                           (mapconcat (lambda (key)
-                                        (key-description (vector key)))
-                                      keys ", ")
-                           (if repeat-exit-key
-                               (format ", or exit with %s"
-                                       (key-description repeat-exit-key))
-                             ""))))
-                (funcall repeat-mode-echo mess)))
-
-            ;; Adding an exit key
-            (when repeat-exit-key
-              (define-key map repeat-exit-key 'ignore))
-
-            (when (and repeat-keep-prefix (not prefix-arg))
-              (setq prefix-arg current-prefix-arg))
-
-            (set-transient-map map))))))
-  (setq repeat-map nil))
-
-(defun repeat-mode-message (mess)
-  "Function that displays available repeating keys in the echo area."
-  (if (current-message)
-      (message "%s [%s]" (current-message) mess)
-    (message mess)))
+  (let ((was-in-progress repeat-in-progress))
+    (setq repeat-in-progress nil)
+    (when repeat-mode
+      (let ((rep-map (or repeat-map
+                         (and (symbolp real-this-command)
+                              (get real-this-command 'repeat-map)))))
+        (when rep-map
+          (when (boundp rep-map)
+            (setq rep-map (symbol-value rep-map)))
+          (let ((map (copy-keymap rep-map)))
+
+            ;; Exit when the last char is not among repeatable keys,
+            ;; so e.g. `C-x u u' repeats undo, whereas `C-/ u' doesn't.
+            (when (and (zerop (minibuffer-depth)) ; avoid remapping in prompts
+                       (or (lookup-key map (this-command-keys-vector))
+                           prefix-arg))
+
+              ;; Messaging
+              (unless prefix-arg
+                (funcall repeat-echo-function map))
+
+              ;; Adding an exit key
+              (when repeat-exit-key
+                (define-key map repeat-exit-key 'ignore))
+
+              (when (and repeat-keep-prefix (not prefix-arg))
+                (setq prefix-arg current-prefix-arg))
+
+              (setq repeat-in-progress t)
+              (set-transient-map map))))))
+
+    (setq repeat-map nil)
+    (when (and was-in-progress (not repeat-in-progress))
+      (funcall repeat-echo-function nil))))
+
+(defun repeat-echo-message-string (map)
+  "Return a string with a list of repeating keys."
+  (let (keys)
+    (map-keymap (lambda (key _) (push key keys)) map)
+    (format-message "Repeat with %s%s"
+                    (mapconcat (lambda (key)
+                                 (key-description (vector key)))
+                               keys ", ")
+                    (if repeat-exit-key
+                        (format ", or exit with %s"
+                                (key-description repeat-exit-key))
+                      ""))))
+
+(defun repeat-echo-message (map)
+  "Display available repeating keys in the echo area."
+  (when map
+    (let ((mess (repeat-echo-message-string map)))
+      (if (current-message)
+          (message "%s [%s]" (current-message) mess)
+        (message mess)))))
+
+(defvar repeat-echo-mode-line-string
+  (propertize "[Repeating...] " 'face 'mode-line-emphasis)
+  "String displayed in the mode line in repeating mode.")
+
+(defun repeat-echo-mode-line (map)
+  "Display the repeat indicator in the mode line."
+  (if map
+      (unless (assq 'repeat-in-progress mode-line-modes)
+        (add-to-list 'mode-line-modes (list 'repeat-in-progress
+                                            repeat-echo-mode-line-string)))
+    (force-mode-line-update t)))
 
 (provide 'repeat)
 
diff --git a/lisp/ses.el b/lisp/ses.el
index 6058d48..98785b6 100644
--- a/lisp/ses.el
+++ b/lisp/ses.el
@@ -1,4 +1,4 @@
-;;; ses.el -- Simple Emacs Spreadsheet  -*- lexical-binding:t -*-
+;;; ses.el --- Simple Emacs Spreadsheet  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/speedbar.el b/lisp/speedbar.el
index 12e57b1..4666026 100644
--- a/lisp/speedbar.el
+++ b/lisp/speedbar.el
@@ -1,4 +1,4 @@
-;;; speedbar --- quick access to files and tags in a frame  -*- 
lexical-binding: t; -*-
+;;; speedbar.el --- quick access to files and tags in a frame  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 1996-2021 Free Software Foundation, Inc.
 
@@ -4055,7 +4055,6 @@ this version is not backward compatible to 0.14 or 
earlier.")
 
 (provide 'speedbar)
 
-;; run load-time hooks
 (run-hooks 'speedbar-load-hook)
 
-;;; speedbar ends here
+;;; speedbar.el ends here
diff --git a/lisp/term/konsole.el b/lisp/term/konsole.el
index e38a5d3..1f65a46 100644
--- a/lisp/term/konsole.el
+++ b/lisp/term/konsole.el
@@ -9,4 +9,4 @@
 
 (provide 'term/konsole)
 
-;; konsole.el ends here
+;;; konsole.el ends here
diff --git a/lisp/term/linux.el b/lisp/term/linux.el
index 35bd3ac..c6d84ab 100644
--- a/lisp/term/linux.el
+++ b/lisp/term/linux.el
@@ -1,4 +1,6 @@
-;; The Linux console handles Latin-1 by default.  -*- lexical-binding:t -*-
+;;; linux.el  -*- lexical-binding:t -*-
+
+;; The Linux console handles Latin-1 by default.
 
 (declare-function gpm-mouse-enable "t-mouse" ())
 
diff --git a/lisp/term/lk201.el b/lisp/term/lk201.el
index 3bcaa2e..c280247 100644
--- a/lisp/term/lk201.el
+++ b/lisp/term/lk201.el
@@ -1,4 +1,4 @@
-;; Define function key sequences for DEC terminals.  -*- lexical-binding: t -*-
+;;; lk201.el --- Define function key sequences for DEC terminals.  -*- 
lexical-binding: t -*-
 
 (defvar lk201-function-map
   (let ((map (make-sparse-keymap)))
diff --git a/lisp/term/screen.el b/lisp/term/screen.el
index 04481e8..9655f41 100644
--- a/lisp/term/screen.el
+++ b/lisp/term/screen.el
@@ -22,4 +22,4 @@ it runs, which can change when the screen session is moved to 
another tty."
 
 (provide 'term/screen)
 
-;; screen.el ends here
+;;; screen.el ends here
diff --git a/lisp/term/st.el b/lisp/term/st.el
index 08432c4..9a1c064 100644
--- a/lisp/term/st.el
+++ b/lisp/term/st.el
@@ -17,4 +17,4 @@
 
 (provide 'term/st)
 
-;; st.el ends here
+;;; st.el ends here
diff --git a/lisp/term/tmux.el b/lisp/term/tmux.el
index aa0c983..4ea6f41 100644
--- a/lisp/term/tmux.el
+++ b/lisp/term/tmux.el
@@ -22,4 +22,4 @@ it runs, which can change when the tmux session is moved to 
another tty."
 
 (provide 'term/tmux)
 
-;; tmux.el ends here
+;;; tmux.el ends here
diff --git a/lisp/term/w32console.el b/lisp/term/w32console.el
index 4a925cd..1a5dc05 100644
--- a/lisp/term/w32console.el
+++ b/lisp/term/w32console.el
@@ -1,4 +1,4 @@
-;;; w32console.el -- Setup w32 console keys and colors.  -*- lexical-binding: 
t; -*-
+;;; w32console.el --- Setup w32 console keys and colors.  -*- lexical-binding: 
t; -*-
 
 ;; Copyright (C) 2007-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/textmodes/artist.el b/lisp/textmodes/artist.el
index fbb9d21..d9a83c5 100644
--- a/lisp/textmodes/artist.el
+++ b/lisp/textmodes/artist.el
@@ -33,7 +33,7 @@
 ;; What is artist?
 ;; ---------------
 ;;
-;; Artist is an Emacs lisp package that allows you to draw lines,
+;; Artist is an Emacs Lisp package that allows you to draw lines,
 ;; rectangles and ellipses by using your mouse and/or keyboard.  The
 ;; shapes are made up with the ascii characters |, -, / and \.
 ;;
diff --git a/lisp/textmodes/bibtex-style.el b/lisp/textmodes/bibtex-style.el
index 6d01871..27b2e0e 100644
--- a/lisp/textmodes/bibtex-style.el
+++ b/lisp/textmodes/bibtex-style.el
@@ -24,7 +24,6 @@
 
 ;; Done: font-lock, imenu, outline, commenting, indentation.
 ;; Todo: tab-completion.
-;; Bugs:
 
 ;;; Code:
 
diff --git a/lisp/textmodes/bibtex.el b/lisp/textmodes/bibtex.el
index f01c66b..31186fb 100644
--- a/lisp/textmodes/bibtex.el
+++ b/lisp/textmodes/bibtex.el
@@ -5608,8 +5608,5 @@ If APPEND is non-nil, append ENTRIES to those already 
displayed."
   (setq buffer-read-only t)
   (goto-char (point-min)))
 
-
-;; Make BibTeX a Feature
-
 (provide 'bibtex)
 ;;; bibtex.el ends here
diff --git a/lisp/textmodes/makeinfo.el b/lisp/textmodes/makeinfo.el
index 8152f4b..653540a 100644
--- a/lisp/textmodes/makeinfo.el
+++ b/lisp/textmodes/makeinfo.el
@@ -284,7 +284,6 @@ line LINE of the window, or centered if LINE is nil."
       (pop-to-buffer old-buffer)
       )))
 
-;;; Place `provide' at end of file.
 (provide 'makeinfo)
 
 ;;; makeinfo.el ends here
diff --git a/lisp/textmodes/page.el b/lisp/textmodes/page.el
index e1d7fb7..b86a2f1 100644
--- a/lisp/textmodes/page.el
+++ b/lisp/textmodes/page.el
@@ -170,8 +170,6 @@ point, respectively."
   (interactive)
   (apply #'message (cons "Page %d, line %d" (page--what-page))))
 
-
-;;; Place `provide' at end of file.
 (provide 'page)
 
 ;;; page.el ends here
diff --git a/lisp/textmodes/paragraphs.el b/lisp/textmodes/paragraphs.el
index 31e91c7..59b15e8 100644
--- a/lisp/textmodes/paragraphs.el
+++ b/lisp/textmodes/paragraphs.el
@@ -202,8 +202,6 @@ This is desirable in modes where blank lines are the 
paragraph delimiters."
 (put 'paragraph-ignore-fill-prefix 'safe-local-variable #'booleanp)
 
 ;; Silence the compiler.
-(defvar multiple-lines)
-
 (defun forward-paragraph (&optional arg)
   "Move forward to end of paragraph.
 With argument ARG, do it ARG times;
@@ -262,13 +260,13 @@ Returns the count of paragraphs left to move."
          ;; Search back for line that starts or separates paragraphs.
          (if (if fill-prefix-regexp
                  ;; There is a fill prefix; it overrides parstart.
-                 (let (multiple-lines)
+                 (let () ;; multiple-lines
                    (while (and (progn (beginning-of-line) (not (bobp)))
                                (progn (move-to-left-margin)
                                       (not (looking-at parsep)))
                                (looking-at fill-prefix-regexp))
-                     (unless (= (point) start)
-                       (setq multiple-lines t))
+                     ;; (unless (= (point) start)
+                     ;;   (setq multiple-lines t))
                      (forward-line -1))
                    (move-to-left-margin)
                    ;; This deleted code caused a long hanging-indent line
diff --git a/lisp/textmodes/remember.el b/lisp/textmodes/remember.el
index 8a0436a..4acdc9f 100644
--- a/lisp/textmodes/remember.el
+++ b/lisp/textmodes/remember.el
@@ -1,4 +1,4 @@
-;;; remember --- a mode for quickly jotting down things to remember  -*- 
lexical-binding: t; -*-
+;;; remember.el --- a mode for quickly jotting down things to remember  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 1999-2001, 2003-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/textmodes/table.el b/lisp/textmodes/table.el
index 13b4a6d..2dd52b8 100644
--- a/lisp/textmodes/table.el
+++ b/lisp/textmodes/table.el
@@ -383,7 +383,7 @@
 ;; There is no artificial-intelligence magic in this package.  The
 ;; definition of a table and the cells inside the table is reasonably
 ;; limited in order to achieve acceptable performance in the
-;; interactive operation under Emacs lisp implementation.  A valid
+;; interactive operation under Emacs Lisp implementation.  A valid
 ;; table is a rectangular text area completely filled with valid
 ;; cells.  A valid cell is a rectangle text area, which four borders
 ;; consist of valid border characters.  Cells can not be nested one to
diff --git a/lisp/textmodes/tex-mode.el b/lisp/textmodes/tex-mode.el
index fb57b9b..8d7f459 100644
--- a/lisp/textmodes/tex-mode.el
+++ b/lisp/textmodes/tex-mode.el
@@ -28,7 +28,6 @@
 
 ;;; Code:
 
-;; Pacify the byte-compiler
 (eval-when-compile
   (require 'compare-w)
   (require 'cl-lib)
diff --git a/lisp/textmodes/texinfmt.el b/lisp/textmodes/texinfmt.el
index a797df9..977f3ba 100644
--- a/lisp/textmodes/texinfmt.el
+++ b/lisp/textmodes/texinfmt.el
@@ -23,9 +23,9 @@
 
 ;;; Commentary:
 
-;;; Code:
+;;; Emacs Lisp functions to convert Texinfo files to Info files.
 
-;;; Emacs lisp functions to convert Texinfo files to Info files.
+;;; Code:
 
 (defvar texinfmt-version "2.42 of  7 Jul 2006")
 (make-obsolete-variable 'texinfmt-version 'emacs-version "28.1")
@@ -4310,8 +4310,6 @@ For example, invoke
            (setq error 1))))
       (kill-emacs error))))
 
-
-;;; Place `provide' at end of file.
 (provide 'texinfmt)
 
 ;;; texinfmt.el ends here
diff --git a/lisp/textmodes/texnfo-upd.el b/lisp/textmodes/texnfo-upd.el
index 27807a9..0300454 100644
--- a/lisp/textmodes/texnfo-upd.el
+++ b/lisp/textmodes/texnfo-upd.el
@@ -2112,8 +2112,6 @@ chapter."
 
   (message "Multiple files updated."))
 
-
-;; Place `provide' at end of file.
 (provide 'texnfo-upd)
 
 ;;; texnfo-upd.el ends here
diff --git a/lisp/textmodes/tildify.el b/lisp/textmodes/tildify.el
index 163978b..01e2ad7 100644
--- a/lisp/textmodes/tildify.el
+++ b/lisp/textmodes/tildify.el
@@ -503,8 +503,6 @@ variable will be set to the representation."
     (remove-hook 'post-self-insert-hook #'tildify-space t)))
 
 
-;;; *** Announce ***
-
 (provide 'tildify)
 
 ;;; tildify.el ends here
diff --git a/lisp/textmodes/two-column.el b/lisp/textmodes/two-column.el
index 6c3bacc..5a3a64a 100644
--- a/lisp/textmodes/two-column.el
+++ b/lisp/textmodes/two-column.el
@@ -319,16 +319,17 @@ first and the associated buffer to its right."
 
 
 ;;;###autoload
-(defun 2C-associate-buffer ()
-  "Associate another buffer with this one in two-column minor mode.
+(defun 2C-associate-buffer (buffer)
+  "Associate another BUFFER with this one in two-column minor mode.
 Can also be used to associate a just previously visited file, by
 accepting the proposed default buffer.
 
 \(See  \\[describe-mode] .)"
-  (interactive)
+  (interactive
+   (list (or (2C-other)
+            (read-buffer "Associate buffer: " (other-buffer)))))
   (let ((b1 (current-buffer))
-       (b2 (or (2C-other)
-               (read-buffer "Associate buffer: " (other-buffer)))))
+       (b2 buffer))
     (setq 2C-mode nil)
     (with-current-buffer b2
       (and (2C-other)
diff --git a/lisp/uniquify.el b/lisp/uniquify.el
index 1d513d6..7cc0168 100644
--- a/lisp/uniquify.el
+++ b/lisp/uniquify.el
@@ -498,8 +498,6 @@ For use on `kill-buffer-hook'."
            (file-name-directory filename) retval)))
     retval))
 
-;;; The End
-
 (defun uniquify-unload-function ()
   "Unload the uniquify library."
   (save-current-buffer
diff --git a/lisp/url/url-mailto.el b/lisp/url/url-mailto.el
index c6901d9..29c2780 100644
--- a/lisp/url/url-mailto.el
+++ b/lisp/url/url-mailto.el
@@ -1,4 +1,4 @@
-;;; url-mail.el --- Mail Uniform Resource Locator retrieval code  -*- 
lexical-binding: t; -*-
+;;; url-mailto.el --- Mail Uniform Resource Locator retrieval code  -*- 
lexical-binding: t; -*-
 
 ;; Copyright (C) 1996-1999, 2004-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/vc/vc-dispatcher.el b/lisp/vc/vc-dispatcher.el
index 2b477df..87ca542 100644
--- a/lisp/vc/vc-dispatcher.el
+++ b/lisp/vc/vc-dispatcher.el
@@ -1,4 +1,4 @@
-;;; vc-dispatcher.el -- generic command-dispatcher facility.  -*- 
lexical-binding: t -*-
+;;; vc-dispatcher.el --- generic command-dispatcher facility.  -*- 
lexical-binding: t -*-
 
 ;; Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
diff --git a/lisp/vc/vc-filewise.el b/lisp/vc/vc-filewise.el
index e1b042a..254e479 100644
--- a/lisp/vc/vc-filewise.el
+++ b/lisp/vc/vc-filewise.el
@@ -82,3 +82,5 @@ If the file is not registered, or the master name is not 
known, return nil."
        nil))))                         ; Not registered
 
 (provide 'vc-filewise)
+
+;;; vc-filewise.el ends here
diff --git a/lisp/vc/vc-hg.el b/lisp/vc/vc-hg.el
index a054a7c..c9c1e91 100644
--- a/lisp/vc/vc-hg.el
+++ b/lisp/vc/vc-hg.el
@@ -26,10 +26,6 @@
 
 ;; This is a mercurial version control backend
 
-;;; Thanks:
-
-;;; Bugs:
-
 ;;; Todo:
 
 ;; 1) Implement the rest of the vc interface. See the comment at the
diff --git a/lisp/widget.el b/lisp/widget.el
index 401b4cf..d258e6f 100644
--- a/lisp/widget.el
+++ b/lisp/widget.el
@@ -94,8 +94,6 @@ The third argument DOC is a documentation string for the 
widget."
 ;; This is used by external widget code (in W3, at least).
 (define-obsolete-function-alias 'widget-plist-member #'plist-member "26.1")
 
-;;; The End.
-
 (provide 'widget)
 
 ;;; widget.el ends here
diff --git a/src/alloc.c b/src/alloc.c
index fee8cc0..76d8c7d 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -6268,7 +6268,7 @@ For further details, see Info node `(elisp)Garbage 
Collection'.  */)
 }
 
 DEFUN ("garbage-collect-maybe", Fgarbage_collect_maybe,
-Sgarbage_collect_maybe, 1, 1, "",
+Sgarbage_collect_maybe, 1, 1, 0,
        doc: /* Call `garbage-collect' if enough allocation happened.
 FACTOR determines what "enough" means here:
 If FACTOR is a positive number N, it means to run GC if more than
diff --git a/src/character.c b/src/character.c
index a599a03..41abb83 100644
--- a/src/character.c
+++ b/src/character.c
@@ -321,28 +321,32 @@ strwidth (const char *str, ptrdiff_t len)
   return c_string_width ((const unsigned char *) str, len, -1, NULL, NULL);
 }
 
-/* Return width of Lisp string STRING when displayed in the current
-   buffer.  The width is measured by how many columns it occupies on
-   the screen while paying attention to compositions.  If PRECISION >
-   0, return the width of longest substring that doesn't exceed
-   PRECISION, and set number of characters and bytes of the substring
-   in *NCHARS and *NBYTES respectively.  */
+/* Return width of a (substring of a) Lisp string STRING when
+   displayed in the current buffer.  The width is measured by how many
+   columns it occupies on the screen while paying attention to
+   compositions.  If PRECISION > 0, return the width of longest
+   substring that doesn't exceed PRECISION, and set number of
+   characters and bytes of the substring in *NCHARS and *NBYTES
+   respectively.  FROM and TO are zero-based character indices
+   that define the substring of STRING to consider.  */
 
 ptrdiff_t
-lisp_string_width (Lisp_Object string, ptrdiff_t precision,
-                  ptrdiff_t *nchars, ptrdiff_t *nbytes)
+lisp_string_width (Lisp_Object string, ptrdiff_t from, ptrdiff_t to,
+                  ptrdiff_t precision, ptrdiff_t *nchars, ptrdiff_t *nbytes)
 {
-  ptrdiff_t len = SCHARS (string);
   /* This set multibyte to 0 even if STRING is multibyte when it
      contains only ascii and eight-bit-graphic, but that's
      intentional.  */
-  bool multibyte = len < SBYTES (string);
+  bool multibyte = SCHARS (string) < SBYTES (string);
   unsigned char *str = SDATA (string);
-  ptrdiff_t i = 0, i_byte = 0;
+  ptrdiff_t i = from, i_byte = from ? string_char_to_byte (string, from) : 0;
+  ptrdiff_t from_byte = i_byte;
   ptrdiff_t width = 0;
   struct Lisp_Char_Table *dp = buffer_display_table ();
 
-  while (i < len)
+  eassert (precision <= 0 || (nchars && nbytes));
+
+  while (i < to)
     {
       ptrdiff_t chars, bytes, thiswidth;
       Lisp_Object val;
@@ -375,8 +379,8 @@ lisp_string_width (Lisp_Object string, ptrdiff_t precision,
 
       if (0 < precision && precision - width < thiswidth)
        {
-         *nchars = i;
-         *nbytes = i_byte;
+         *nchars = i - from;
+         *nbytes = i_byte - from_byte;
          return width;
        }
       if (INT_ADD_WRAPV (thiswidth, width, &width))
@@ -387,27 +391,37 @@ lisp_string_width (Lisp_Object string, ptrdiff_t 
precision,
 
   if (precision > 0)
     {
-      *nchars = i;
-      *nbytes = i_byte;
+      *nchars = i - from;
+      *nbytes = i_byte - from_byte;
     }
 
   return width;
 }
 
-DEFUN ("string-width", Fstring_width, Sstring_width, 1, 1, 0,
+DEFUN ("string-width", Fstring_width, Sstring_width, 1, 3, 0,
        doc: /* Return width of STRING when displayed in the current buffer.
 Width is measured by how many columns it occupies on the screen.
+Optional arguments FROM and TO specify the substring of STRING to
+consider, and are interpreted as in `substring'.
+
 When calculating width of a multibyte character in STRING,
 only the base leading-code is considered; the validity of
 the following bytes is not checked.  Tabs in STRING are always
-taken to occupy `tab-width' columns.
-usage: (string-width STRING)  */)
-  (Lisp_Object str)
+taken to occupy `tab-width' columns.  The effect of faces and fonts
+used for non-Latin and other unusual characters (such as emoji) is
+ignored as well, as are display properties and invisible text.
+For these reasons, the results are not generally reliable;
+for accurate dimensions of text as it will be displayed,
+use `window-text-pixel-size' instead.
+usage: (string-width STRING &optional FROM TO)  */)
+  (Lisp_Object str, Lisp_Object from, Lisp_Object to)
 {
   Lisp_Object val;
+  ptrdiff_t ifrom, ito;
 
   CHECK_STRING (str);
-  XSETFASTINT (val, lisp_string_width (str, -1, NULL, NULL));
+  validate_subarray (str, from, to, SCHARS (str), &ifrom, &ito);
+  XSETFASTINT (val, lisp_string_width (str, ifrom, ito, -1, NULL, NULL));
   return val;
 }
 
diff --git a/src/character.h b/src/character.h
index cbf4309..d19e1e2 100644
--- a/src/character.h
+++ b/src/character.h
@@ -572,8 +572,8 @@ extern ptrdiff_t str_to_unibyte (const unsigned char *, 
unsigned char *,
 extern ptrdiff_t strwidth (const char *, ptrdiff_t);
 extern ptrdiff_t c_string_width (const unsigned char *, ptrdiff_t, int,
                                 ptrdiff_t *, ptrdiff_t *);
-extern ptrdiff_t lisp_string_width (Lisp_Object, ptrdiff_t,
-                                   ptrdiff_t *, ptrdiff_t *);
+extern ptrdiff_t lisp_string_width (Lisp_Object, ptrdiff_t, ptrdiff_t,
+                                   ptrdiff_t, ptrdiff_t *, ptrdiff_t *);
 
 extern Lisp_Object Vchar_unify_table;
 extern Lisp_Object string_escape_byte8 (Lisp_Object);
diff --git a/src/editfns.c b/src/editfns.c
index 87e743a..bc73c1e 100644
--- a/src/editfns.c
+++ b/src/editfns.c
@@ -3386,12 +3386,11 @@ styled_format (ptrdiff_t nargs, Lisp_Object *args, bool 
message)
              else
                {
                  ptrdiff_t nch, nby;
-                 width = lisp_string_width (arg, prec, &nch, &nby);
+                 nchars_string = SCHARS (arg);
+                 width = lisp_string_width (arg, 0, nchars_string, prec,
+                                            &nch, &nby);
                  if (prec < 0)
-                   {
-                     nchars_string = SCHARS (arg);
-                     nbytes = SBYTES (arg);
-                   }
+                   nbytes = SBYTES (arg);
                  else
                    {
                      nchars_string = nch;
diff --git a/src/eval.c b/src/eval.c
index cf5ca3b..aeedcc5 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -1310,7 +1310,7 @@ DEFUN ("condition-case", Fcondition_case, 
Scondition_case, 2, UNEVALLED, 0,
        doc: /* Regain control when an error is signaled.
 Executes BODYFORM and returns its value if no error happens.
 Each element of HANDLERS looks like (CONDITION-NAME BODY...)
-where the BODY is made of Lisp expressions.
+or (:success BODY...), where the BODY is made of Lisp expressions.
 
 A handler is applicable to an error if CONDITION-NAME is one of the
 error's condition names.  Handlers may also apply when non-error
@@ -1332,6 +1332,10 @@ with VAR bound to (ERROR-SYMBOL . SIGNAL-DATA) from the 
error.
 Then the value of the last BODY form is returned from the `condition-case'
 expression.
 
+The special handler (:success BODY...) is invoked if BODYFORM terminated
+without signalling an error.  BODY is then evaluated with VAR bound to
+the value returned by BODYFORM.
+
 See also the function `signal' for more info.
 usage: (condition-case VAR BODYFORM &rest HANDLERS)  */)
   (Lisp_Object args)
@@ -1355,16 +1359,21 @@ internal_lisp_condition_case (Lisp_Object var, 
Lisp_Object bodyform,
 
   CHECK_SYMBOL (var);
 
+  Lisp_Object success_handler = Qnil;
+
   for (Lisp_Object tail = handlers; CONSP (tail); tail = XCDR (tail))
     {
       Lisp_Object tem = XCAR (tail);
-      clausenb++;
       if (! (NILP (tem)
             || (CONSP (tem)
                 && (SYMBOLP (XCAR (tem))
                     || CONSP (XCAR (tem))))))
        error ("Invalid condition handler: %s",
               SDATA (Fprin1_to_string (tem, Qt)));
+      if (EQ (XCAR (tem), QCsuccess))
+       success_handler = XCDR (tem);
+      else
+       clausenb++;
     }
 
   /* The first clause is the one that should be checked first, so it
@@ -1378,7 +1387,8 @@ internal_lisp_condition_case (Lisp_Object var, 
Lisp_Object bodyform,
   Lisp_Object volatile *clauses = alloca (clausenb * sizeof *clauses);
   clauses += clausenb;
   for (Lisp_Object tail = handlers; CONSP (tail); tail = XCDR (tail))
-    *--clauses = XCAR (tail);
+    if (!EQ (XCAR (XCAR (tail)), QCsuccess))
+      *--clauses = XCAR (tail);
   for (ptrdiff_t i = 0; i < clausenb; i++)
     {
       Lisp_Object clause = clauses[i];
@@ -1418,6 +1428,23 @@ internal_lisp_condition_case (Lisp_Object var, 
Lisp_Object bodyform,
 
   Lisp_Object result = eval_sub (bodyform);
   handlerlist = oldhandlerlist;
+  if (!NILP (success_handler))
+    {
+      if (NILP (var))
+       return Fprogn (success_handler);
+
+      Lisp_Object handler_var = var;
+      if (!NILP (Vinternal_interpreter_environment))
+       {
+         result = Fcons (Fcons (var, result),
+                      Vinternal_interpreter_environment);
+         handler_var = Qinternal_interpreter_environment;
+       }
+
+      ptrdiff_t count = SPECPDL_INDEX ();
+      specbind (handler_var, result);
+      return unbind_to (count, Fprogn (success_handler));
+    }
   return result;
 }
 
@@ -4490,6 +4517,7 @@ alist of active lexical bindings.  */);
   defsubr (&Sthrow);
   defsubr (&Sunwind_protect);
   defsubr (&Scondition_case);
+  DEFSYM (QCsuccess, ":success");
   defsubr (&Ssignal);
   defsubr (&Scommandp);
   defsubr (&Sautoload);
diff --git a/src/frame.c b/src/frame.c
index bbdc3b5..097cd55 100644
--- a/src/frame.c
+++ b/src/frame.c
@@ -1384,7 +1384,8 @@ do_switch_frame (Lisp_Object frame, int track, int 
for_deletion, Lisp_Object nor
      especially when deleting the initial frame during startup.  */
   CHECK_FRAME (frame);
   f = XFRAME (frame);
-  if (!FRAME_LIVE_P (f))
+  /* Silently ignore dead and tooltip frames (Bug#47207).  */
+  if (!FRAME_LIVE_P (f) || FRAME_TOOLTIP_P (f))
     return Qnil;
   else if (f == sf)
     return frame;
@@ -1508,7 +1509,16 @@ redisplay will display FRAME.
 This function returns FRAME, or nil if FRAME has been deleted.  */)
   (Lisp_Object frame, Lisp_Object norecord)
 {
-  return do_switch_frame (frame, 1, 0, norecord);
+  struct frame *f;
+
+  CHECK_LIVE_FRAME (frame);
+  f = XFRAME (frame);
+
+  if (FRAME_TOOLTIP_P (f))
+    /* Do not select a tooltip frame (Bug#47207).  */
+    error ("Cannot select a tooltip frame");
+  else
+    return do_switch_frame (frame, 1, 0, norecord);
 }
 
 DEFUN ("handle-switch-frame", Fhandle_switch_frame,
@@ -1523,6 +1533,7 @@ necessarily represent user-visible input focus.  */)
   /* Preserve prefix arg that the command loop just cleared.  */
   kset_prefix_arg (current_kboard, Vcurrent_prefix_arg);
   run_hook (Qmouse_leave_buffer_hook);
+
   return do_switch_frame (event, 0, 0, Qnil);
 }
 
@@ -3747,6 +3758,7 @@ window state change flag is reset.  */)
 DEFUN ("frame-scale-factor", Fframe_scale_factor, Sframe_scale_factor,
        0, 1, 0,
        doc: /* Return FRAMEs scale factor.
+If FRAME is omitted or nil, the selected frame is used.
 The scale factor is the amount by which a logical pixel size must be
 multiplied to find the real number of pixels.  */)
      (Lisp_Object frame)
diff --git a/src/image.c b/src/image.c
index 18126a8..f2fb69a 100644
--- a/src/image.c
+++ b/src/image.c
@@ -1987,46 +1987,68 @@ scale_image_size (int size, size_t divisor, size_t 
multiplier)
   return INT_MAX;
 }
 
+/* Return a size, in pixels, from the value specified by SYMBOL, which
+   may be an integer or a pair of the form (VALUE . 'em) where VALUE
+   is a float that is multiplied by the font size to get the final
+   dimension.
+
+   If the value doesn't exist in the image spec, or is invalid, return
+   -1.
+*/
+static int
+image_get_dimension (struct image *img, Lisp_Object symbol)
+{
+  Lisp_Object value = image_spec_value (img->spec, symbol, NULL);
+
+  if (FIXNATP (value))
+    return min (XFIXNAT (value), INT_MAX);
+  if (CONSP (value) && NUMBERP (CAR (value)) && EQ (Qem, CDR (value)))
+    return min (img->face_font_size * XFLOATINT (CAR (value)), INT_MAX);
+
+  return -1;
+}
+
 /* Compute the desired size of an image with native size WIDTH x HEIGHT.
    Use SPEC to deduce the size.  Store the desired size into
    *D_WIDTH x *D_HEIGHT.  Store -1 x -1 if the native size is OK.  */
 static void
 compute_image_size (size_t width, size_t height,
-                   Lisp_Object spec,
+                   struct image *img,
                    int *d_width, int *d_height)
 {
   Lisp_Object value;
+  int int_value;
   int desired_width = -1, desired_height = -1, max_width = -1, max_height = -1;
   double scale = 1;
 
-  value = image_spec_value (spec, QCscale, NULL);
+  value = image_spec_value (img->spec, QCscale, NULL);
   if (NUMBERP (value))
     scale = XFLOATINT (value);
 
-  value = image_spec_value (spec, QCmax_width, NULL);
-  if (FIXNATP (value))
-    max_width = min (XFIXNAT (value), INT_MAX);
+  int_value = image_get_dimension (img, QCmax_width);
+  if (int_value >= 0)
+    max_width = int_value;
 
-  value = image_spec_value (spec, QCmax_height, NULL);
-  if (FIXNATP (value))
-    max_height = min (XFIXNAT (value), INT_MAX);
+  int_value = image_get_dimension (img, QCmax_height);
+  if (int_value >= 0)
+    max_height = int_value;
 
   /* If width and/or height is set in the display spec assume we want
      to scale to those values.  If either h or w is unspecified, the
      unspecified should be calculated from the specified to preserve
      aspect ratio.  */
-  value = image_spec_value (spec, QCwidth, NULL);
-  if (FIXNATP (value))
+  int_value = image_get_dimension (img, QCwidth);
+  if (int_value >= 0)
     {
-      desired_width = min (XFIXNAT (value) * scale, INT_MAX);
+      desired_width = int_value * scale;
       /* :width overrides :max-width. */
       max_width = -1;
     }
 
-  value = image_spec_value (spec, QCheight, NULL);
-  if (FIXNATP (value))
+  int_value = image_get_dimension (img, QCheight);
+  if (int_value >= 0)
     {
-      desired_height = min (XFIXNAT (value) * scale, INT_MAX);
+      desired_height = int_value * scale;
       /* :height overrides :max-height. */
       max_height = -1;
     }
@@ -2216,7 +2238,7 @@ image_set_transform (struct frame *f, struct image *img)
     }
   else
 #endif
-    compute_image_size (img->width, img->height, img->spec, &width, &height);
+    compute_image_size (img->width, img->height, img, &width, &height);
 
   /* Determine rotation.  */
   double rotation = 0.0;
@@ -9210,7 +9232,7 @@ imagemagick_load_image (struct frame *f, struct image 
*img,
 
   compute_image_size (MagickGetImageWidth (image_wand),
                      MagickGetImageHeight (image_wand),
-                     img->spec, &desired_width, &desired_height);
+                     img, &desired_width, &desired_height);
 
   if (desired_width != -1 && desired_height != -1)
     {
@@ -10068,7 +10090,7 @@ svg_load_image (struct frame *f, struct image *img, 
char *contents,
     viewbox_height = dimension_data.height;
   }
 
-  compute_image_size (viewbox_width, viewbox_height, img->spec,
+  compute_image_size (viewbox_width, viewbox_height, img,
                       &width, &height);
 
   width *= FRAME_SCALE_FACTOR (f);
@@ -10777,6 +10799,8 @@ non-numeric, there is no explicit limit on the size of 
images.  */);
   DEFSYM (QCmax_width, ":max-width");
   DEFSYM (QCmax_height, ":max-height");
 
+  DEFSYM (Qem, "em");
+
 #ifdef HAVE_NATIVE_TRANSFORMS
   DEFSYM (Qscale, "scale");
   DEFSYM (Qrotate, "rotate");
diff --git a/src/minibuf.c b/src/minibuf.c
index c9831fd..a3c1b99 100644
--- a/src/minibuf.c
+++ b/src/minibuf.c
@@ -112,13 +112,15 @@ choose_minibuf_frame (void)
 {
   if (FRAMEP (selected_frame)
       && FRAME_LIVE_P (XFRAME (selected_frame))
+      && WINDOW_LIVE_P (XFRAME (selected_frame)->minibuffer_window)
       && !EQ (minibuf_window, XFRAME (selected_frame)->minibuffer_window))
     {
       struct frame *sf = XFRAME (selected_frame);
-      /* I don't think that any frames may validly have a null minibuffer
-        window anymore.  */
-      if (NILP (sf->minibuffer_window))
-       emacs_abort ();
+      /* I don't think that any frames may validly have a null
+        minibuffer window anymore.  (2021-04-15): Tooltip frames have
+        a null MB.  Comment out the following.  */
+      /* if (NILP (sf->minibuffer_window)) */
+      /*       emacs_abort (); */
 
       minibuf_window = sf->minibuffer_window;
     }
@@ -195,7 +197,9 @@ move_minibuffers_onto_frame (struct frame *of, bool 
for_deletion)
        && (for_deletion || minibuf_follows_frame () || FRAME_INITIAL_P (of))))
     return;
   if (FRAME_LIVE_P (f)
-      && !EQ (f->minibuffer_window, of->minibuffer_window))
+      && !EQ (f->minibuffer_window, of->minibuffer_window)
+      && WINDOW_LIVE_P (f->minibuffer_window) /* F not a tootip frame */
+      && WINDOW_LIVE_P (of->minibuffer_window))
     {
       zip_minibuffer_stacks (f->minibuffer_window, of->minibuffer_window);
       if (for_deletion && XFRAME (MB_frame) != of)
@@ -636,6 +640,7 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, 
Lisp_Object prompt,
   mini_frame = WINDOW_FRAME (XWINDOW (minibuf_window));
 
   if (minibuf_level > 1
+      && WINDOW_LIVE_P (XFRAME (MB_frame)->minibuffer_window)
       && !EQ (XWINDOW (XFRAME (selected_frame)->minibuffer_window)->frame,
              MB_frame)
       && minibuf_moves_frame_when_opened ()
@@ -908,11 +913,13 @@ read_minibuf (Lisp_Object map, Lisp_Object initial, 
Lisp_Object prompt,
   unbind_to (count, Qnil);
 
   /* Switch the frame back to the calling frame.  */
-  if ((!EQ (selected_frame, calling_frame)
-       || !EQ (XWINDOW (XFRAME (calling_frame)->minibuffer_window)->frame,
-              calling_frame))
-      && FRAMEP (calling_frame)
-      && FRAME_LIVE_P (XFRAME (calling_frame)))
+  if (FRAMEP (calling_frame)
+      && FRAME_LIVE_P (XFRAME (calling_frame))
+      && (!EQ (selected_frame, calling_frame)
+         || (WINDOW_LIVE_P (XFRAME (calling_frame)->minibuffer_window)
+             && !EQ (XWINDOW (XFRAME (calling_frame)->minibuffer_window)
+                     ->frame,
+                     calling_frame))))
     call2 (intern ("select-frame-set-input-focus"), calling_frame, Qnil);
 
   /* Add the value to the appropriate history list, if any.  This is
@@ -1056,10 +1063,13 @@ read_minibuf_unwind (void)
     {
       f = XFRAME (exp_MB_frame);
       window = f->minibuffer_window;
-      w = XWINDOW (window);
-      if (EQ (w->frame, exp_MB_frame)
-         && EQ (w->contents, nth_minibuffer (minibuf_level)))
-       goto found;
+      if (WINDOW_LIVE_P (window))
+       {
+         w = XWINDOW (window);
+         if (EQ (w->frame, exp_MB_frame)
+             && EQ (w->contents, nth_minibuffer (minibuf_level)))
+           goto found;
+       }
     }
   return; /* expired minibuffer not found.  Maybe we should output an
             error, here. */
diff --git a/src/w32fns.c b/src/w32fns.c
index 9db367b..c07f32a 100644
--- a/src/w32fns.c
+++ b/src/w32fns.c
@@ -7434,6 +7434,8 @@ DEFUN ("x-show-tip", Fx_show_tip, Sx_show_tip, 1, 6, 0,
   set_window_buffer (window, tip_buf, false, false);
   w = XWINDOW (window);
   w->pseudo_window_p = true;
+  /* Try to avoid that `other-window' select us (Bug#47207).  */
+  Fset_window_parameter (window, Qno_other_window, Qt);
 
   /* Set up the frame's root window.  Note: The following code does not
      try to size the window or its frame correctly.  Its only purpose is
diff --git a/src/w32term.c b/src/w32term.c
index 0ee805a..361cf33 100644
--- a/src/w32term.c
+++ b/src/w32term.c
@@ -2031,8 +2031,11 @@ w32_draw_image_relief (struct glyph_string *s)
   if (s->hl == DRAW_IMAGE_SUNKEN
       || s->hl == DRAW_IMAGE_RAISED)
     {
-      thick = tool_bar_button_relief >= 0 ? tool_bar_button_relief
-       : DEFAULT_TOOL_BAR_BUTTON_RELIEF;
+      thick = (tab_bar_button_relief < 0
+              ? DEFAULT_TAB_BAR_BUTTON_RELIEF
+              : (tool_bar_button_relief < 0
+                 ? DEFAULT_TOOL_BAR_BUTTON_RELIEF
+                 : min (tool_bar_button_relief, 1000000)));
       raised_p = s->hl == DRAW_IMAGE_RAISED;
     }
   else
@@ -2045,6 +2048,19 @@ w32_draw_image_relief (struct glyph_string *s)
   y1 = y + s->slice.height - 1;
 
   extra_x = extra_y = 0;
+  if (s->face->id == TAB_BAR_FACE_ID)
+    {
+      if (CONSP (Vtab_bar_button_margin)
+         && FIXNUMP (XCAR (Vtab_bar_button_margin))
+         && FIXNUMP (XCDR (Vtab_bar_button_margin)))
+       {
+         extra_x = XFIXNUM (XCAR (Vtab_bar_button_margin));
+         extra_y = XFIXNUM (XCDR (Vtab_bar_button_margin));
+       }
+      else if (FIXNUMP (Vtab_bar_button_margin))
+       extra_x = extra_y = XFIXNUM (Vtab_bar_button_margin);
+    }
+
   if (s->face->id == TOOL_BAR_FACE_ID)
     {
       if (CONSP (Vtool_bar_button_margin)
diff --git a/src/window.c b/src/window.c
index 661b1ae..399b24b 100644
--- a/src/window.c
+++ b/src/window.c
@@ -215,20 +215,6 @@ wset_combination (struct window *w, bool horflag, 
Lisp_Object val)
     w->horizontal = horflag;
 }
 
-static void
-wset_update_mode_line (struct window *w)
-{
-  /* If this window is the selected window on its frame, set the
-     global variable update_mode_lines, so that gui_consider_frame_title
-     will consider this frame's title for redisplay.  */
-  Lisp_Object fselected_window = XFRAME (WINDOW_FRAME (w))->selected_window;
-
-  if (WINDOWP (fselected_window) && XWINDOW (fselected_window) == w)
-    update_mode_lines = 42;
-  else
-    w->update_mode_line = true;
-}
-
 /* True if leaf window W doesn't reflect the actual state
    of displayed buffer due to its text or overlays change.  */
 
@@ -518,10 +504,18 @@ select_window (Lisp_Object window, Lisp_Object norecord,
 {
   struct window *w;
   struct frame *sf;
+  Lisp_Object frame;
+  struct frame *f;
 
   CHECK_LIVE_WINDOW (window);
 
   w = XWINDOW (window);
+  frame = WINDOW_FRAME (w);
+  f = XFRAME (frame);
+
+  if (FRAME_TOOLTIP_P (f))
+    /* Do not select a tooltip window (Bug#47207).  */
+    error ("Cannot select a tooltip window");
 
   /* Make the selected window's buffer current.  */
   Fset_buffer (w->contents);
@@ -542,14 +536,14 @@ select_window (Lisp_Object window, Lisp_Object norecord,
     redisplay_other_windows ();
 
   sf = SELECTED_FRAME ();
-  if (XFRAME (WINDOW_FRAME (w)) != sf)
+  if (f != sf)
     {
-      fset_selected_window (XFRAME (WINDOW_FRAME (w)), window);
+      fset_selected_window (f, window);
       /* Use this rather than Fhandle_switch_frame
         so that FRAME_FOCUS_FRAME is moved appropriately as we
         move around in the state where a minibuffer in a separate
         frame is active.  */
-      Fselect_frame (WINDOW_FRAME (w), norecord);
+      Fselect_frame (frame, norecord);
       /* Fselect_frame called us back so we've done all the work already.  */
       eassert (EQ (window, selected_window));
       return window;
@@ -2556,8 +2550,13 @@ window_list (void)
   if (!CONSP (Vwindow_list))
     {
       Lisp_Object tail, frame;
+      ptrdiff_t count = SPECPDL_INDEX ();
 
       Vwindow_list = Qnil;
+      /*  Don't allow quitting in Fnconc.  Otherwise we might end up
+         with a too short Vwindow_list and Fkill_buffer not being able
+         to replace a buffer in all windows showing it (Bug#47244).  */
+      specbind (Qinhibit_quit, Qt);
       FOR_EACH_FRAME (tail, frame)
        {
          Lisp_Object arglist = Qnil;
@@ -2569,6 +2568,8 @@ window_list (void)
          arglist = Fnreverse (arglist);
          Vwindow_list = nconc2 (Vwindow_list, arglist);
        }
+
+      unbind_to (count, Qnil);
     }
 
   return Vwindow_list;
@@ -2603,7 +2604,7 @@ candidate_window_p (Lisp_Object window, Lisp_Object 
owindow,
     candidate_p = false;
   else if (MINI_WINDOW_P (w)
            && (EQ (minibuf, Qlambda)
-              || (WINDOWP (minibuf) && !EQ (minibuf, window))))
+              || (WINDOW_LIVE_P (minibuf) && !EQ (minibuf, window))))
     {
       /* If MINIBUF is `lambda' don't consider any mini-windows.
          If it is a window, consider only that one.  */
@@ -2666,12 +2667,12 @@ decode_next_window_args (Lisp_Object *window, 
Lisp_Object *minibuf, Lisp_Object
   Lisp_Object miniwin = XFRAME (w->frame)->minibuffer_window;
 
   XSETWINDOW (*window, w);
-  /* MINIBUF nil may or may not include minibuffers.  Decide if it
-     does.  */
-  if (NILP (*minibuf))
-    *minibuf = this_minibuffer_depth (XWINDOW (miniwin)->contents)
-      ? miniwin
-      : Qlambda;
+  /* MINIBUF nil may or may not include minibuffer windows.  Decide if
+     it does.  But first make sure that this frame's minibuffer window
+     is live (Bug#47207).  */
+  if (WINDOW_LIVE_P (miniwin) && NILP (*minibuf))
+    *minibuf = (this_minibuffer_depth (XWINDOW (miniwin)->contents)
+               ? miniwin : Qlambda);
   else if (!EQ (*minibuf, Qt))
     *minibuf = Qlambda;
 
@@ -2682,9 +2683,10 @@ decode_next_window_args (Lisp_Object *window, 
Lisp_Object *minibuf, Lisp_Object
   /* ALL_FRAMES nil doesn't specify which frames to include.  */
   if (NILP (*all_frames))
     *all_frames
-      = (!EQ (*minibuf, Qlambda)
-        ? FRAME_MINIBUF_WINDOW (XFRAME (w->frame))
-        : Qnil);
+      /* Once more make sure that this frame's minibuffer window is live
+        before including it (Bug#47207).  */
+      = ((WINDOW_LIVE_P (miniwin) && !EQ (*minibuf, Qlambda))
+        ? miniwin : Qnil);
   else if (EQ (*all_frames, Qvisible))
     ;
   else if (EQ (*all_frames, make_fixnum (0)))
@@ -2705,6 +2707,8 @@ static Lisp_Object
 next_window (Lisp_Object window, Lisp_Object minibuf, Lisp_Object all_frames,
             bool next_p)
 {
+  ptrdiff_t count = SPECPDL_INDEX ();
+
   decode_next_window_args (&window, &minibuf, &all_frames);
 
   /* If ALL_FRAMES is a frame, and WINDOW isn't on that frame, just
@@ -2713,6 +2717,9 @@ next_window (Lisp_Object window, Lisp_Object minibuf, 
Lisp_Object all_frames,
       && !EQ (all_frames, XWINDOW (window)->frame))
     return Fframe_first_window (all_frames);
 
+  /*  Don't allow quitting in Fmemq.  */
+  specbind (Qinhibit_quit, Qt);
+
   if (next_p)
     {
       Lisp_Object list;
@@ -2762,6 +2769,8 @@ next_window (Lisp_Object window, Lisp_Object minibuf, 
Lisp_Object all_frames,
        window = candidate;
     }
 
+  unbind_to (count, Qnil);
+
   return window;
 }
 
@@ -2852,10 +2861,14 @@ static Lisp_Object
 window_list_1 (Lisp_Object window, Lisp_Object minibuf, Lisp_Object all_frames)
 {
   Lisp_Object tail, list, rest;
+  ptrdiff_t count = SPECPDL_INDEX ();
 
   decode_next_window_args (&window, &minibuf, &all_frames);
   list = Qnil;
 
+  /*  Don't allow quitting in Fmemq and Fnconc.  */
+  specbind (Qinhibit_quit, Qt);
+
   for (tail = window_list (); CONSP (tail); tail = XCDR (tail))
     if (candidate_window_p (XCAR (tail), window, minibuf, all_frames))
       list = Fcons (XCAR (tail), list);
@@ -2870,6 +2883,9 @@ window_list_1 (Lisp_Object window, Lisp_Object minibuf, 
Lisp_Object all_frames)
       XSETCDR (tail, Qnil);
       list = nconc2 (rest, list);
     }
+
+  unbind_to (count, Qnil);
+
   return list;
 }
 
@@ -8225,6 +8241,7 @@ syms_of_window (void)
   DEFSYM (Qmode_line_format, "mode-line-format");
   DEFSYM (Qheader_line_format, "header-line-format");
   DEFSYM (Qtab_line_format, "tab-line-format");
+  DEFSYM (Qno_other_window, "no-other-window");
 
   DEFVAR_LISP ("temp-buffer-show-function", Vtemp_buffer_show_function,
               doc: /* Non-nil means call as function to display a help buffer.
diff --git a/src/window.h b/src/window.h
index b6f88e8..2400c42 100644
--- a/src/window.h
+++ b/src/window.h
@@ -1141,6 +1141,7 @@ extern void wset_redisplay (struct window *w);
 extern void fset_redisplay (struct frame *f);
 extern void bset_redisplay (struct buffer *b);
 extern void bset_update_mode_line (struct buffer *b);
+extern void wset_update_mode_line (struct window *w);
 /* Call this to tell redisplay to look for other windows than selected-window
    that need to be redisplayed.  Calling one of the *set_redisplay functions
    above already does it, so it's only needed in unusual cases.  */
diff --git a/src/xdisp.c b/src/xdisp.c
index 50d9040..8ffec93 100644
--- a/src/xdisp.c
+++ b/src/xdisp.c
@@ -869,6 +869,19 @@ bset_update_mode_line (struct buffer *b)
   b->text->redisplay = true;
 }
 
+void
+wset_update_mode_line (struct window *w)
+{
+  w->update_mode_line = true;
+  /* When a window's mode line needs to be updated, the window's frame's
+     title may also need to be updated, but we don't need to worry about it
+     here.  Instead, `gui_consider_frame_title' is automatically called
+     whenever w->update_mode_line is set for that frame's selected window.
+     But for this to work reliably, we have to make sure the window
+     is considered, so we have to mark it for redisplay.  */
+  wset_redisplay (w);
+}
+
 DEFUN ("set-buffer-redisplay", Fset_buffer_redisplay,
        Sset_buffer_redisplay, 4, 4, 0,
        doc: /* Mark the current buffer for redisplay.
@@ -13682,6 +13695,7 @@ void
 handle_tab_bar_click (struct frame *f, int x, int y, bool down_p,
                      int modifiers)
 {
+  Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
   struct window *w = XWINDOW (f->tab_bar_window);
   int hpos, vpos, prop_idx;
   bool close_p;
@@ -13703,13 +13717,22 @@ handle_tab_bar_click (struct frame *f, int x, int y, 
bool down_p,
     return;
 
   if (down_p)
-    f->last_tab_bar_item = prop_idx; /* record the pressed tab */
+    {
+      /* Show the clicked button in pressed state.  */
+      if (!NILP (Vmouse_highlight))
+       show_mouse_face (hlinfo, DRAW_IMAGE_SUNKEN);
+      f->last_tab_bar_item = prop_idx; /* record the pressed tab */
+    }
   else
     {
       Lisp_Object key, frame;
       struct input_event event;
       EVENT_INIT (event);
 
+      /* Show item in released state.  */
+      if (!NILP (Vmouse_highlight))
+       show_mouse_face (hlinfo, DRAW_IMAGE_RAISED);
+
       key = AREF (f->tab_bar_items, prop_idx + TAB_BAR_ITEM_KEY);
 
       XSETFRAME (frame, f);
@@ -13722,6 +13745,97 @@ handle_tab_bar_click (struct frame *f, int x, int y, 
bool down_p,
     }
 }
 
+
+/* Possibly highlight a tab-bar item on frame F when mouse moves to
+   tab-bar window-relative coordinates X/Y.  Called from
+   note_mouse_highlight.  */
+
+static void
+note_tab_bar_highlight (struct frame *f, int x, int y)
+{
+  Lisp_Object window = f->tab_bar_window;
+  struct window *w = XWINDOW (window);
+  Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f);
+  int hpos, vpos;
+  struct glyph *glyph;
+  struct glyph_row *row;
+  int i;
+  Lisp_Object enabled_p;
+  int prop_idx;
+  bool close_p;
+  enum draw_glyphs_face draw = DRAW_IMAGE_RAISED;
+  int rc;
+
+  /* Function note_mouse_highlight is called with negative X/Y
+     values when mouse moves outside of the frame.  */
+  if (x <= 0 || y <= 0)
+    {
+      clear_mouse_face (hlinfo);
+      return;
+    }
+
+  rc = get_tab_bar_item (f, x, y, &glyph, &hpos, &vpos, &prop_idx, &close_p);
+  if (rc < 0)
+    {
+      /* Not on tab-bar item.  */
+      clear_mouse_face (hlinfo);
+      return;
+    }
+  else if (rc == 0)
+    /* On same tab-bar item as before.  */
+    goto set_help_echo;
+
+  clear_mouse_face (hlinfo);
+
+  bool mouse_down_p = false;
+#ifndef HAVE_NS
+  /* Mouse is down, but on different tab-bar item?  */
+  Display_Info *dpyinfo = FRAME_DISPLAY_INFO (f);
+  mouse_down_p = (gui_mouse_grabbed (dpyinfo)
+                 && f == dpyinfo->last_mouse_frame);
+
+  if (mouse_down_p && f->last_tab_bar_item != prop_idx)
+    return;
+#endif
+  draw = mouse_down_p ? DRAW_IMAGE_SUNKEN : DRAW_IMAGE_RAISED;
+
+  /* If tab-bar item is not enabled, don't highlight it.  */
+  enabled_p = AREF (f->tab_bar_items, prop_idx + TAB_BAR_ITEM_ENABLED_P);
+  if (!NILP (enabled_p) && !NILP (Vmouse_highlight))
+    {
+      /* Compute the x-position of the glyph.  In front and past the
+        image is a space.  We include this in the highlighted area.  */
+      row = MATRIX_ROW (w->current_matrix, vpos);
+      for (i = x = 0; i < hpos; ++i)
+       x += row->glyphs[TEXT_AREA][i].pixel_width;
+
+      /* Record this as the current active region.  */
+      hlinfo->mouse_face_beg_col = hpos;
+      hlinfo->mouse_face_beg_row = vpos;
+      hlinfo->mouse_face_beg_x = x;
+      hlinfo->mouse_face_past_end = false;
+
+      hlinfo->mouse_face_end_col = hpos + 1;
+      hlinfo->mouse_face_end_row = vpos;
+      hlinfo->mouse_face_end_x = x + glyph->pixel_width;
+      hlinfo->mouse_face_window = window;
+      hlinfo->mouse_face_face_id = TAB_BAR_FACE_ID;
+
+      /* Display it as active.  */
+      show_mouse_face (hlinfo, draw);
+    }
+
+ set_help_echo:
+
+  /* Set help_echo_string to a help string to display for this tab-bar item.
+     XTread_socket does the rest.  */
+  help_echo_object = help_echo_window = Qnil;
+  help_echo_pos = -1;
+  help_echo_string = AREF (f->tab_bar_items, prop_idx + TAB_BAR_ITEM_HELP);
+  if (NILP (help_echo_string))
+    help_echo_string = AREF (f->tab_bar_items, prop_idx + 
TAB_BAR_ITEM_CAPTION);
+}
+
 #endif /* HAVE_WINDOW_SYSTEM */
 
 /* Find the tab-bar item at X coordinate and return its information.  */
@@ -31860,6 +31974,11 @@ draw_row_with_mouse_face (struct window *w, int 
start_x, struct glyph_row *row,
 static void
 show_mouse_face (Mouse_HLInfo *hlinfo, enum draw_glyphs_face draw)
 {
+  /* Don't bother doing anything if the mouse-face window is not set
+     up.  */
+  if (!WINDOWP (hlinfo->mouse_face_window))
+    return;
+
   struct window *w = XWINDOW (hlinfo->mouse_face_window);
   struct frame *f = XFRAME (WINDOW_FRAME (w));
 
@@ -33414,9 +33533,13 @@ note_mouse_highlight (struct frame *f, int x, int y)
   frame_to_window_pixel_xy (w, &x, &y);
 
 #if defined (HAVE_WINDOW_SYSTEM)
-  /* We don't highlight tab-bar buttons.  */
+  /* Handle tab-bar window differently since it doesn't display a
+     buffer.  */
   if (EQ (window, f->tab_bar_window))
-    return;
+    {
+      note_tab_bar_highlight (f, x, y);
+      return;
+    }
 #endif
 
 #if defined (HAVE_WINDOW_SYSTEM) && ! defined (HAVE_EXT_TOOL_BAR)
diff --git a/src/xfns.c b/src/xfns.c
index 0507dc8..f120653 100644
--- a/src/xfns.c
+++ b/src/xfns.c
@@ -7076,6 +7076,8 @@ Text larger than the specified size is clipped.  */)
   set_window_buffer (window, tip_buf, false, false);
   w = XWINDOW (window);
   w->pseudo_window_p = true;
+  /* Try to avoid that `other-window' select us (Bug#47207).  */
+  Fset_window_parameter (window, Qno_other_window, Qt);
 
   /* Set up the frame's root window.  Note: The following code does not
      try to size the window or its frame correctly.  Its only purpose is
diff --git a/src/xselect.c b/src/xselect.c
index 030f624..cd6d86b 100644
--- a/src/xselect.c
+++ b/src/xselect.c
@@ -1482,14 +1482,21 @@ x_get_window_property_as_lisp_data (struct 
x_display_info *dpyinfo,
        = XGetSelectionOwner (display, selection_atom) != 0;
       unblock_input ();
       if (there_is_a_selection_owner)
-       signal_error ("Selection owner couldn't convert",
-                     actual_type
-                     ? list2 (target_type,
-                              x_atom_to_symbol (dpyinfo, actual_type))
-                     : target_type);
+       {
+         AUTO_STRING (format, "Selection owner couldn't convert: %s");
+         CALLN (Fmessage, format,
+                actual_type
+                ? list2 (target_type,
+                         x_atom_to_symbol (dpyinfo, actual_type))
+                : target_type);
+         return Qnil;
+       }
       else
-       signal_error ("No selection",
-                     x_atom_to_symbol (dpyinfo, selection_atom));
+       {
+         AUTO_STRING (format, "No selection: %s");
+         CALLN (Fmessage, format, x_atom_to_symbol (dpyinfo, selection_atom));
+         return Qnil;
+       }
     }
 
   if (actual_type == dpyinfo->Xatom_INCR)
diff --git a/test/lisp/autorevert-tests.el b/test/lisp/autorevert-tests.el
index 5f27c2e..3e97e9c 100644
--- a/test/lisp/autorevert-tests.el
+++ b/test/lisp/autorevert-tests.el
@@ -1,4 +1,4 @@
-;;; auto-revert-tests.el --- Tests of auto-revert   -*- lexical-binding: t -*-
+;;; autorevert-tests.el --- Tests of auto-revert   -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2015-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/calendar/icalendar-tests.el 
b/test/lisp/calendar/icalendar-tests.el
index 61d3c11..6973f7e 100644
--- a/test/lisp/calendar/icalendar-tests.el
+++ b/test/lisp/calendar/icalendar-tests.el
@@ -1,4 +1,4 @@
-;; icalendar-tests.el --- Test suite for icalendar.el  -*- lexical-binding:t 
-*-
+;;; icalendar-tests.el --- Test suite for icalendar.el  -*- lexical-binding:t 
-*-
 
 ;; Copyright (C) 2005, 2008-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/calendar/parse-time-tests.el 
b/test/lisp/calendar/parse-time-tests.el
index b90fe0b..b706b73 100644
--- a/test/lisp/calendar/parse-time-tests.el
+++ b/test/lisp/calendar/parse-time-tests.el
@@ -1,4 +1,4 @@
-;; parse-time-tests.el --- Test suite for parse-time.el  -*- lexical-binding:t 
-*-
+;;; parse-time-tests.el --- Test suite for parse-time.el  -*- 
lexical-binding:t -*-
 
 ;; Copyright (C) 2016-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/cedet/srecode-utest-template.el 
b/test/lisp/cedet/srecode-utest-template.el
index f97ff18..087dcfd 100644
--- a/test/lisp/cedet/srecode-utest-template.el
+++ b/test/lisp/cedet/srecode-utest-template.el
@@ -1,4 +1,4 @@
-;;; srecode/test.el --- SRecode Core Template tests. -*- lexical-binding:t -*-
+;;; srecode-utest-template.el --- SRecode Core Template tests. -*- 
lexical-binding:t -*-
 
 ;; Copyright (C) 2008-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/custom-resources/custom--test-theme.el 
b/test/lisp/custom-resources/custom--test-theme.el
index 4ced98a..122bd79 100644
--- a/test/lisp/custom-resources/custom--test-theme.el
+++ b/test/lisp/custom-resources/custom--test-theme.el
@@ -1,4 +1,4 @@
-;;; custom--test-theme.el -- A test theme.  -*- lexical-binding:t -*-
+;;; custom--test-theme.el --- A test theme.  -*- lexical-binding:t -*-
 
 (deftheme custom--test
   "A test theme.")
diff --git a/test/lisp/descr-text-tests.el b/test/lisp/descr-text-tests.el
index 6ba455b..2052dc0 100644
--- a/test/lisp/descr-text-tests.el
+++ b/test/lisp/descr-text-tests.el
@@ -1,4 +1,4 @@
-;;; descr-text-test.el --- ERT tests for descr-text.el -*- lexical-binding: t 
-*-
+;;; descr-text-tests.el --- ERT tests for descr-text.el -*- lexical-binding: t 
-*-
 
 ;; Copyright (C) 2014, 2016-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/emacs-lisp/bytecomp-tests.el 
b/test/lisp/emacs-lisp/bytecomp-tests.el
index a11832d..c9ab3ec 100644
--- a/test/lisp/emacs-lisp/bytecomp-tests.el
+++ b/test/lisp/emacs-lisp/bytecomp-tests.el
@@ -444,6 +444,65 @@
        (arith-error (prog1 (lambda (y) (+ y x))
                       (setq x 10))))
      4)
+
+    ;; No error, no success handler.
+    (condition-case x
+        (list 42)
+      (error (cons 'bad x)))
+    ;; Error, no success handler.
+    (condition-case x
+        (/ 1 0)
+      (error (cons 'bad x)))
+    ;; No error, success handler.
+    (condition-case x
+        (list 42)
+      (error (cons 'bad x))
+      (:success (cons 'good x)))
+    ;; Error, success handler.
+    (condition-case x
+        (/ 1 0)
+      (error (cons 'bad x))
+      (:success (cons 'good x)))
+    ;; Verify that the success code is not subject to the error handlers.
+    (condition-case x
+        (list 42)
+      (error (cons 'bad x))
+      (:success (/ (car x) 0)))
+    ;; Check variable scoping on success.
+    (let ((x 2))
+      (condition-case x
+          (list x)
+        (error (list 'bad x))
+        (:success (list 'good x))))
+    ;; Check variable scoping on failure.
+    (let ((x 2))
+      (condition-case x
+          (/ 1 0)
+        (error (list 'bad x))
+        (:success (list 'good x))))
+    ;; Check capture of mutated result variable.
+    (funcall
+     (condition-case x
+         3
+       (:success (prog1 (lambda (y) (+ y x))
+                   (setq x 10))))
+     4)
+    ;; Check for-effect context, on error.
+    (let ((f (lambda (x)
+               (condition-case nil
+                   (/ 1 0)
+                 (error 'bad)
+                 (:success 'good))
+               (1+ x))))
+      (funcall f 3))
+    ;; Check for-effect context, on success.
+    (let ((f (lambda (x)
+               (condition-case nil
+                   nil
+                 (error 'bad)
+                 (:success 'good))
+               (1+ x))))
+      (funcall f 3))
     )
   "List of expressions for cross-testing interpreted and compiled code.")
 
@@ -1185,6 +1244,74 @@ compiled correctly."
   (let ((lexical-binding t))
     (should (equal (funcall (byte-compile '(lambda (x) "foo")) 'dummy) 
"foo"))))
 
+(ert-deftest bytecomp-condition-case-success ()
+  ;; No error, no success handler.
+  (should (equal (condition-case x
+                     (list 42)
+                   (error (cons 'bad x)))
+                 '(42)))
+  ;; Error, no success handler.
+  (should (equal (condition-case x
+                     (/ 1 0)
+                   (error (cons 'bad x)))
+                 '(bad arith-error)))
+  ;; No error, success handler.
+  (should (equal (condition-case x
+                     (list 42)
+                   (error (cons 'bad x))
+                   (:success (cons 'good x)))
+                 '(good 42)))
+  ;; Error, success handler.
+  (should (equal (condition-case x
+                     (/ 1 0)
+                   (error (cons 'bad x))
+                   (:success (cons 'good x)))
+                 '(bad arith-error)))
+  ;; Verify that the success code is not subject to the error handlers.
+  (should-error (condition-case x
+                    (list 42)
+                  (error (cons 'bad x))
+                  (:success (/ (car x) 0)))
+                :type 'arith-error)
+  ;; Check variable scoping.
+  (let ((x 2))
+    (should (equal (condition-case x
+                       (list x)
+                     (error (list 'bad x))
+                     (:success (list 'good x)))
+                   '(good (2))))
+    (should (equal (condition-case x
+                       (/ 1 0)
+                     (error (list 'bad x))
+                     (:success (list 'good x)))
+                   '(bad (arith-error)))))
+  ;; Check capture of mutated result variable.
+  (should (equal (funcall
+                  (condition-case x
+                      3
+                    (:success (prog1 (lambda (y) (+ y x))
+                                (setq x 10))))
+                  4)
+                 14))
+    ;; Check for-effect context, on error.
+  (should (equal (let ((f (lambda (x)
+                            (condition-case nil
+                                (/ 1 0)
+                              (error 'bad)
+                              (:success 'good))
+                            (1+ x))))
+                   (funcall f 3))
+                 4))
+  ;; Check for-effect context, on success.
+  (should (equal (let ((f (lambda (x)
+                            (condition-case nil
+                                nil
+                              (error 'bad)
+                              (:success 'good))
+                            (1+ x))))
+                   (funcall f 3))
+                 4)))
+
 ;; Local Variables:
 ;; no-byte-compile: t
 ;; End:
diff --git a/test/lisp/emacs-lisp/cl-macs-tests.el 
b/test/lisp/emacs-lisp/cl-macs-tests.el
index 5c3e603..f4e2e46 100644
--- a/test/lisp/emacs-lisp/cl-macs-tests.el
+++ b/test/lisp/emacs-lisp/cl-macs-tests.el
@@ -630,12 +630,13 @@ collection clause."
                             (and xs
                                  (progn (setq n1 (1+ n))
                                         (len2 (cdr xs) n1))))))
-         ;; Tail call in error handler.
+         ;; Tail calls in error and success handlers.
          (len3 (xs n)
                (if xs
-                   (condition-case nil
-                       (/ 1 0)
-                     (arith-error (len3 (cdr xs) (1+ n))))
+                   (condition-case k
+                       (/ 1 (logand n 1))
+                     (arith-error (len3 (cdr xs) (1+ n)))
+                     (:success (len3 (cdr xs) (+ n k))))
                  n)))
       (should (equal (len nil 0) 0))
       (should (equal (len2 nil 0) 0))
diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el 
b/test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el
index 285616a..9f9bb73 100644
--- a/test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el
+++ b/test/lisp/emacs-lisp/eieio-tests/eieio-test-methodinvoke.el
@@ -1,4 +1,4 @@
-;;; eieio-testsinvoke.el -- eieio tests for method invocation  -*- 
lexical-binding:t -*-
+;;; eieio-test-methodinvoke.el --- eieio tests for method invocation  -*- 
lexical-binding:t -*-
 
 ;; Copyright (C) 2005, 2008, 2010, 2013-2021 Free Software Foundation,
 ;; Inc.
diff --git a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el 
b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
index a47fb80..11ffc11 100644
--- a/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
+++ b/test/lisp/emacs-lisp/eieio-tests/eieio-tests.el
@@ -1,4 +1,4 @@
-;;; eieio-tests.el -- eieio test routines -*- lexical-binding: t -*-
+;;; eieio-tests.el --- eieio test routines -*- lexical-binding: t -*-
 
 ;; Copyright (C) 1999-2003, 2005-2010, 2012-2021 Free Software
 ;; Foundation, Inc.
diff --git a/test/lisp/eshell/em-hist-tests.el 
b/test/lisp/eshell/em-hist-tests.el
index ec65397..31967a6 100644
--- a/test/lisp/eshell/em-hist-tests.el
+++ b/test/lisp/eshell/em-hist-tests.el
@@ -1,4 +1,4 @@
-;;; tests/em-hist-tests.el --- em-hist test suite  -*- lexical-binding:t -*-
+;;; em-hist-tests.el --- em-hist test suite  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/eshell/em-ls-tests.el b/test/lisp/eshell/em-ls-tests.el
index fc2cd9c..5d1742b 100644
--- a/test/lisp/eshell/em-ls-tests.el
+++ b/test/lisp/eshell/em-ls-tests.el
@@ -1,4 +1,4 @@
-;;; tests/em-ls-tests.el --- em-ls test suite  -*- lexical-binding:t -*-
+;;; em-ls-tests.el --- em-ls test suite  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/eshell/esh-opt-tests.el 
b/test/lisp/eshell/esh-opt-tests.el
index 0c99da6..e2a0ea5 100644
--- a/test/lisp/eshell/esh-opt-tests.el
+++ b/test/lisp/eshell/esh-opt-tests.el
@@ -1,4 +1,4 @@
-;;; tests/esh-opt-tests.el --- esh-opt test suite  -*- lexical-binding:t -*-
+;;; esh-opt-tests.el --- esh-opt test suite  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2018-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/eshell/eshell-tests.el b/test/lisp/eshell/eshell-tests.el
index 4dac702..4f0cc9b 100644
--- a/test/lisp/eshell/eshell-tests.el
+++ b/test/lisp/eshell/eshell-tests.el
@@ -1,4 +1,4 @@
-;;; tests/eshell-tests.el --- Eshell test suite  -*- lexical-binding:t -*-
+;;; eshell-tests.el --- Eshell test suite  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 1999-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/gnus/message-tests.el b/test/lisp/gnus/message-tests.el
index 8650053..36ec8c5 100644
--- a/test/lisp/gnus/message-tests.el
+++ b/test/lisp/gnus/message-tests.el
@@ -1,4 +1,4 @@
-;;; message-mode-tests.el --- Tests for message-mode  -*- lexical-binding: t; 
-*-
+;;; message-tests.el --- Tests for message-mode  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 2015-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/info-xref-tests.el b/test/lisp/info-xref-tests.el
index 95af21f..ecba861 100644
--- a/test/lisp/info-xref-tests.el
+++ b/test/lisp/info-xref-tests.el
@@ -1,4 +1,4 @@
-;;; info-xref.el --- tests for info-xref.el  -*- lexical-binding:t -*-
+;;; info-xref-tests.el --- tests for info-xref.el  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2013-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/international/ucs-normalize-tests.el 
b/test/lisp/international/ucs-normalize-tests.el
index a2da737..51f4ed3 100644
--- a/test/lisp/international/ucs-normalize-tests.el
+++ b/test/lisp/international/ucs-normalize-tests.el
@@ -1,4 +1,4 @@
-;;; ucs-normalize --- tests for international/ucs-normalize.el -*- 
lexical-binding: t -*-
+;;; ucs-normalize-tests.el --- tests for international/ucs-normalize.el -*- 
lexical-binding: t -*-
 
 ;; Copyright (C) 2002-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/net/nsm-tests.el b/test/lisp/net/nsm-tests.el
index ff45331..1a35ec3 100644
--- a/test/lisp/net/nsm-tests.el
+++ b/test/lisp/net/nsm-tests.el
@@ -1,4 +1,4 @@
-;;; network-stream-tests.el --- tests for network security manager -*- 
lexical-binding: t; -*-
+;;; nsm-tests.el --- tests for network security manager  -*- lexical-binding: 
t; -*-
 
 ;; Copyright (C) 2019-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/net/shr-tests.el b/test/lisp/net/shr-tests.el
index a06e31a..ed532af 100644
--- a/test/lisp/net/shr-tests.el
+++ b/test/lisp/net/shr-tests.el
@@ -1,4 +1,4 @@
-;;; network-stream-tests.el --- tests for network processes       -*- 
lexical-binding: t; -*-
+;;; shr-tests.el --- tests for shr.el  -*- lexical-binding: t; -*-
 
 ;; Copyright (C) 2016-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/net/tramp-tests.el b/test/lisp/net/tramp-tests.el
index be428fc..1eb0d0e 100644
--- a/test/lisp/net/tramp-tests.el
+++ b/test/lisp/net/tramp-tests.el
@@ -59,6 +59,7 @@
 (declare-function tramp-get-remote-perl "tramp-sh")
 (declare-function tramp-get-remote-stat "tramp-sh")
 (declare-function tramp-list-tramp-buffers "tramp-cmds")
+(declare-function tramp-method-out-of-band-p "tramp-sh")
 (declare-function tramp-smb-get-localname "tramp-smb")
 (defvar ange-ftp-make-backup-files)
 (defvar auto-save-file-name-transforms)
@@ -3097,6 +3098,7 @@ This tests also `file-directory-p' and 
`file-accessible-directory-p'."
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-rsync-p)))
+  (skip-unless (not (tramp--test-windows-nt-and-scp-p)))
   ;; Wildcards are not supported in tramp-crypt.el.
   (skip-unless (not (tramp--test-crypt-p)))
   ;; Since Emacs 26.1.
@@ -4369,7 +4371,7 @@ This tests also `make-symbolic-link', `file-truename' and 
`add-name-to-file'."
          (delete-file tmp-name))))))
 
 (defun tramp--test-shell-file-name ()
-  "Return default remote shell.."
+  "Return default remote shell."
   (if (tramp--test-adb-p) "/system/bin/sh" "/bin/sh"))
 
 (ert-deftest tramp-test28-process-file ()
@@ -5838,18 +5840,18 @@ This requires restrictions of file name syntax."
   "Check, whether the locale host runs MS Windows."
   (eq system-type 'windows-nt))
 
-(defun tramp--test-windows-nt-and-batch-p ()
-  "Check, whether the locale host runs MS Windows in batch mode.
-This does not support special characters."
-  (and (eq system-type 'windows-nt) noninteractive))
+(defun tramp--test-windows-nt-and-out-of-band-p ()
+  "Check, whether the locale host runs MS Windows and an out-of-band method.
+This does not support utf8 based file transfer."
+  (and (eq system-type 'windows-nt)
+       (tramp-method-out-of-band-p tramp-test-vec 1)))
 
-(defun tramp--test-windows-nt-and-pscp-psftp-p ()
-  "Check, whether the locale host runs MS Windows, and ps{cp,ftp} is used.
+(defun tramp--test-windows-nt-and-scp-p ()
+  "Check, whether the locale host runs MS Windows, and scpx? is used.
 This does not support utf8 based file transfer."
   (and (eq system-type 'windows-nt)
        (string-match-p
-       (regexp-opt '("pscp" "psftp"))
-       (file-remote-p tramp-test-temporary-file-directory 'method))))
+       "^scpx?" (file-remote-p tramp-test-temporary-file-directory 'method))))
 
 (defun tramp--test-windows-nt-or-smb-p ()
   "Check, whether the locale or remote host runs MS Windows.
@@ -6112,7 +6114,7 @@ This requires restrictions of file name syntax."
   "Check special characters in file names."
   (skip-unless (tramp--test-enabled))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
+  (skip-unless (not (tramp--test-windows-nt-and-scp-p)))
   (skip-unless (or (tramp--test-emacs26-p) (not (tramp--test-rclone-p))))
 
   (tramp--test-special-characters))
@@ -6124,7 +6126,7 @@ Use the `stat' command."
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
+  (skip-unless (not (tramp--test-windows-nt-and-scp-p)))
   ;; We cannot use `tramp-test-vec', because this fails during compilation.
   (with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
     (skip-unless (tramp-get-remote-stat v)))
@@ -6143,7 +6145,7 @@ Use the `perl' command."
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
+  (skip-unless (not (tramp--test-windows-nt-and-scp-p)))
   ;; We cannot use `tramp-test-vec', because this fails during compilation.
   (with-parsed-tramp-file-name tramp-test-temporary-file-directory nil
     (skip-unless (tramp-get-remote-perl v)))
@@ -6165,7 +6167,7 @@ Use the `ls' command."
   (skip-unless (tramp--test-enabled))
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
+  (skip-unless (not (tramp--test-windows-nt-and-scp-p)))
 
   (let ((tramp-connection-properties
         (append
@@ -6230,8 +6232,7 @@ Use the `ls' command."
   (skip-unless (tramp--test-enabled))
   (skip-unless (not (tramp--test-docker-p)))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
+  (skip-unless (not (tramp--test-windows-nt-and-out-of-band-p)))
   (skip-unless (not (tramp--test-ksh-p)))
   (skip-unless (not (tramp--test-gdrive-p)))
   (skip-unless (not (tramp--test-crypt-p)))
@@ -6247,8 +6248,7 @@ Use the `stat' command."
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-docker-p)))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
+  (skip-unless (not (tramp--test-windows-nt-and-out-of-band-p)))
   (skip-unless (not (tramp--test-ksh-p)))
   (skip-unless (not (tramp--test-crypt-p)))
   ;; We cannot use `tramp-test-vec', because this fails during compilation.
@@ -6270,8 +6270,7 @@ Use the `perl' command."
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-docker-p)))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
+  (skip-unless (not (tramp--test-windows-nt-and-out-of-band-p)))
   (skip-unless (not (tramp--test-ksh-p)))
   (skip-unless (not (tramp--test-crypt-p)))
   ;; We cannot use `tramp-test-vec', because this fails during compilation.
@@ -6296,8 +6295,7 @@ Use the `ls' command."
   (skip-unless (tramp--test-sh-p))
   (skip-unless (not (tramp--test-docker-p)))
   (skip-unless (not (tramp--test-rsync-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-batch-p)))
-  (skip-unless (not (tramp--test-windows-nt-and-pscp-psftp-p)))
+  (skip-unless (not (tramp--test-windows-nt-and-out-of-band-p)))
   (skip-unless (not (tramp--test-ksh-p)))
   (skip-unless (not (tramp--test-crypt-p)))
 
diff --git a/test/lisp/play/cookie1-tests.el b/test/lisp/play/cookie1-tests.el
index d63ecb9..75dea4e 100644
--- a/test/lisp/play/cookie1-tests.el
+++ b/test/lisp/play/cookie1-tests.el
@@ -1,4 +1,4 @@
-;;; fortune-tests.el --- Tests for fortune.el  -*- lexical-binding: t -*-
+;;; cookie1-tests.el --- Tests for cookie1.el  -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/progmodes/cperl-mode-tests.el 
b/test/lisp/progmodes/cperl-mode-tests.el
index 14bc48b..107b359 100644
--- a/test/lisp/progmodes/cperl-mode-tests.el
+++ b/test/lisp/progmodes/cperl-mode-tests.el
@@ -1,4 +1,4 @@
-;;; cperl-mode-tests --- Test for cperl-mode  -*- lexical-binding: t -*-
+;;; cperl-mode-tests.el --- Test for cperl-mode  -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2020-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/progmodes/perl-mode-tests.el 
b/test/lisp/progmodes/perl-mode-tests.el
index 9f6800c..f63f8ad 100644
--- a/test/lisp/progmodes/perl-mode-tests.el
+++ b/test/lisp/progmodes/perl-mode-tests.el
@@ -1,4 +1,4 @@
-;;; perl-mode-tests --- Test for perl-mode  -*- lexical-binding: t -*-
+;;; perl-mode-tests.el --- Test for perl-mode  -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2020-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/progmodes/project-tests.el 
b/test/lisp/progmodes/project-tests.el
new file mode 100644
index 0000000..c8c03aa
--- /dev/null
+++ b/test/lisp/progmodes/project-tests.el
@@ -0,0 +1,85 @@
+;;; project-tests.el --- tests for project.el -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2021  Free Software Foundation, Inc.
+
+;; Keywords:
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Unit tests for progmodes/project.el.
+
+;;; Code:
+
+(require 'project)
+
+(require 'cl-lib)
+(require 'ert)
+(require 'grep)
+(require 'xref)
+
+(defmacro project-tests--with-temporary-directory (var &rest body)
+  "Create a new temporary directory.
+Bind VAR to the name of the directory, and evaluate BODY.  Delete
+the directory after BODY exits."
+  (declare (debug (symbolp body)) (indent 1))
+  (cl-check-type var symbol)
+  (let ((directory (make-symbol "directory")))
+    `(let ((,directory (make-temp-file "project-tests-" :directory)))
+       (unwind-protect
+           (let ((,var ,directory))
+             ,@body)
+         (delete-directory ,directory :recursive)))))
+
+(ert-deftest project/quoted-directory ()
+  "Check that `project-files' and `project-find-regexp' deal with
+quoted directory names (Bug#47799)."
+  (skip-unless (executable-find find-program))
+  (skip-unless (executable-find "xargs"))
+  (skip-unless (executable-find "grep"))
+  (project-tests--with-temporary-directory directory
+    (let ((default-directory directory)
+          (project-current-inhibit-prompt t)
+          (project-find-functions nil)
+          (project-list-file
+           (expand-file-name "projects" directory))
+          (project (cons 'transient (file-name-quote directory)))
+          (file (expand-file-name "file" directory)))
+      (add-hook 'project-find-functions (lambda (_dir) project))
+      (should (eq (project-current) project))
+      (write-region "contents" nil file nil nil nil 'excl)
+      (should (equal (project-files project)
+                     (list (file-name-quote file))))
+      (let* ((references nil)
+             (xref-search-program 'grep)
+             (xref-show-xrefs-function
+              (lambda (fetcher _display)
+                (push (funcall fetcher) references))))
+        (project-find-regexp "tent")
+        (pcase references
+          (`((,item))
+           ;; FIXME: Shouldn't `xref-match-item' be a subclass of
+           ;; `xref-item'?
+           (should (cl-typep item '(or xref-item xref-match-item)))
+           (should (file-equal-p
+                    (xref-location-group (xref-item-location item))
+                    file)))
+          (otherwise
+           (ert-fail (format-message "Unexpected references: %S"
+                                     otherwise))))))))
+
+;;; project-tests.el ends here
diff --git a/test/lisp/progmodes/xref-tests.el 
b/test/lisp/progmodes/xref-tests.el
index c25bbd9..66099dc 100644
--- a/test/lisp/progmodes/xref-tests.el
+++ b/test/lisp/progmodes/xref-tests.el
@@ -156,3 +156,5 @@
                  (cl-every (lambda (e1 e2)
                              (string-match-p e1 e2))
                            expected actual)))))
+
+;;; xref-tests.el ends here
diff --git a/test/lisp/simple-tests.el b/test/lisp/simple-tests.el
index 601eca6..4b153d1 100644
--- a/test/lisp/simple-tests.el
+++ b/test/lisp/simple-tests.el
@@ -1,4 +1,4 @@
-;;; simple-test.el --- Tests for simple.el           -*- lexical-binding: t; 
-*-
+;;; simple-tests.el --- Tests for simple.el           -*- lexical-binding: t; 
-*-
 
 ;; Copyright (C) 2015-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/textmodes/fill-tests.el 
b/test/lisp/textmodes/fill-tests.el
index 21efe62..a4c7f44 100644
--- a/test/lisp/textmodes/fill-tests.el
+++ b/test/lisp/textmodes/fill-tests.el
@@ -1,4 +1,4 @@
-;;; fill-test.el --- ERT tests for fill.el -*- lexical-binding: t -*-
+;;; fill-tests.el --- ERT tests for fill.el -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/textmodes/tildify-tests.el 
b/test/lisp/textmodes/tildify-tests.el
index 59c2394..3ee3cd6 100644
--- a/test/lisp/textmodes/tildify-tests.el
+++ b/test/lisp/textmodes/tildify-tests.el
@@ -1,4 +1,4 @@
-;;; tildify-test.el --- ERT tests for tildify.el -*- lexical-binding: t -*-
+;;; tildify-tests.el --- ERT tests for tildify.el -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2014-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/thingatpt-tests.el b/test/lisp/thingatpt-tests.el
index 62a27f0..07eb8bb 100644
--- a/test/lisp/thingatpt-tests.el
+++ b/test/lisp/thingatpt-tests.el
@@ -1,4 +1,4 @@
-;;; thingatpt.el --- tests for thing-at-point.  -*- lexical-binding:t -*-
+;;; thingatpt-tests.el --- tests for thing-at-point.  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2013-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/vc/vc-bzr-tests.el b/test/lisp/vc/vc-bzr-tests.el
index aeab51e..b02dce8 100644
--- a/test/lisp/vc/vc-bzr-tests.el
+++ b/test/lisp/vc/vc-bzr-tests.el
@@ -1,4 +1,4 @@
-;;; vc-bzr.el --- tests for vc/vc-bzr.el  -*- lexical-binding: t -*-
+;;; vc-bzr-tests.el --- tests for vc/vc-bzr.el  -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2011-2021 Free Software Foundation, Inc.
 
diff --git a/test/lisp/xml-tests.el b/test/lisp/xml-tests.el
index cd3e113..b00b58a 100644
--- a/test/lisp/xml-tests.el
+++ b/test/lisp/xml-tests.el
@@ -1,4 +1,4 @@
-;;; xml-parse-tests.el --- Test suite for XML parsing.  -*- lexical-binding:t 
-*-
+;;; xml-tests.el --- Test suite for XML parsing.  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
diff --git a/test/manual/cedet/semantic-tests.el 
b/test/manual/cedet/semantic-tests.el
index 7169c78..1561c18 100644
--- a/test/manual/cedet/semantic-tests.el
+++ b/test/manual/cedet/semantic-tests.el
@@ -1,4 +1,4 @@
-;;; semantic-utest.el --- Miscellaneous Semantic tests.  -*- lexical-binding: 
t; -*-
+;;; semantic-tests.el --- Miscellaneous Semantic tests.  -*- lexical-binding: 
t; -*-
 
 ;; Copyright (C) 2003-2021  Free Software Foundation, Inc.
 
diff --git a/test/manual/cedet/tests/test.el b/test/manual/cedet/tests/test.el
index a54c253..d1d0d16 100644
--- a/test/manual/cedet/tests/test.el
+++ b/test/manual/cedet/tests/test.el
@@ -153,7 +153,4 @@
 (defvar-mode-local emacs-lisp-mode a-mode-local-def
   "some value")
 
-
-;;; Provide
-;;
 (provide 'test)
diff --git a/test/manual/image-size-tests.el b/test/manual/image-size-tests.el
index f7c2bf7..44846a7 100644
--- a/test/manual/image-size-tests.el
+++ b/test/manual/image-size-tests.el
@@ -1,4 +1,4 @@
-;;; image-size-tests.el -- tests for image scaling  -*- lexical-binding: t; -*-
+;;; image-size-tests.el --- tests for image scaling  -*- lexical-binding: t; 
-*-
 
 ;; Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
diff --git a/test/manual/image-transforms-tests.el 
b/test/manual/image-transforms-tests.el
index 5342b5e..debb74f 100644
--- a/test/manual/image-transforms-tests.el
+++ b/test/manual/image-transforms-tests.el
@@ -1,4 +1,4 @@
-;;; image-transform-tests.el --- Test suite for image transforms.  -*- 
lexical-binding: t -*-
+;;; image-transforms-tests.el --- Test suite for image transforms.  -*- 
lexical-binding: t -*-
 
 ;; Copyright (C) 2019-2021 Free Software Foundation, Inc.
 
diff --git a/test/manual/scroll-tests.el b/test/manual/scroll-tests.el
index 2f40b2b..dd15d54 100644
--- a/test/manual/scroll-tests.el
+++ b/test/manual/scroll-tests.el
@@ -1,4 +1,4 @@
-;;; scroll-tests.el -- tests for scrolling -*- lexical-binding: t -*-
+;;; scroll-tests.el --- tests for scrolling -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2017-2021 Free Software Foundation, Inc.
 
diff --git a/test/misc/test-custom-noloads.el b/test/misc/test-custom-noloads.el
index 6fa6a6c..5e95e7d 100644
--- a/test/misc/test-custom-noloads.el
+++ b/test/misc/test-custom-noloads.el
@@ -1,4 +1,4 @@
-;;; test-custom-deps.el --- Test custom noloads  -*- lexical-binding:t -*-
+;;; test-custom-noloads.el --- Test custom noloads  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2021 Free Software Foundation, Inc.
 
@@ -42,4 +42,4 @@
   (cus-test-noloads)
   (should-not cus-test-vars-not-cus-loaded))
 
-;;; test-custom-deps.el ends here
+;;; test-custom-noloads.el ends here
diff --git a/test/src/character-tests.el b/test/src/character-tests.el
new file mode 100644
index 0000000..f630b32
--- /dev/null
+++ b/test/src/character-tests.el
@@ -0,0 +1,45 @@
+;;; character-tests.el --- tests for character.c  -*- lexical-binding:t -*-
+
+;; Copyright (C) 2021 Free Software Foundation, Inc.
+
+;; This file is part of GNU Emacs.
+
+;; GNU Emacs is free software: you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; GNU Emacs is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with GNU Emacs.  If not, see <https://www.gnu.org/licenses/>.
+
+;;; Code:
+
+(require 'ert)
+
+(ert-deftest character-test-string-width ()
+  "Test `string-width' with and without compositions."
+  (should (= (string-width "1234") 4))
+  (should (= (string-width "12\t34") (+ 4 tab-width)))
+  (should (= (string-width "áëòç") 4))
+  (should (= (string-width "áëòç") 4))
+  (should (= (string-width "הַרְבֵּה אַהֲבָה") 9))
+  (should (= (string-width "1234" 1 3) 2))
+  (should (= (string-width "1234" nil -1) 3))
+  (should (= (string-width "1234" 2) 2))
+  (should-error (string-width "1234" nil 5))
+  (should-error (string-width "1234" -5))
+  (should (= (string-width "12\t34") (+ 4 tab-width)))
+  (should (= (string-width "1234\t56") (+ 6 tab-width)))
+  (should (= (string-width "áëòç") 4))
+  (should (= (string-width "áëòç" nil 3) 3))
+  (should (= (string-width "áëòç" 1 3) 2))
+  (should (= (string-width "áëòç" nil 2) 1))
+  (should (= (string-width "áëòç" nil 3) 2))
+  (should (= (string-width "áëòç" nil 4) 2))
+  (should (= (string-width "הַרְבֵּה אַהֲבָה") 9))
+  (should (= (string-width "הַרְבֵּה אַהֲבָה" nil 8) 4)))
diff --git a/test/src/editfns-tests.el b/test/src/editfns-tests.el
index ea80da4..a731a95 100644
--- a/test/src/editfns-tests.el
+++ b/test/src/editfns-tests.el
@@ -1,4 +1,4 @@
-;;; editfns-tests.el -- tests for editfns.c  -*- lexical-binding:t -*-
+;;; editfns-tests.el --- tests for editfns.c  -*- lexical-binding:t -*-
 
 ;; Copyright (C) 2016-2021 Free Software Foundation, Inc.
 
diff --git a/test/src/emacs-module-tests.el b/test/src/emacs-module-tests.el
index af5bc2a..0a68d51 100644
--- a/test/src/emacs-module-tests.el
+++ b/test/src/emacs-module-tests.el
@@ -1,4 +1,4 @@
-;;; emacs-module-tests --- Test GNU Emacs modules.  -*- lexical-binding: t; -*-
+;;; emacs-module-tests.el --- Test GNU Emacs modules.  -*- lexical-binding: t; 
-*-
 
 ;; Copyright 2015-2021 Free Software Foundation, Inc.
 
diff --git a/test/src/emacs-tests.el b/test/src/emacs-tests.el
index 09f9a24..87c3e84 100644
--- a/test/src/emacs-tests.el
+++ b/test/src/emacs-tests.el
@@ -144,12 +144,14 @@ to `make-temp-file', which see."
     (should-not (file-remote-p filter))
     (cl-callf file-name-unquote filter)
     (with-temp-buffer
-      (let ((status (call-process
+      (let ((start-time (current-time))
+            (status (call-process
                      emacs nil t nil
                      "--quick" "--batch"
                      (concat "--seccomp=" filter)
-                     (format "--eval=%S" '(message "Hi")))))
-        (ert-info ((format "Process output: %s" (buffer-string)))
+                     (format "--eval=%S" '(message "Hi"))))
+            (end-time (current-time)))
+        (ert-info ((emacs-tests--seccomp-debug start-time end-time))
           (should (eql status 0)))
         (should (equal (string-trim (buffer-string)) "Hi"))))))
 
@@ -167,14 +169,16 @@ to `make-temp-file', which see."
     (should-not (file-remote-p filter))
     (cl-callf file-name-unquote filter)
     (with-temp-buffer
-      (let ((status
+      (let ((start-time (current-time))
+            (status
              (call-process
               emacs nil t nil
               "--quick" "--batch"
               (concat "--seccomp=" filter)
               (format "--eval=%S" `(call-process ,emacs nil nil nil
-                                                 "--version")))))
-        (ert-info ((format "Process output: %s" (buffer-string)))
+                                                 "--version"))))
+            (end-time (current-time)))
+        (ert-info ((emacs-tests--seccomp-debug start-time end-time))
           (should-not (eql status 0)))))))
 
 (ert-deftest emacs-tests/bwrap/allows-stdout ()
@@ -205,9 +209,49 @@ to `make-temp-file', which see."
                           " ")
                " 20< "
                (shell-quote-argument (file-name-unquote filter))))
-             (status (call-process bash nil t nil "-c" command)))
-        (ert-info ((format "Process output: %s" (buffer-string)))
+             (start-time (current-time))
+             (status (call-process bash nil t nil "-c" command))
+             (end-time (current-time)))
+        (ert-info ((emacs-tests--seccomp-debug start-time end-time))
           (should (eql status 0)))
         (should (equal (string-trim (buffer-string)) "Hi"))))))
 
+(defun emacs-tests--seccomp-debug (start-time end-time)
+  "Return potentially useful debugging information for Seccomp.
+Assume that the current buffer contains subprocess output for the
+failing process.  START-TIME and END-TIME are time values between
+which the process was running."
+  ;; Add a bit of slack for the timestamps.
+  (cl-callf time-subtract start-time 5)
+  (cl-callf time-add end-time 5)
+  (with-output-to-string
+    (princ "Process output:")
+    (terpri)
+    (princ (buffer-substring-no-properties (point-min) (point-max)))
+    ;; Search audit logs for Seccomp messages.
+    (when-let ((ausearch (executable-find "ausearch")))
+      (terpri)
+      (princ "Potentially relevant Seccomp audit events:")
+      (terpri)
+      (let ((process-environment '("LC_TIME=C")))
+        (call-process ausearch nil standard-output nil
+                      "--message" "SECCOMP"
+                      "--start"
+                      (format-time-string "%D" start-time)
+                      (format-time-string "%T" start-time)
+                      "--end"
+                      (format-time-string "%D" end-time)
+                      (format-time-string "%T" end-time)
+                      "--interpret")))
+    ;; Print coredump information if available.
+    (when-let ((coredumpctl (executable-find "coredumpctl")))
+      (terpri)
+      (princ "Potentially useful coredump information:")
+      (terpri)
+      (call-process coredumpctl nil standard-output nil
+                    "info"
+                    "--since" (format-time-string "%F %T" start-time)
+                    "--until" (format-time-string "%F %T" end-time)
+                    "--no-pager"))))
+
 ;;; emacs-tests.el ends here
diff --git a/test/src/fileio-tests.el b/test/src/fileio-tests.el
index 7f193d4..b989c97 100644
--- a/test/src/fileio-tests.el
+++ b/test/src/fileio-tests.el
@@ -1,4 +1,4 @@
-;;; unit tests for src/fileio.c      -*- lexical-binding: t; -*-
+;;; fileio-tests.el --- unit tests for src/fileio.c      -*- lexical-binding: 
t; -*-
 
 ;; Copyright 2017-2021 Free Software Foundation, Inc.
 
diff --git a/test/src/thread-tests.el b/test/src/thread-tests.el
index 0e1ca76..fc7bc74 100644
--- a/test/src/thread-tests.el
+++ b/test/src/thread-tests.el
@@ -1,4 +1,4 @@
-;;; threads.el --- tests for threads. -*- lexical-binding: t -*-
+;;; thread-tests.el --- tests for threads. -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2012-2021 Free Software Foundation, Inc.
 
diff --git a/test/src/timefns-tests.el b/test/src/timefns-tests.el
index e55bd1e..0a450a7 100644
--- a/test/src/timefns-tests.el
+++ b/test/src/timefns-tests.el
@@ -1,4 +1,4 @@
-;;; timefns-tests.el -- tests for timefns.c -*- lexical-binding: t -*-
+;;; timefns-tests.el --- tests for timefns.c -*- lexical-binding: t -*-
 
 ;; Copyright (C) 2016-2021 Free Software Foundation, Inc.
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]